关于 azure-diagrams
Azure Diagram Generator 是一项将 Azure 基础设施信息转为架构图的技能。它解析 ARM 模板、Azure CLI 的 JSON 输出或自然语言描述,梳理资源关系,并通过 Eraser API 渲染图表。
主要功能
- 01解析 ARM 模板和 Azure CLI 输出
- 02识别基础设施描述
- 03梳理 Azure 资源关系
- 04生成 Eraser DSL
- 05通过 Eraser 渲染云架构图
适用场景
- 01将 ARM 模板中的资源可视化
- 02根据 CLI 输出绘制 Azure 资源图
- 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 专用图表:
- 解析 Azure 资源:从 ARM 模板、CLI 输出或描述中提取资源
- 映射 Azure 关系:识别资源组、VNet、子网和服务连接
- 生成 Eraser DSL:根据 Azure 资源创建 Eraser DSL 代码
- 调用 Eraser API:使用
/api/render/elements,并设置diagramType: "cloud-architecture-diagram"
说明
用户提供 Azure 基础设施信息时:
-
解析源内容
- ARM 模板:提取
resources数组,识别类型(Microsoft.Compute/virtualMachines 等) - CLI 输出:解析
az命令的 JSON 输出 - 描述:识别 Azure 服务名称及其关系
- ARM 模板:提取
-
识别 Azure 组件
- 网络:虚拟网络(VNets)、子网、网络安全组、负载均衡器
- 计算:虚拟机、虚拟机规模集、应用服务、函数
- 存储:存储帐户、Blob 存储、文件共享
- 数据库:SQL 数据库、Cosmos DB、Redis 缓存
- 安全:网络安全组、Azure AD、Key Vault
- 负载均衡:应用程序网关、负载均衡器、流量管理器
- 其他:Service Bus、Event Hubs、API Management
-
映射关系
- 子网中的 VM
- VNet 中的子网
- 资源组中的 VNet
- VM 访问的存储帐户
- 应用程序访问的数据库
- 附加到子网的网络安全组
-
生成 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 - 关键:标签格式规则
-
发起 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 }' - 如果你是 Claude(Anthropic),使用:
-
分析期间跟踪来源
在分析文件和资源以生成图表时,跟踪以下内容:
- 内部文件:记录读取的每个文件路径以及提取的信息(例如,
infra/main.bicep- VNet 和子网定义) - 外部参考资料:记录查阅的文档、示例或 URL(例如,Azure 架构最佳实践文档)
- 注释:记录每个来源对图表的贡献
- 内部文件:记录读取的每个文件路径以及提取的信息(例如,
-
处理响应
关键:最简输出格式
你的响应必须始终包含以下元素,并使用清晰的标题:
-
图表预览:使用标题展示
## 图表 使用 API 响应中的实际
imageUrl。 -
编辑器链接:使用以下标题显示
## 在 Eraser 中打开 [在 Eraser 编辑器中编辑此图表]({createEraserFileUrl})使用 API 响应中的实际 URL。
-
来源部分:简要列出已分析的文件/资源(如适用)
## 来源 - `path/to/file` - 提取的内容 -
图表代码部分:在带有
eraser语言标签的代码块中提供 Eraser DSL## 图表代码 ```eraser {DSL code here} -
了解更多链接:
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"
}
}
]
}
预期行为
-
解析 ARM 模板:
- 资源组:rg-main(容器)
- 网络:包含子网的 VNet
- 计算:VM、App Service
- 存储:Storage Account
- 数据库:SQL Server
-
生成展示 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 数据库。
-
使用
diagramType: "cloud-architecture-diagram"调用/api/render/elements
示例:Azure CLI 输出
用户输入
User runs: az vm list --output json
Provides JSON output
预期行为
-
解析 JSON,提取:
- VM 名称、大小和状态
- 资源组
- 网络接口
- Storage Account
-
格式化并调用 API