@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
Close
Hashes for aws_prototyping_sdk.cdk_graph_plugin_diagram-0.12.22.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | ea19bbbbce94899bc58a15f033adcdfee28a915369e87940c515f113d71715f1 |
|
MD5 | 4e7a49c3bfb8b41ea6ce25ea41feffca |
|
BLAKE2b-256 | 07cd12f441e0dc2edc901bd72dd8e6861b0bf0b11d5a460e647a3aaea314ef62 |
Close
Hashes for aws_prototyping_sdk.cdk_graph_plugin_diagram-0.12.22-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1f97d3efa40bf566804a2637782dcce0d1630f8a1c24d08c68ff432cd8302af1 |
|
MD5 | d5ca57aa9f80e868465295d91adf06d3 |
|
BLAKE2b-256 | 5e38cd9bdc6cf9cfe77d5bee7dc0991228b581e2059ae6985b7b6ffd39ba377b |