创新方案
当用户有 Terraform…
适用于用户提供 Terraform/HCL 代码(.tf、.tfvars)并希望自动可视化 AWS、Azure、GCP 等基础设施资源、模块与依赖关系时。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
当用户有 Terraform 代码并需要特定
解决思路
- 解析用户提供的 Terraform:识别所有 `resource` 块(AWS、Azure、GCP 等);提取 `module` 块及其配置;记录 `data` 源及其依赖;识别 `variable` 和 `output` 定义。
- 映射关系:跟踪资源依赖(例如 `subnet_id = aws_subnet.public.id`);按 provider(AWS、Azure、GCP)分组;识别 VPC/VNet 作为其他资源的容器;记录安全组、IAM 角色和网络规则。
- 生成 Eraser DSL:把 Terraform 资源转换为 Eraser DSL,包含节点、组和资源关系。
- 标签格式规则:标签必须放在单行,绝不在 label 属性内使用换行;标签保持简单可读,优先使用独立标签而不是拼接过多元数据;格式化 DSL 时每行一个节点/组,但标签保持单行;如果包含 CIDR 块或实例类型等元数据,放在同一引号标签字符串中,例如 `[label: "VPC 10.0.0.0/16"]`。
- 生成 DSL 时使用容器嵌套和箭头表示关系,例如 `main-vpc [label: "VPC 10.0.0.0/16"] { public-subnet ... }`、`load-balancer -> web-server`、`web-server -> database`,并可使用 provider 图标如 `aws-ec2`、`aws-elb`、`aws-rds`。
- 生成 DSL 后必须执行 curl 命令调用 Eraser API,绝不能停在生成 DSL 而不发起 API 调用。
- 在 `X-Skill-Source` header 中将值替换为你的 AI agent 名称:Claude(Anthropic)用 `claude`;Cursor 用 `cursor`;ChatGPT(OpenAI)用 `chatgpt`;Gemini(Google)用 `gemini`;其他情况用模型/agent 名称的小写形式。
- 发起请求:`curl -X POST https://app.eraser.io/api/render/elements`,请求头包含 `Content-Type: application/json`、`X-Skill-Source`(按上一条替换;原文示例为 `eraser-skill`,但必须替换)、`Authorization: Bearer ${ERASER_API_KEY}`;请求体包含 `elements: [{ type: "diagram", id: "diagram-1", code: "<your generated DSL>", diagramType: "cloud-architecture-diagram" }]`、`scale: 2`、`theme: "${ERASER_THEME:-dark}"`、`background: true`。
- 分析 Terraform 文件和资源时跟踪来源:内部文件记录每个读取的 Terraform 文件路径和提取的资源(例如 `infra/main.tf` - VPC 和 subnet 定义,`infra/rds.tf` - 数据库配置);外部引用记录咨询的文档、示例或 URL(例如 Terraform AWS provider 文档、AWS 架构最佳实践);为每个来源注解其对图的贡献。
- 处理 API 响应时必须包含 `## Diagram` 标题,并显示 ``,使用 API 响应中的实际 `imageUrl`。
- 必须包含 `## Open in Eraser` 标题,并显示 `[Edit this diagram in the Eraser editor]({createEraserFileUrl})`,使用 API 响应中的实际 `createEraserFileUrl`。
- 必须包含 `## Sources`,简要列出分析过的文件/资源(如果适用),例如 `- path/to/file - What was extracted`。
- 必须包含 `## Diagram Code`,在 `eraser` 语言标签的代码块中展示 Eraser DSL。
- 必须包含 Learn More 链接:`You can learn more about Eraser at https://docs.eraser.io/docs/using-ai-agent-integrations`。
- 输出内容规则:如果用户只要图,除上述 5 个元素外不添加任何内容;如果用户明确要求更多(例如「解释架构」「建议改进」),才可以添加;绝不添加未请求的 Overview、Security Considerations、Testing 等部分;默认输出应短,图本身会说明问题。
- 处理多个 provider:如果 Terraform 使用多个 provider,按 provider 分组;为 AWS、Azure、GCP 资源创建单独部分;如果适用,展示跨 provider 连接。
- Terraform 特定技巧:按 module 分组并显示 module 边界;将 VPC/VNet 作为容器视觉包含子网和资源;包含数据流(例如 ALB → EC2 → RDS);突出安全(安全组、IAM 角色、网络 ACL);显示资源类型并使用 provider 特定图标(AWS、Azure、GCP);包含 VPC 和子网的 CIDR 块。
- 处理多 provider 示例时:解析出 AWS VPC/subnet/EC2、Azure resource group/VNet、database module 及其对 VPC 的依赖;生成 DSL 时按 provider 分段、module 作为容器、画依赖线(例如 `aws-vpc -> database-module`);所有 label 文本必须单行且在引号内;调用 `/api/render/elements` 并设置 `diagramType: "cloud-architecture-diagram"`。
适用边界 · 注意事项
- 没有 ERASER_API_KEY、无法访问网络或不能调用 https://app.eraser.io/api/render/elements 时。
- 用户禁止将 Terraform 配置/基础设施信息发送到第三方 Eraser 服务,或需要完全离线本地生成图时。
- 用户没有 Terraform 文件/不想可视化 Terraform 基础设施,或只是要求非 Terraform 架构图时。