【AWS】インフラ構成図、コード管理しませんか?

梅木 和弥
メインビジュアル

みなさんは構成図の作成、どうされていますか?
draw.io、PowerPoint、Figma、などたくさんあると思います。
ただ、以下の課題って常につきまといますね。

  • TerraformやCDKでインフラを変更した後、構成図を手動で更新する手間と運用負荷
  • 更新漏れによる「実装とドキュメントの乖離」
  • 作成者による図の精度のバラツキ(属人性)

どうせなら、ツールで構成図の自動作成ができればいいですよね。

本記事では、これらの課題を解決する「Diagram-as-Code」を紹介します。

Diagram-as-Code とは

本記事で紹介する Diagram-as-code は、構造化されたテキストファイル(YAML)からAWSのアーキテクチャ図を自動生成するCLIツールです。

図の生成にあたって画像編集ソフトウェアや手作業での配置を必要としないため、効率的にアーキテクチャ図を作成・管理することができます。
AWS公式ドキュメントから引用

つまり。
図を作成するための画像編集ソフト、いわゆるPowerPointやFigma、draw.io は必要ありません。

専用の定義ファイルにリソース構造を記述し、コマンドを実行するだけで、AWS公式アイコンを使用した構成図が生成されます。

まだしっくり来ないでしょうか。簡単なイメージを提示いたします。

導入と使用イメージ

簡易な構成図を作成していきますね。

インストール

Go言語で実装されているため、go install でバイナリとして導入可能です。CI/CD環境への組み込みも容易です。

MacOSユーザーの場合

brew install awsdac

Goインストールされている場合

go install github.com/awslabs/diagram-as-code/cmd/awsdac@latest

公式のリポジトリにも同様の記載がありますのでこちらを参照ください。

使用イメージ

「VPC内のパブリックサブネットにLambdaが存在する」構成を例に紹介します。
本ツールで構成図を生成するためにまず、ドキュメントYamlファイルで、インフラの構成を表現していきます。

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: vertical
      Children:
        - network

    network:
      Type: AWS::EC2::VPC
      Children:
        - network-public-subnet

    network-public-subnet:
      Type: AWS::EC2::Subnet
      Preset: PublicSubnet
      Children:
        - lambda

    lambda:
      Type: AWS::Lambda::Function

以下のコマンドを実行します。

awsdac diagram.yaml

いかがですか?
画像が ./output.png で出力されているはずです。

特徴と利点

ここまでの説明だけだと、「手動作図」をただドキュメント+CLIに置き換えただけではないか、と思う方もいるかと。
Dialog as Codeは単なる「作図のCUI化」にとどまらないメリットがありますので紹介しますね。

  • AWS architecture guidelinesへの準拠
    公式アイコンと推奨されるレイアウトで統一された図が生成されます。
  • Infrastructure as Code(IaC)と統合管理
    定義ファイル(YAML)をGit管理することで、インフラコードとドキュメントのライフサイクルを一致させることができます。
  • MCPサーバー機能の搭載
    生成AIのエージェントとの連携ができます。
    (後ほど記載いたしますね)
  • CI/CDパイプラインへの統合
    軽量なCLIツールであるため、GitHub Actions等で「PR作成時に図を自動生成してコメントに添付する」といったワークフローが構築できます。

MCPサーバーとしての活用

YAMLの構文を人間が一から書くのは学習コストがかかりますよね。
記述に慣れてないと作法や構文エラーの修正など、少し大変です。
本ツールには Model Context Protocol (MCP) サーバー機能が内蔵されており、AIエージェントに「図の生成」を委譲可能です。

 

利用可能なMCPツール

  • generateDiagram: YAML 仕様から AWS アーキテクチャ図を生成し、base64 でエンコードされた PNG 画像を返す。
  • generateDiagramToFile: 基本仕様はgenerateDiagramと同じ。
    指定されたファイルパスに画像を直接保存します。
  • getDiagramAsCodeFormat: ドキュメントファイルを作成するための包括的な形式仕様、例、およびベストプラクティスを返します。

登録方法

基本的なMCPサーバーの登録方法とほとんど同じです。

私はGeminiCLIを普段使いしていますので、今回はGeminiClIのみのご紹介とさせていただきます。
~/.gemini/settings.json に以下を記載しております。

{
	"mcpServers": {
		"awsdac-mcp-server": {
			"command": "/opt/homebrew/bin/awsdac-mcp-server",
			"args": [],
			"type": "stdio"
		}
	}
}

公式リポジトリにもMCPサーバーの登録方法の記載がありますので、詳しくはこちらを参照ください。

プロンプトの例

プロンプトの例を提示します。

  • Generate an AWS architecture diagram showing a VPC with public and private subnets, an ALB, and EC2 instances. (公式例)
  • @MyStack.json ファイルを元にDiagram-as-Codeを活用し、インフラ構成図を作成してください。

注意点:

リポジトリ全体を読み込ませて「解析して図にして」と依頼すると、トークン消費量が膨大になるうえ、精度が安定しません。

AWS CDKやCloudFormationのテンプレートファイル(JSON/YAML)をコンテキストとして渡すのが実用的です。

生成AIによる自動化の展望

AWSブログにて、Diagram-as-CodeとAmazon Bedrockを組み合わせた、アーキテクチャ図作成の自動化ソリューション が紹介されています。

具体的には、ユーザーが自然言語で記述した要件や CloudFormation テンプレートを Amazon Bedrock(Claude 3 Sonnet 等のモデル)が解釈し、
Diagram-as-code が処理可能な定義ファイル(YAML形式)を自動生成します。

これにより、従来手作業で行われていたレイアウト調整や構成の反映を効率化し、AWS のアーキテクチャガイドラインに準拠した一貫性のある図を迅速に作成する手法が提示されています。

弊社でも、このアプローチを参考に、IaCプロジェクトのCI/CDパイプラインへの組み込みを検証中です。

開発プロセスの中で、コードの変更と同期してアーキテクチャ図が自動更新される環境が整備できれば、ドキュメントの陳腐化を防ぐ強力な手段となります。

弊社ならではのソリューションにつきましては、また別の記事で共有できれば、と考えております。

梅木 和弥/ アプリケーションエンジニア

Webのシステム開発における、設計・実装に携わっています。
業務ドメインを技術に翻訳する工程に注力しております。SOLID原則が僕の物差しです。

梅木 和弥 の書いた記事一覧

最新の関連記事

Contact お問い合わせ

Drupalでの開発・運用、サーバー構築、Webサイト構築全般についてお気軽にご相談ください。専門スタッフによるDrupal無料相談も行なっております。