mcpField
A
azure-diagrams

azure-diagrams

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

关于 azure-diagrams

Azure Diagram Generator 是一项将 Azure 基础设施信息转为架构图的技能。它解析 ARM 模板、Azure CLI 的 JSON 输出或自然语言描述,梳理资源关系,并通过 Eraser API 渲染图表。

主要功能

  1. 01解析 ARM 模板和 Azure CLI 输出
  2. 02识别基础设施描述
  3. 03梳理 Azure 资源关系
  4. 04生成 Eraser DSL
  5. 05通过 Eraser 渲染云架构图

适用场景

  1. 01将 ARM 模板中的资源可视化
  2. 02根据 CLI 输出绘制 Azure 资源图
  3. 03梳理服务与网络关系

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/eraserlabs/eraser-io --skill azure-diagrams

安装后在 Claude Code 中输入/azure-diagrams确认已加载。

详细介绍

Azure Diagram Generator

根据 ARM 模板、Azure CLI 输出或自然语言描述生成 Azure 基础设施架构图。

适用场景

在以下情况下启用此技能:

  • 用户有 ARM(Azure Resource Manager)模板(JSON)
  • 用户提供 Azure CLI 输出(例如,az vm list)
  • 用户想要可视化 Azure 资源
  • 用户提到 Azure 服务(虚拟机、存储帐户、VNet 等)
  • 用户要求“绘制我的 Azure 基础设施图”

工作原理

此技能通过解析 Azure 资源并直接调用 Eraser API 来生成 Azure 专用图表:

  1. 解析 Azure 资源:从 ARM 模板、CLI 输出或描述中提取资源
  2. 映射 Azure 关系:识别资源组、VNet、子网和服务连接
  3. 生成 Eraser DSL:根据 Azure 资源创建 Eraser DSL 代码
  4. 调用 Eraser API:使用 /api/render/elements,并设置 diagramType: "cloud-architecture-diagram"

说明

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

  1. 解析源内容

    • ARM 模板:提取 resources 数组,识别类型(Microsoft.Compute/virtualMachines 等)
    • CLI 输出:解析 az 命令的 JSON 输出
    • 描述:识别 Azure 服务名称及其关系
  2. 识别 Azure 组件

    • 网络:虚拟网络(VNets)、子网、网络安全组、负载均衡器
    • 计算:虚拟机、虚拟机规模集、应用服务、函数
    • 存储:存储帐户、Blob 存储、文件共享
    • 数据库:SQL 数据库、Cosmos DB、Redis 缓存
    • 安全:网络安全组、Azure AD、Key Vault
    • 负载均衡:应用程序网关、负载均衡器、流量管理器
    • 其他:Service Bus、Event Hubs、API Management
  3. 映射关系

    • 子网中的 VM
    • VNet 中的子网
    • 资源组中的 VNet
    • VM 访问的存储帐户
    • 应用程序访问的数据库
    • 附加到子网的网络安全组
  4. 生成 Eraser DSL 将 Azure 资源转换为 Eraser DSL:

    • 关键:标签格式规则
      • 标签必须位于单行中,绝不能在标签属性中换行
      • 标签应简洁易读;元数据较多时,优先使用多个独立标签,而不是拼接过多信息
      • 按规范换行格式化 DSL(每行一个节点/组,但标签必须保持单行)
      • 如果包含 CIDR 块或实例类型等元数据,请将其放入同一个带引号的标签字符串中:[label: "VNet 10.0.0.0/16"]

    示例:

    myVNet [label: "VNet 10.0.0.0/16"] {
      subnet1 [label: "Subnet 1"] {
        myVM [icon: azure-vm, label: "Virtual Machine"]
        gateway [icon: azure-app-gateway]
      }
      subnet2 [label: "Subnet 2"] {
        database [icon: azure-sql]
      }
    }
    storage [icon: azure-storage]
    myVNet -> myVM
    myVM -> 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.bicep - VNet 和子网定义)
    • 外部参考资料:记录查阅的文档、示例或 URL(例如,Azure 架构最佳实践文档)
    • 注释:记录每个来源对图表的贡献
  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 项外不要包含任何内容
    • 如果用户明确要求提供更多内容(例如“解释架构”“提出改进建议”),可以添加相应内容
    • 不要添加未经请求的部分,例如概述、安全注意事项、测试等

    默认输出应简短。图表本身已足以说明问题。

Azure 专属提示

  • 资源组:将资源组显示为逻辑容器
  • VNet 作为容器:始终显示包含子网和资源的 VNet
  • 网络安全组:包含 NSG 规则和关联关系
  • 订阅:如果提供了订阅上下文,请注明
  • 数据流:显示流量流向(Internet → Application Gateway → VM → SQL Database)
  • 使用 Azure 图标:在描述中要求使用 Azure 专属样式

示例:包含多个 Azure 服务的 ARM 模板

用户输入
{
  "resources": [
    {
      "type": "Microsoft.Resources/resourceGroups",
      "name": "rg-main"
    },
    {
      "type": "Microsoft.Network/virtualNetworks",
      "name": "myVNet",
      "properties": {
        "addressSpace": {
          "addressPrefixes": ["10.0.0.0/16"]
        },
        "subnets": [
          {
            "name": "subnet1",
            "properties": {
              "addressPrefix": "10.0.1.0/24"
            }
          }
        ]
      }
    },
    {
      "type": "Microsoft.Compute/virtualMachines",
      "name": "myVM",
      "properties": {
        "hardwareProfile": {
          "vmSize": "Standard_B1s"
        }
      }
    },
    {
      "type": "Microsoft.Web/sites",
      "name": "myAppService",
      "properties": {
        "serverFarmId": "/subscriptions/.../serverfarms/myPlan"
      }
    },
    {
      "type": "Microsoft.Storage/storageAccounts",
      "name": "mystorageaccount"
    },
    {
      "type": "Microsoft.Sql/servers",
      "name": "mysqlserver",
      "properties": {
        "administratorLogin": "admin"
      }
    }
  ]
}
预期行为
  1. 解析 ARM 模板:

    • 资源组:rg-main(容器)
    • 网络:包含子网的 VNet
    • 计算:VM、App Service
    • 存储:Storage Account
    • 数据库:SQL Server
  2. 生成展示 Azure 服务多样性的 DSL:

    resource-group [label: "Resource Group rg-main"] {
      myVNet [label: "VNet 10.0.0.0/16"] {
        subnet1 [label: "Subnet 1 10.0.1.0/24"] {
          myVM [icon: azure-vm, label: "VM Standard_B1s"]
        }
      }
      myAppService [icon: azure-app-service, label: "App Service"]
      mystorageaccount [icon: azure-storage, label: "Storage Account"]
      mysqlserver [icon: azure-sql, label: "SQL Server"]
    }
    
    myAppService -> mystorageaccount
    myVM -> mysqlserver
    

    重要:所有标签文本都必须放在引号内的单行中。Azure 专属要求:将资源组显示为容器,并使用正确的 Azure 图标展示 App Services、Storage Accounts 和 SQL 数据库。

  3. 使用 diagramType: "cloud-architecture-diagram" 调用 /api/render/elements

示例:Azure CLI 输出

用户输入
User runs: az vm list --output json
Provides JSON output
预期行为
  1. 解析 JSON,提取:

    • VM 名称、大小和状态
    • 资源组
    • 网络接口
    • Storage Account
  2. 格式化并调用 API

评论

支持 Markdown