記事公開日
コードで構成図? Diagram as Codeを解説!

この記事のポイント
この記事では、awslabsのGitHubで公開されているCLIツール「Diagram as Code(awsdac)」を使って、インフラ構成図をコードで管理・作成する方法を解説しています。
- Diagram as Codeの導入:
YAML形式でリソースを定義し、手作業での構成図作成から解放されるメリットを紹介します。 - YAML定義の基本構造:
Canvas、Resources、Linksといった各セクションの役割と、リソースの階層構造の書き方を詳しく解説します。 - 実践的な変換手順:
ローカル環境へのインストールから、YAMLファイルやCloudFormation(CFn)テンプレートを画像(PNG)へ変換する手順を解説します。
本記事で紹介する「CloudFormationテンプレートから構成図画像(PNG)への変換」は、現在(2026年3月16日時点)Beta版の機能です。
こんにちは!DXソリューション営業本部の菊池です。
AWS構築業務の最中、ふと疑問に感じたことがあります。
「CloudFormationでリソースはコード管理しているのに、なぜ構成図だけは毎回手作業で描いているのだろう……?」
そんな「構築とドキュメントのギャップ」を解決するのが、今回ご紹介するDiagram as Codeです!
構成図もコードベースで作成することで、バージョン管理やチームへの共有・修正作業がスムーズになります。
Diagram as Code(awsdac)とは
awslabsで公開されている、コード形式で構成図を定義し画像出力まで行えるオープンソースのCLIツールです。
詳細は下記公式GitHubをご覧ください。
また、本記事では紹介しませんがMCPサーバーも用意されているので、興味がある方は下記リンクをご覧ください。
Diagram as Codeの記述方法
ここからは、Diagram as Codeではどのようにコードで構成図を定義しているかを解説していきます。
Diagram as CodeはYAML形式のコードを使用して構成図を定義します。
今回は下記コードを元に記述方法を理解していきましょう。
このコードでは、Public SubnetにあるEC2インスタンスに、Userがアクセスする構成図を定義しています。
Diagram:
DefinitionFiles:
- Type: URL
Url: https://raw.githubusercontent.com/awslabs/diagram-as-code/main/definitions/definition-for-aws-icons-light.yaml
Resources:
Canvas:
Type: AWS::Diagram::Canvas
Direction: horizontal
Children:
- AWSCloud
AWSCloud:
Type: AWS::Diagram::Cloud
Preset: AWSCloudNoLogo
Direction: horizontal
Children:
- User
- VPC
User:
Type: AWS::Diagram::Resource
Preset: User
Title: "User"
VPC:
Type: AWS::EC2::VPC
Title: "VPC\n10.0.0.0/16"
Direction: vertical
Children:
- PublicSubnet
PublicSubnet:
Type: AWS::EC2::Subnet
Preset: PublicSubnet
Title: "Public Subnet\n10.0.1.0/24"
Children:
- EC2
EC2:
Type: AWS::EC2::Instance
Title: "EC2\nInstance"
Links:
- Source: User
SourcePosition: E
Target: EC2
TargetPosition: W
TargetArrowHead:
Type: Open
後の実践でも出力しますが、コードを画像化すると、下記の画像になります。
DefinitionFiles
ここでは、構成図に使用するアイコンを指定しています。
Urlの値を変えることで、2種類の公式アイコン(ライトモード用/ダークモード用)を使用できます。
- ライトモード用:https://raw.githubusercontent.com/awslabs/diagram-as-code/main/definitions/definition-for-aws-icons-light.yaml
- ダークモード用:https://raw.githubusercontent.com/awslabs/diagram-as-code/main/definitions/definition-for-aws-icons-dark.yaml
Resources
画像内に配置するリソースを定義するセクションです。
例として、Canvas, AWS Cloud, User, VPCに着目して内容を理解しましょう。
リソースの種類
リソースは大きく分けて2種類あります:
- Childrenを持つリソース(コンテナ):
Childrenプロパティを持ち、他のリソースを内包する - Childrenを持たないリソース(単体):
Childrenプロパティがなく、単独で存在する
Childrenを持つリソース(コンテナ)の例
他のリソースを内包する「コンテナ」の役割を果たします。
枠線で囲まれて表示され、階層構造を視覚的に表現します。
Canvas:
Type: AWS::Diagram::Canvas
Direction: horizontal
Children:
- AWSCloud
AWSCloud:
Type: AWS::Diagram::Cloud
Preset: AWSCloudNoLogo
Direction: horizontal
Children:
- User
- VPC
VPC:
Type: AWS::EC2::VPC
Title: "VPC\n10.0.0.0/16"
Direction: vertical
Children:
- PublicSubnet
PublicSubnet:
Type: AWS::EC2::Subnet
Preset: PublicSubnet
Title: "Public Subnet\n10.0.1.0/24"
Children:
- EC2
Childrenを持たないリソース(単体)の例
Childrenプロパティがなく、アイコンのみが表示されます。
User: Type: AWS::Diagram::Resource Preset: User Title: "User" EC2: Type: AWS::EC2::Instance Title: "EC2\nInstance"
階層構造
上記で説明したコンテナと単体リソースを組み合わせることで、階層構造が作成されます。
今回の例の階層構造は下記のとおりとなります。
Canvasの中にAWSCloudが、AWSCloudの中にUser,VPCが...と言う形になっています。
Canvas (キャンバス全体)
└── AWSCloud (AWS環境)
├── User (外部ユーザー)
└── VPC (プライベートネットワーク)
└── Public Subnet (パブリックサブネット)
└── EC2 Instance (Webサーバー)
階層構造のポイント:
Canvasは必ず最上位に配置(図全体の土台)Childrenプロパティで親子関係を定義- コンテナは枠線で囲まれ、視覚的に「このリソースはこの中にある」という関係が分かる
- 単体リソースは単独のアイコンとして表示される
Links
Linksでは、リソース間の関係(矢印)を表します。
今回の例では、UserからEC2へのリンクを定義しています。
- Source / Target: 矢印の始点と終点のリソース名を指定します。
- SourcePosition / TargetPosition: 矢印が出る/入る方位を指定します(N, E, S, Wなど)。今回はE(右)から出てW(左)に入り、左から右への流れを表現しています。
- TargetArrowHead: 矢印の先端形状を指定します(Open, Closedなど)。
実践:画像を生成してみる
それでは、Diagram as CodeをローカルマシンのCLI上で実行し、YAMLファイルを画像に変換してみましょう。
前提条件とインストール
Go 1.21以上がインストールされている必要があります。
インストールがまだの場合、下記公式リンクよりインストールしてください。
Goインストール後、以下のコマンドでawsdacをインストールします。
macOS
$ brew install awsdac
Windows/Linux
$ go install github.com/awslabs/diagram-as-code/cmd/awsdac@latest
画像の生成
1. YAMLからPNGへの変換
画像の生成には下記コマンドを実行します。
awsdac "input filename" --output filename
実際にコマンドを実行してみましょう。
[Completed] AWS infrastructure diagram generated: test1.pngというメッセージが表示され、ディレクトリに画像が生成されました。
出力された画像は以下の通りです。
基本セクションで解説したものと同じ図ですが、定義した通りの構成図が生成されています。
2. CloudFormation(CFn)からPNGへの変換
次に、同じ構成(VPC, Public Subnet, EC2)を定義したCloudFormationテンプレートファイル(test-cfn.yaml)を直接画像に変換してみます。
以下のコマンドを実行します。
awsdac test-cfn.yaml -c -o test-cfn.png
実行すると、いくつかの警告(Warning:未定義リソースのフォールバック警告など)が表示されますが、画像は生成されます。
生成された図を確認すると、リソースごとの接続線が描画されていなかったり、要素の配置が意図と異なっています。
この機能はまだBeta版ですので、今後の発展に期待しましょう!
まとめ
今回はDiagram as Codeを使用して、コードから構成図を生成してみました。
Diagram as Codeを使用することで、YAMLコードを共有するだけで誰でも同じ構成図を生成することができるようになります。
また、CFnからの変換機能もBetaとして備わっているため、将来的には既存のCFnから自動でドキュメント用の図を生成できる可能性も秘めています。
もし「このサービスについて知りたい」「AWS環境の構築、移行」などのリクエストがございましたら、弊社お問合せフォームまでお気軽にご連絡ください。 複雑な内容に関するお問い合わせの場合には直接営業からご連絡を差し上げます。 また、よろしければ以下のリンクもご覧ください!
<QES関連ソリューション/ブログ>
<QESが参画しているAWSのセキュリティ推進コンソーシアムがホワイトペーパーを公開しました>
※Amazon Web Services、”Powered by Amazon Web Services”ロゴ、およびブログで使用されるその他のAWS商標は、米国その他の諸国における、Amazon.com, Inc.またはその関連会社の商標です。


