mcpField
A
aws-diagrams

aws-diagrams

github.com/eraserlabsクラウド・DevOps451.2k 回インストール29 週間前に更新
リポジトリ

aws-diagrams について

CloudFormationテンプレート、AWS CLIの出力、自然言語の説明から、EraserでAWS構成図を作成するスキルです。AWSリソースと関係を解析し、Eraser DSLを生成してAPI経由で描画します。

主な機能

  1. 01CloudFormationテンプレートの解析
  2. 02AWS CLI出力の読み取り
  3. 03AWSリソースと関係の抽出
  4. 04Eraser DSLの生成
  5. 05Eraser APIによる図の描画

活用シーン

  1. 01CloudFormationテンプレートのリソース可視化
  2. 02AWS CLI出力からのインフラ図作成
  3. 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 に特化した図を生成します。

  1. AWS リソースを解析する:CloudFormation、CLI の出力、または説明からリソースを抽出します
  2. AWS リソース間の関係をマッピングする:VPC、サブネット、セキュリティグループ、IAM ロールを特定します
  3. Eraser DSL を生成する:AWS リソースから Eraser DSL コードを作成します
  4. Eraser API を呼び出す:diagramType: "cloud-architecture-diagram" を指定して /api/render/elements を使用します

手順

ユーザーが AWS インフラストラクチャの情報を提供した場合:

  1. ソースを解析する

    • CloudFormation:Resources セクションを抽出し、タイプ(AWS::EC2::Instance など)を特定します
    • CLI の出力:aws コマンドの JSON 出力を解析します
    • 説明:AWS サービス名とその関係を特定します
  2. 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
  3. 関係をマッピングする

    • サブネット内の EC2 インスタンス
    • VPC 内のサブネット
    • インスタンスにアタッチされたセキュリティグループ
    • サービスにアタッチされた IAM ロール
    • インスタンスをターゲットとするロードバランサー
    • アプリケーションからアクセスされるデータベース
  4. 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
    
  5. 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
      }'
    
  6. 解析中にソースを記録する

    図の生成にあたり、ファイルやリソースを解析する際は、次の情報を記録してください。

    • 内部ファイル:読み取った各ファイルのパスと、そこから抽出した情報を記録します(例:infra/main.tf - VPC とサブネットの定義)
    • 外部参照:参照したドキュメント、例、URL を記録します(例:AWS VPC のベストプラクティスに関するドキュメント)
    • 注釈:各ソースが図にどのように反映されたかを記録します
  7. レスポンスを処理する

    重要:最小限の出力形式

    レスポンスには、明確な見出しとともに、必ず次の要素を含めてください。

    1. 図のプレビュー:見出しを付けて表示します

      ## Diagram
      ![{Title}]({imageUrl})
      

      API レスポンスから取得した実際の imageUrl を使用してください。

    2. エディターリンク:次のヘッダーを付けて表示します

      ## Eraser で開く
      [Eraser エディターでこの図を編集する]({createEraserFileUrl})
      

      API レスポンスに含まれる実際の URL を使用します。

    3. ソースセクション:分析したファイル/リソースの簡単な一覧(該当する場合)

      ## ソース
      - `path/to/file` - 抽出した内容
      
    4. 図のコードセクション:eraser 言語タグ付きコードブロック内の Eraser DSL

      ## 図のコード
      ```eraser
      {DSL code here}
      
    5. 詳細リンク: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
期待される動作
  1. CloudFormation を解析します:

    • ネットワーク:VPC、サブネット
    • コンピューティング:EC2 インスタンス、Lambda 関数
    • ストレージ:S3 バケット
    • データベース:RDS PostgreSQL インスタンス
  2. 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 ごとにグループ化します。

  3. diagramType: "cloud-architecture-diagram" を指定して /api/render/elements を呼び出します

例:AWS CLI の出力

ユーザー入力
User runs: aws ec2 describe-instances
Provides JSON output
期待される動作
  1. JSON を解析して、次の情報を抽出します:

    • インスタンス ID、タイプ、状態
    • サブネット ID、VPC ID
    • セキュリティグループ
    • タグ
  2. 形式を整えて API を呼び出します

コメント