1. 主要ページへ移動
  2. メニューへ移動
  3. ページ下へ移動

QES ブログ

記事公開日

コードで構成図? 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

後の実践でも出力しますが、コードを画像化すると、下記の画像になります。

AWS構成図例

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

実際にコマンドを実行してみましょう。

awsdacコマンド実行画面

[Completed] AWS infrastructure diagram generated: test1.pngというメッセージが表示され、ディレクトリに画像が生成されました。
出力された画像は以下の通りです。
基本セクションで解説したものと同じ図ですが、定義した通りの構成図が生成されています。

生成されたAWS構成図

2. CloudFormation(CFn)からPNGへの変換

次に、同じ構成(VPC, Public Subnet, EC2)を定義したCloudFormationテンプレートファイル(test-cfn.yaml)を直接画像に変換してみます。
以下のコマンドを実行します。

awsdac test-cfn.yaml -c -o test-cfn.png

実行すると、いくつかの警告(Warning:未定義リソースのフォールバック警告など)が表示されますが、画像は生成されます。

CFn変換時の実行画面
CFn変換した画像

生成された図を確認すると、リソースごとの接続線が描画されていなかったり、要素の配置が意図と異なっています。
この機能はまだ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.またはその関連会社の商標です。

  • このエントリーをはてなブックマークに追加

お問い合わせ

Contact

ご質問やご相談、サービスに関する詳細など、何でもお気軽にご連絡ください。下記のお問い合わせフォームよりお気軽に送信ください。

お問い合わせ

資料ダウンロード

Download

当社のサービスに関する詳細情報を掲載した資料を、下記のページよりダウンロードいただけます。より深く理解していただける内容となっております。ぜひご活用ください。

資料ダウンロード