mcpField
A
aws-diagrams

aws-diagrams

github.com/eraserlabs云与 DevOps451.2k 次安装29 周前更新
代码仓库

关于 aws-diagrams

这项 AWS 架构图技能可将 CloudFormation 模板、AWS CLI 输出或自然语言描述转换为 Eraser 图表。它解析 AWS 资源及其关系,生成 Eraser DSL,并通过 Eraser API 渲染。

主要功能

  1. 01解析 CloudFormation 模板
  2. 02读取 AWS CLI 输出
  3. 03提取 AWS 资源及关系
  4. 04生成 Eraser DSL
  5. 05调用 Eraser API 渲染图表

适用场景

  1. 01将 CloudFormation 模板转为资源图
  2. 02根据 AWS 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:使用 /api/render/elements,并设置 diagramType: "cloud-architecture-diagram"

说明

用户提供 AWS 基础设施信息时:

  1. 解析来源

    • CloudFormation:提取 Resources 部分,识别类型(AWS::EC2::Instance 等)
    • CLI 输出:解析 aws 命令的 JSON 输出
    • 描述:识别 AWS 服务名称及其关系
  2. 识别 AWS 组件

    • 网络:VPC、子网、Internet Gateway、NAT Gateway、路由表
    • 计算: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:

    • 重要:标签格式规则
      • 标签必须位于单行中,绝不能在标签属性内使用换行符
      • 标签应简单易读,优先使用多个独立标签,而不是拼接过多元数据
      • DSL 应使用正确的换行格式(每行一个节点/组,但标签必须保持单行)
      • 如果包含 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 命令。切勿生成 DSL 后就停止,而不调用 API。

    关键:必须将下方 X-Skill-Source 标头中的值替换为你的 AI Agent 名称:

    • 如果你是 Claude(Anthropic),请使用:claude
    • 如果你在 Cursor 中运行,请使用:cursor
    • 如果你是 ChatGPT(OpenAI),请使用:chatgpt
    • 如果你是 Gemini(Google),请使用:gemini
    • 否则,请使用小写的模型/Agent 名称
    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. 图表预览:使用标题显示

      ## 图表
      ![{Title}]({imageUrl})
      

      使用 API 响应中的实际 imageUrl。

    2. 编辑器链接:使用标题展示

      ## 在 Eraser 中打开
      [在 Eraser 编辑器中编辑此图表]({createEraserFileUrl})
      

      使用 API 响应中的实际 URL。

    3. 来源部分:简要列出已分析的文件/资源(如适用)

      ## 来源
      - `path/to/file` - 提取的内容
      
    4. 图表代码部分:在带有 eraser 语言标签的代码块中提供 Eraser DSL

      ## 图表代码
      ```eraser
      {DSL code here}
      
    5. 了解更多链接:You can learn more about Eraser at https://docs.eraser.io/docs/using-ai-agent-integrations

    其他内容规则:

    • 如果用户只要求绘制图表,除上述 5 项外不要包含任何内容
    • 如果用户明确要求提供更多内容(例如“解释架构”“提出改进建议”),可以添加相应内容
    • 不要添加未经请求的部分,例如概述、安全注意事项、测试等

    默认输出应保持简短。图表本身已能说明问题。

AWS 专属提示

  • 显示区域和可用区:对于多可用区部署,请包含可用区
  • 将 VPC 作为容器:始终显示包含子网和资源的 VPC
  • 安全组:包含安全组规则及其关联关系
  • IAM 角色:显示附加到服务的 IAM 角色
  • 数据流:显示流量流向(Internet → 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、Subnet
    • 计算: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
    

    重要:所有标签文本必须在引号内保持为单行。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

评论

支持 Markdown