継続は力なり

タイトル通り定期的な更新を心掛けるブログです。

AWS Diagram MCP Server を使って構成図と Diagrms のコードを生成した時のメモ✍

タダです.

以前の記事で Python を使ってシステム構成図を生成する Diagrams を紹介しました.AWS MCP サーバの中に AWS Diagram MCP Server というのがあり,Diagrams による構成図やコードの生成をサポートしてくれる為使ってみた時のメモをまとめます.

sadayoshi-tada.hatenablog.com

AWS Diagram MCP Server 概要

AWS Diagram MCP Server は Diagrams を使って AWS のシステム構成図とコードを生成するための MCPサーバーです.

awslabs.github.io

Claude Desktop での設定

以下のように設定して動作しました.

{
  "mcpServers": {
    "awslabs.aws-diagram-mcp-server": {
          "command": "uvx",
          "args": ["awslabs.aws-diagram-mcp-server"],
          "env": {
            "FASTMCP_LOG_LEVEL": "ERROR"
          },
          "autoApprove": [],
          "disabled": false
       }
}

Claude Code での設定

以下のように設定して動作しました.

claude mcp add aws-diagram \
  --env FASTMCP_LOG_LEVEL=ERROR \
  -- uvx awslabs.aws-diagram-mcp-server

システムの情報から構成図生成を依頼する

以下のシステム情報から構成図生成を依頼してみました.

・WEB3層構造のAWSアーキテクチャを設計し、構成図をかきます
・東京リージョンのマルチAZとします
・APIサーバーをFargateで構築します
・APIサーバー前段にALBを配置してください
・DBはAurora MySQLを使い、READER/WRITER1つずつ使用する構成とします
上記の構成図を生成してください

上記の依頼に対して以下の結果が返ってきました.

WEB3層構造のAWSアーキテクチャ図を生成させていただきます。東京リージョン(ap-northeast-1)でマルチAZ構成、Fargate、ALB、Aurora MySQLで構成します。完成しました!WEB3層構造のAWSアーキテクチャ図を生成いたしました。

構成の特徴:

WEB層(プレゼンテーション層) - Route53でDNS管理 - ALB(Application Load Balancer)でトラフィック分散

API層(アプリケーション層) - 2つのAZ(AZ-1a、AZ-1c)にまたがるマルチAZ構成 - 各AZに複数のFargateタスクを配置 - ALBがリクエストを各タスクに分散

DB層(データ層) - Aurora MySQL Cluster - Primary/Writer:AZ-1aに配置(書き込み用) - Reader:AZ-1cに配置(読み取り用) - レプリケーション接続で自動同期

この構成により、高可用性、スケーラビリティ、災害復旧性を備えた堅牢なシステムが実現できます。APIサーバーは読み取りと書き込みを適切に分離し、データベースの負荷を分散できます。

構成図としては次の画像が生成され良さげな結果でした.

合わせて Diagram のコードも出力されてくれるのでなにか生成された構成図を調整したいときはこのコードをベースに変更できます.

from diagrams import Diagram, Cluster, Edge
from diagrams.aws.compute import Fargate, ECS
from diagrams.aws.network import ALB, Route53
from diagrams.aws.database import RDS, Aurora
from diagrams.aws.storage import S3
from diagrams.aws.integration import SQS
from diagrams.aws.security import IAM

with Diagram("AWS WEB3層アーキテクチャ - 東京リージョン", show=False, direction="TB"):
    # クライアント層
    users = Route53("Route53\n(DNS)")

    with Cluster("WEB層 (東京リージョン ap-northeast-1)"):
        with Cluster("ALB"):
            alb = ALB("Application\nLoad Balancer")

        with Cluster("AZ-1a (API層)"):
            api_1a_1 = Fargate("API Server\nTask-1")
            api_1a_2 = Fargate("API Server\nTask-2")

        with Cluster("AZ-1c (API層)"):
            api_1c_1 = Fargate("API Server\nTask-3")
            api_1c_2 = Fargate("API Server\nTask-4")

    with Cluster("DB層 (Aurora MySQL)"):
        with Cluster("AZ-1a"):
            writer = Aurora("Aurora MySQL\n(Primary/Writer)")

        with Cluster("AZ-1c"):
            reader = Aurora("Aurora MySQL\n(Reader)")

    # 接続関係
    users >> alb

    alb >> Edge(label="ロードバランシング") >> api_1a_1
    alb >> api_1a_2
    alb >> api_1c_1
    alb >> api_1c_2

    # API → DB
    api_1a_1 >> Edge(label="Write") >> writer
    api_1a_2 >> Edge(label="Write") >> writer
    api_1c_1 >> Edge(label="Write") >> writer
    api_1c_2 >> Edge(label="Write") >> writer

    api_1a_1 >> Edge(label="Read", style="dashed") >> reader
    api_1a_2 >> Edge(label="Read", style="dashed") >> reader
    api_1c_1 >> Edge(label="Read", style="dashed") >> reader
    api_1c_2 >> Edge(label="Read", style="dashed") >> reader

    # DB間のレプリケーション
    writer >> Edge(label="Replication", style="dotted", color="green") >> reader

まとめ

AWS Diagram MCP Serverの設定とシステム構成図と Diagrams のコードを生成した時の結果をまとめました.