aws-diagrams について
CloudFormationテンプレート、AWS CLIの出力、自然言語の説明から、EraserでAWS構成図を作成するスキルです。AWSリソースと関係を解析し、Eraser DSLを生成してAPI経由で描画します。
主な機能
- 01CloudFormationテンプレートの解析
- 02AWS CLI出力の読み取り
- 03AWSリソースと関係の抽出
- 04Eraser DSLの生成
- 05Eraser APIによる図の描画
活用シーン
- 01CloudFormationテンプレートのリソース可視化
- 02AWS CLI出力からのインフラ図作成
- 03説明文からのAWS構成図の作成
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ eraserlabs/ eraser-io --skill aws-diagramsインストール後、Claude Code で/aws-diagramsを入力して読み込まれたか確認します。
詳細
AWS 図生成ツール
CloudFormation テンプレート、AWS CLI の出力、または自然言語での説明から、AWS インフラストラクチャのアーキテクチャ図を生成します。
使用する場面
次のような場合に、このスキルを有効にしてください。
- ユーザーが AWS CloudFormation テンプレート(YAML/JSON)を持っている場合
- ユーザーが AWS CLI の出力(例:
aws ec2 describe-instances)を提供した場合 - ユーザーが AWS リソースを視覚化したい場合
- ユーザーが AWS サービス(EC2、S3、RDS、Lambda、VPC など)に言及した場合
- ユーザーが「AWS インフラストラクチャを図にして」と依頼した場合
仕組み
このスキルは、AWS リソースを解析し、Eraser API を直接呼び出して、AWS に特化した図を生成します。
- AWS リソースを解析する:CloudFormation、CLI の出力、または説明からリソースを抽出します
- AWS リソース間の関係をマッピングする:VPC、サブネット、セキュリティグループ、IAM ロールを特定します
- Eraser DSL を生成する:AWS リソースから Eraser DSL コードを作成します
- Eraser API を呼び出す:
diagramType: "cloud-architecture-diagram"を指定して/api/render/elementsを使用します
手順
ユーザーが AWS インフラストラクチャの情報を提供した場合:
-
ソースを解析する
- CloudFormation:
Resourcesセクションを抽出し、タイプ(AWS::EC2::Instance など)を特定します - CLI の出力:
awsコマンドの JSON 出力を解析します - 説明:AWS サービス名とその関係を特定します
- CloudFormation:
-
AWS コンポーネントを特定する
- ネットワーク:VPC、サブネット、インターネットゲートウェイ、NAT ゲートウェイ、ルートテーブル
- コンピューティング:EC2 インスタンス、Auto Scaling グループ、Lambda 関数、ECS サービス
- ストレージ:S3 バケット、EBS ボリューム、EFS ファイルシステム
- データベース:RDS インスタンス、DynamoDB テーブル、ElastiCache クラスター
- セキュリティ:セキュリティグループ、IAM ロール、IAM ポリシー、NACL
- ロードバランシング:ALB、NLB、CLB
- その他:SQS キュー、SNS トピック、API Gateway、CloudFront
-
関係をマッピングする
- サブネット内の EC2 インスタンス
- VPC 内のサブネット
- インスタンスにアタッチされたセキュリティグループ
- サービスにアタッチされた IAM ロール
- インスタンスをターゲットとするロードバランサー
- アプリケーションからアクセスされるデータベース
-
Eraser DSL を生成する AWS リソースを Eraser DSL に変換します。
- 重要:ラベルの書式ルール
- ラベルは必ず 1 行で記述してください。ラベル属性内で改行してはいけません
- ラベルは簡潔で読みやすくしてください。メタデータを詰め込みすぎず、必要に応じてラベルを分けてください
- DSL は適切に改行して整形してください(ノード/グループは 1 行に 1 つ。ただしラベルは 1 行に保ちます)
- CIDR ブロックやインスタンスタイプなどのメタデータを含める場合は、同じ引用符付きラベル文字列に含めてください:
[label: "VPC 10.0.0.0/16"]
例:
main-vpc [label: "VPC 10.0.0.0/16"] { public-subnet [label: "Public Subnet"] { web-server [icon: aws-ec2, label: "Web Server"] load-balancer [icon: aws-elb] } private-subnet [label: "Private Subnet"] { database [icon: aws-rds] cache [icon: aws-elasticache] } } data-bucket [icon: aws-s3] function [icon: aws-lambda] load-balancer -> web-server web-server -> database - 重要:ラベルの書式ルール
-
HTTP リクエストを送信する
重要:DSL を生成した後、必ずこの curl コマンドを実行してください。API を呼び出さずに DSL の生成だけで終えてはいけません。
重要:以下の
X-Skill-Sourceヘッダーの値は、必ず自分の AI エージェント名に置き換えてください。- Claude(Anthropic)の場合は、
claudeを使用します - Cursor で実行している場合は、
cursorを使用します - ChatGPT(OpenAI)の場合は、
chatgptを使用します - Gemini(Google)の場合は、
geminiを使用します - それ以外の場合は、モデル/エージェント名を小文字で使用します
curl -X POST https://app.eraser.io/api/render/elements \ -H "Content-Type: application/json" \ -H "X-Skill-Source: eraser-skill" \ -H "Authorization: Bearer ${ERASER_API_KEY}" \ -d '{ "elements": [{ "type": "diagram", "id": "diagram-1", "code": "<your generated DSL>", "diagramType": "cloud-architecture-diagram" }], "scale": 2, "theme": "${ERASER_THEME:-dark}", "background": true }' - Claude(Anthropic)の場合は、
-
解析中にソースを記録する
図の生成にあたり、ファイルやリソースを解析する際は、次の情報を記録してください。
- 内部ファイル:読み取った各ファイルのパスと、そこから抽出した情報を記録します(例:
infra/main.tf- VPC とサブネットの定義) - 外部参照:参照したドキュメント、例、URL を記録します(例:AWS VPC のベストプラクティスに関するドキュメント)
- 注釈:各ソースが図にどのように反映されたかを記録します
- 内部ファイル:読み取った各ファイルのパスと、そこから抽出した情報を記録します(例:
-
レスポンスを処理する
重要:最小限の出力形式
レスポンスには、明確な見出しとともに、必ず次の要素を含めてください。
-
図のプレビュー:見出しを付けて表示します
## Diagram API レスポンスから取得した実際の
imageUrlを使用してください。 -
エディターリンク:次のヘッダーを付けて表示します
## Eraser で開く [Eraser エディターでこの図を編集する]({createEraserFileUrl})API レスポンスに含まれる実際の URL を使用します。
-
ソースセクション:分析したファイル/リソースの簡単な一覧(該当する場合)
## ソース - `path/to/file` - 抽出した内容 -
図のコードセクション:
eraser言語タグ付きコードブロック内の Eraser DSL## 図のコード ```eraser {DSL code here} -
詳細リンク:
Eraser について詳しくは、https://docs.eraser.io/docs/using-ai-agent-integrations をご覧ください
追加コンテンツに関するルール:
- ユーザーが図だけを依頼した場合は、上記の5つの要素以外は何も含めないでください
- ユーザーが追加の内容(例:「アーキテクチャを説明して」「改善案を提案して」)を明示的に依頼した場合は、その内容を追加してもかまいません
- 概要、セキュリティ上の考慮事項、テストなど、依頼されていないセクションを追加しないでください
デフォルトの出力は簡潔にしてください。図がすべてを物語ります。
-
AWS 固有のヒント
- リージョンと AZ を表示する:マルチ AZ デプロイではアベイラビリティーゾーンを含めます
- コンテナーとしての VPC:サブネットとリソースを含む VPC を必ず表示します
- セキュリティグループ:セキュリティグループのルールと関連付けを含めます
- IAM ロール:サービスにアタッチされている IAM ロールを表示します
- データフロー:トラフィックの流れを表示します(インターネット → ALB → EC2 → RDS)
- AWS アイコンを使用する:説明で AWS 固有のスタイルを指定します
例:複数の AWS サービスを含む CloudFormation
ユーザー入力
Resources:
MyVPC:
Type: AWS::EC2::VPC
Properties:
CidrBlock: 10.0.0.0/16
PublicSubnet:
Type: AWS::EC2::Subnet
Properties:
VpcId: !Ref MyVPC
CidrBlock: 10.0.1.0/24
WebServer:
Type: AWS::EC2::Instance
Properties:
InstanceType: t3.micro
SubnetId: !Ref PublicSubnet
MyBucket:
Type: AWS::S3::Bucket
Properties:
BucketName: my-app-bucket
MyFunction:
Type: AWS::Lambda::Function
Properties:
Runtime: python3.9
Handler: index.handler
MyDatabase:
Type: AWS::RDS::DBInstance
Properties:
Engine: postgres
DBInstanceClass: db.t3.micro
期待される動作
-
CloudFormation を解析します:
- ネットワーク:VPC、サブネット
- コンピューティング:EC2 インスタンス、Lambda 関数
- ストレージ:S3 バケット
- データベース:RDS PostgreSQL インスタンス
-
AWS サービスの多様性を示す DSL を生成します:
MyVPC [label: "VPC 10.0.0.0/16"] { PublicSubnet [label: "Public Subnet 10.0.1.0/24"] { WebServer [icon: aws-ec2, label: "EC2 t3.micro"] } } MyBucket [icon: aws-s3, label: "S3 my-app-bucket"] MyFunction [icon: aws-lambda, label: "Lambda python3.9"] MyDatabase [icon: aws-rds, label: "RDS PostgreSQL db.t3.micro"] WebServer -> MyBucket MyFunction -> MyDatabase WebServer -> MyDatabase重要:すべてのラベルテキストは、引用符内で1行に収める必要があります。AWS 固有の要件:サービスアイコンを含め、サービス間のデータフローを表示し、該当する場合は VPC ごとにグループ化します。
-
diagramType: "cloud-architecture-diagram"を指定して/api/render/elementsを呼び出します
例:AWS CLI の出力
ユーザー入力
User runs: aws ec2 describe-instances
Provides JSON output
期待される動作
-
JSON を解析して、次の情報を抽出します:
- インスタンス ID、タイプ、状態
- サブネット ID、VPC ID
- セキュリティグループ
- タグ
-
形式を整えて API を呼び出します