@aws-prototyping-sdk/cdk-graph-plugin-diagram
Project description
Diagram Plugin - Cdk Graph
@aws-prototyping-skd/cdk-graph-plugin-diagram
This plugin generates diagrams utilizing the cdk-graph framework.
More comprehensive documentation to come as this package stabilizes.
Disclaimer: This is the first cdk graph plugin, it is highly experimental, and subject to major refactors as we gain feedback from the community.
Quick Start
// bin/app.ts
// Must wrap cdk app with async IIFE function to enable async cdk-graph report
(async () => {
const app = new App();
// ... add stacks, etc
const graph = new CdkGraph(app, {
plugins: [new CdkGraphDiagramPlugin()],
});
app.synth();
// async cdk-graph reporting hook
await graph.report();
})
// => cdk.out/diagram.dot
// => cdk.out/diagram.svg
// => cdk.out/diagram.png
This plugin currently only supports
async report()generation following the above example. Make sure to wrap the cdk app with async IIFE.
Supported Formats
| Format | Status | Extends | Provider |
|---|---|---|---|
| DOT | - | Graphviz | |
| SVG | DOT | Graphviz | |
| PNG | SVG | Graphviz |
Diagram Providers
| Provider | Status | Formats |
|---|---|---|
| Graphviz | DOT, SVG, PNG | |
| Drawio | TBD: very early stage design and development |
Configuration
See API Documentation for details, and look in unit tests for more examples.
Example Configurations (expand below)
Presets
Preset: compact
{
name: "compact",
title: "Compact Diagram",
filterPlan: {
preset: FilterPreset.COMPACT,
},
},
Preset: verbose
{
name: "verbose",
title: "Verbose Diagram",
format: DiagramFormat.PNG,
ignoreDefaults: true,
},
Focus
Focus: hoist
{
name: "focus",
title: "Focus Lambda Diagram (non-extraneous)",
filterPlan: {
focus: (store) =>
store.getNode(getConstructUUID(app.stack.lambda)),
preset: FilterPreset.NON_EXTRANEOUS,
},
ignoreDefaults: true,
},
Focus: no hoist
{
name: "focus-nohoist",
title: "Focus WebServer Diagram (noHoist, verbose)",
filterPlan: {
focus: {
node: (store) =>
store.getNode(getConstructUUID(app.stack.webServer)),
noHoist: true,
},
},
ignoreDefaults: true,
},
Filters
Filter: Include specific cfn resource types
{
name: "includeCfnType",
title: "Include CfnType Diagram (filter)",
filterPlan: {
filters: [
Filters.includeCfnType([
aws_arch.CfnSpec.ServiceResourceDictionary.EC2.Instance,
/AWS::Lambda::Function.*/,
"AWS::IAM::Role",
]),
Filters.compact(),
],
},
},
Filter: Exclude specific cfn resource types
{
name: "excludeCfnType",
title: "Exclude CfnType Diagram (filter)",
filterPlan: {
filters: [
Filters.excludeCfnType([
/AWS::EC2::VPC.*/,
aws_arch.CfnSpec.ServiceResourceDictionary.IAM.Role,
]),
Filters.compact(),
],
},
},
Filter: Include specific graph node types
{
name: "includeNodeType",
title: "Include NodeType Diagram (filter)",
filterPlan: {
filters: [
Filters.includeNodeType([
NodeTypeEnum.STACK,
NodeTypeEnum.RESOURCE,
]),
Filters.compact(),
],
},
},
Filter: Include specific graph node types
{
name: "includeNodeType",
title: "Include NodeType Diagram (filter)",
filterPlan: {
filters: [
Filters.includeNodeType([
NodeTypeEnum.STACK,
NodeTypeEnum.RESOURCE,
]),
Filters.compact(),
],
},
},
Filter: Exclude specific graph node types
{
name: "excludeNodeType",
title: "Exclude NodeType Diagram (filter)",
filterPlan: {
filters: [
Filters.excludeNodeType([
NodeTypeEnum.NESTED_STACK,
NodeTypeEnum.CFN_RESOURCE,
NodeTypeEnum.OUTPUT,
NodeTypeEnum.PARAMETER,
]),
Filters.compact(),
],
},
},
Themes
Theme: Dark - render service icons
{
name: "dark-services",
title: "Dark Theme Custom Diagram",
theme: {
theme: theme,
rendering: {
resourceIconMin: GraphThemeRenderingIconTarget.SERVICE,
resourceIconMax: GraphThemeRenderingIconTarget.CATEGORY,
cfnResourceIconMin: GraphThemeRenderingIconTarget.DATA,
cfnResourceIconMax: GraphThemeRenderingIconTarget.RESOURCE,
},
},
},
Theme: Dark - verbose
{
name: "dark-verbose",
title: "Dark Theme Verbose Diagram",
ignoreDefaults: true,
theme: theme,
},
Next Steps
- Battle test in the wild and get community feedback
- Improve image coverage and non-image node rendering
- Add drawio support
- Add common filter patterns and helpers
- Enable generating diagrams outside of synthesis process (maybe CLI)
- Implement interactive diagram, with potential for dynamic filtering and config generation
- Support using interactive diagram as config generator for other plugins (or as separate plugin that depends on this)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file aws_prototyping_sdk.cdk_graph_plugin_diagram-0.12.21.tar.gz.
File metadata
- Download URL: aws_prototyping_sdk.cdk_graph_plugin_diagram-0.12.21.tar.gz
- Upload date:
- Size: 6.2 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
82d1e6e26514fdb0befe1b654aa726f326629cce2e85b22680c8520ffe6afa76
|
|
| MD5 |
56b4c158a0ae43553ed8924be5d471f6
|
|
| BLAKE2b-256 |
fe148e625f750789b7ce357c3c4c58201a0a0132e6001bc3969f9d63682e8286
|
File details
Details for the file aws_prototyping_sdk.cdk_graph_plugin_diagram-0.12.21-py3-none-any.whl.
File metadata
- Download URL: aws_prototyping_sdk.cdk_graph_plugin_diagram-0.12.21-py3-none-any.whl
- Upload date:
- Size: 6.2 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
91791c2f327812b6d8e08246899fd919ac513221d7d07c865c2cbd2d2caf7be5
|
|
| MD5 |
a48569cc89e74c08a413f8f0c3908a7f
|
|
| BLAKE2b-256 |
68d881b741cf242ef08147d8b8538441816ee95de668521c82c6a26b2c667ec8
|