AWS Strands Agentsを使ってAWSのシステム構成図を作成する
AWS Strands Agentsを使ってAWSのシステム構成図を作成する方法のご紹介です。AWSからはCloudFormationの情報を操作するためのMCP Serverが提供されています。これを利用して、AWSのシステム構成図を作成する方法を確認してみました。
対象とするシステム
以下のシステムを対象としています。AWS環境にデプロイした後のCloudFormationの情報を取得して、システム構成図を作成するというシナリオです。
前提条件
- Strands Agents: 0.1.2
ソースコード
- agents-aws-architecture-diagram.py
from strands import Agent
from strands.tools.mcp import MCPClient
from mcp import stdio_client, StdioServerParameters
from strands.models import BedrockModel
NAMING_SYSTEM_PROMPT = """
あなたはAWSリソースの情報を取得しdraw.io形式でAWSのシステム構成図を描画するアシスタントです。
ユーザが指定したStackの情報をツールを使って取得し、draw.io形式でAWSアーキテクチャ図を描画してください。
xml形式のみ出力してください。
"""
get_aws_resource_info_tools = MCPClient(
lambda: stdio_client(
StdioServerParameters(
command="uvx",
# CloudFormation MCP Serverを指定します。`--readonly`オプションを指定することでMCP ServerがAWSに書き込みを行わないようにします。
args=["awslabs.cfn-mcp-server@latest", "--readonly"],
# MCP ServerがAWSにアクセスできるように、ENVにAWS_PROFILEを指定します。
env={"AWS_PROFILE": "your-aws-profile"},
)
)
)
bedrock_model = BedrockModel(
model_id="apac.anthropic.claude-3-7-sonnet-20250219-v1:0", temperature=0.0
)
with get_aws_resource_info_tools:
tools = get_aws_resource_info_tools.list_tools_sync()
drawing_agent = Agent(
system_prompt=NAMING_SYSTEM_PROMPT, tools=tools, model=bedrock_model
)
# Agentには、リポジトリの内容をデプロイした後のStack名を指定します。
result = str(drawing_agent("discord-bot-zundamon-test-discord-bot"))
# Agentからのレスポンスにはdraw.io形式以外の出力が含まれる可能性があります。
# このため、resultから<mxfileから始まり、</mxfile>で終わる部分を抽出します。
start = result.find("<mxfile")
end = result.find("</mxfile>") + len("</mxfile>")
result = result[start:end]
with open("aws_architecture_diagram.drawio", "w") as f:
f.write(result)
以下のように実行します。
python -u agents-aws-architecture-diagram.py
生成されたシステム構成図
以下のようなシステム構成図が生成されました。そのままを利用するのは微妙ですがdraw.io形式で出力されているので、draw.ioで開いて修正することができます。
システム構成図の改善案
AWS MCP Serversには図を描画するためのMCP Serverもあります。これをAgentにToolとして組み込む事で、より良いシステム構成図を描画することができるかもしれません。