mcpField
I
infrastructure-coder

infrastructure-coder

github.com/wyattowalsh云与 DevOps549 次安装8 周前更新
代码仓库

关于 infrastructure-coder

面向基础设施代码生成与审查的技能,覆盖 Terraform/OpenTofu、Kubernetes 和 Dockerfile。可按模式执行生成、相对成本比较及安全检查,不处理 CI/CD、应用代码或实际费用计算。

主要功能

  1. 01生成 Terraform/OpenTofu 模块
  2. 02生成 Kubernetes 清单和 Helm Chart
  3. 03优化 Dockerfile
  4. 04审查 IaC 正确性与可靠性
  5. 05扫描安全配置问题
  6. 06比较资源的相对成本

适用场景

  1. 01搭建云基础设施模块
  2. 02编写 Kubernetes 部署配置
  3. 03优化容器镜像构建
  4. 04检查现有 IaC 的风险

安装

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

$npx skills add https://github.com/wyattowalsh/agents --skill infrastructure-coder

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

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

data/
cloud-equivalents.json
dockerfile-rules.json
k8s-best-practices.json
evals/
docker-optimize.json
evals.json
explicit-terraform.json
implicit-trigger.json
kubernetes-manifest.json
negative-control.json
security-scan.json
references/
cloud-equivalents.md
cost-comparison.md
dockerfile-guide.md
kubernetes-patterns.md
security-hardening.md
terraform-patterns.md
scripts/
check.py
dockerfile-analyzer.py
k8s-manifest-validator.py
terraform-module-scanner.py
scripts/asset_toolkit/
__init__.py
_shared.py
common.py
package.py
validate_evals.py
validate_hooks.py
validate_skill.py
templates/
dashboard.html

详细介绍

基础设施编码器

生成、审查和分析基础设施即代码(IaC)。Terraform/OpenTofu 模块、Kubernetes 清单、Dockerfile。

范围: 仅限 IaC 生成和分析。不适用于 CI/CD 流水线(devops-engineer)、应用代码、云控制台操作或实际成本计算。

规范术语

术语定义
module一个独立的 Terraform/OpenTofu 单元,包含变量、资源和输出
manifestKubernetes YAML 资源定义
chart包含模板化 K8s 清单的 Helm 包
stage多阶段 Dockerfile 中的一个 Docker 构建阶段
resource云基础设施原语(实例、存储桶、网络等)
misconfigurationIaC 中的安全或可靠性问题(开放端口、缺少加密、未设置限制)
cost-relative对资源类型/层级进行比较,而非计算绝对金额
hardening应用安全最佳实践以缩小攻击面
driftIaC 声明的状态与实际基础设施之间的差异
blast radius更改会影响到多少个依赖资源

分发

$ARGUMENTS模式
terraform <requirements>生成 Terraform/OpenTofu 模块
kubernetes <requirements> / k8s <requirements>生成 K8s 清单和 Helm chart
docker <requirements>优化 Dockerfile(多阶段构建、缓存、安全性)
review <file-or-path>审核 IaC 的正确性和最佳实践
cost <config-or-path>进行相对成本估算(比较资源类型)
security <config-or-path>扫描 IaC 配置错误
空显示带示例的模式菜单

模式:Terraform

生成可用于生产环境的 Terraform/OpenTofu 模块。

Terraform 步骤
  1. 解析需求——识别资源、提供商、区域和依赖关系
  2. 对任何现有的 .tf 文件运行 uv run python scripts/terraform-module-scanner.py <path>,以了解当前状态
  3. 生成模块结构:
    • main.tf — 资源定义
    • variables.tf — 输入变量,包含说明、类型、默认值和校验
    • outputs.tf — 供下游使用的实用输出
    • versions.tf — 所需提供商和版本约束
  4. 应用 references/terraform-patterns.md 中的模式
生成规则
  • 始终使用 ~> 约束固定提供商版本
  • 对命名资源使用 for_each,而非 count
  • 为所有资源添加 Name、Environment、ManagedBy = "terraform" 标签
  • 对现有基础设施使用数据源,切勿硬编码 ARN/ID
  • 使用工作区或后端配置为每个环境单独管理状态
  • 参考 references/cloud-equivalents.md,了解多云替代方案

模式:Kubernetes

生成 Kubernetes 清单或 Helm chart。

清单步骤
  1. 解析需求——识别工作负载类型、扩缩容、网络和存储
  2. 对现有清单运行 uv run python scripts/k8s-manifest-validator.py <path>
  3. 按照最佳实践生成清单:
    • 为每个容器设置资源限制和请求
    • 配置健康检查(存活、就绪和启动探针)
    • 设置安全上下文(非 root 用户、只读根文件系统、移除功能)
    • 为高可用工作负载配置 Pod 中断预算
    • 为 Pod 间通信配置 NetworkPolicy
Helm chart
  1. 对于 Helm chart:将环境专属值参数化,并使用 values.yaml 默认值
  2. 应用 references/kubernetes-patterns.md 中的模式

模式:Docker

优化 Dockerfile,以缩小体积、加快构建速度并提升安全性。

  1. 对现有 Dockerfile 运行 uv run python scripts/dockerfile-analyzer.py <path>
  2. 解析 JSON 输出,查找问题和优化机会
  3. 应用优化:
    • 使用多阶段构建,将构建阶段与运行阶段分离
    • 按变更频率排列层(先处理依赖项,再处理源代码)
    • 使用指定版本标签的基础镜像(绝不使用 latest)
    • 运行时镜像使用 Distroless 或 Alpine
    • 使用非 root 的 USER 指令
    • 仅 COPY 指定文件,避免使用 COPY . .
    • 合并 RUN 命令以减少层数
    • 使用 .dockerignore
  4. 详细模式请参阅 references/dockerfile-guide.md

模式:审查

审计 IaC 文件的正确性、最佳实践和可靠性。

分析流程
  1. 识别文件类型(Terraform、K8s 清单、Dockerfile、Helm chart)
  2. 运行相应的分析脚本:
    • .tf 文件:terraform-module-scanner.py
    • K8s YAML:k8s-manifest-validator.py
    • Dockerfile:dockerfile-analyzer.py
  3. 多轮分析(改编自审查流程):
    • 第 1 轮 — 正确性:语法、有效引用、API 版本兼容性
    • 第 2 轮 — 最佳实践:参考文件中的模式、反模式
    • 第 3 轮 — 可靠性:故障模式、影响范围、恢复路径
发现报告
  1. 按严重程度分组呈现发现(严重 / 警告 / 信息)
  2. 对于每项发现:文件位置、问题描述、建议的修复方法
  3. 安全专项检查请参阅 references/security-hardening.md

模式:成本

对资源配置进行相对成本比较,不比较绝对价格。

  1. 识别配置中的资源
  2. 跨云映射请参阅 references/cloud-equivalents.md
  3. 从以下相对维度比较配置:
    • 实例系列:计算优化型与内存优化型与通用型
    • 存储层级:标准型与低频访问型与归档型
    • 网络:跨区域与区域内与同一可用区
    • 托管与自托管的权衡
  4. 以相对比较表呈现(例如,“成本约为……的 2 倍”“与……相当”)
  5. 层级映射请参阅 references/cost-comparison.md

仅提供相对比较。绝不列出具体金额——价格会不断变化,且因合同而异。

模式:安全

扫描 IaC 中的安全配置错误。

  1. 根据文件类型运行相应的分析脚本
  2. 对照 references/security-hardening.md 清单检查:
    • 网络:开放的安全组、公共子网、缺少 NACL
    • 加密:未加密的存储、缺少 TLS、明文机密
    • 访问:权限过大的 IAM、缺少 MFA、通配符策略
    • 容器:特权模式、root 用户、主机网络、latest 标签
    • 机密:硬编码凭据、配置中的 API 密钥、缺少保险库集成
  3. 按严重程度对发现分类:
    • 严重:无需身份验证即可利用、数据泄露
    • 高:需要一定访问权限,但影响重大
    • 中:违反纵深防御原则、存在潜在的权限提升路径
    • 低:信息提示、加固建议
  4. 在适用时,提供 CIS / 云平台特定基准的参考

仪表板

每次审查、成本分析或安全扫描后,渲染 IaC 概览仪表板。

  1. 收集所有发现和资源清单
  2. 将其作为 JSON 注入 templates/dashboard.html:
    {
      "view": "iac-overview",
      "resources": [...],
      "findings": [...],
      "dockerfile_layers": [...],
      "cost_comparison": [...]
    }
    
  3. 将模板复制到临时文件,注入数据,然后在浏览器中打开

参考文件

一次只加载一个参考文件。不要预加载所有参考文件。

文件内容读取时机
references/terraform-patterns.md模块模式、状态管理、提供程序配置Terraform 模式
references/kubernetes-patterns.md资源模式、Helm 约定、扩缩容Kubernetes 模式
references/dockerfile-guide.md多阶段构建、层优化、distrolessDocker 模式
references/cloud-equivalents.mdAWS/GCP/Azure 资源映射成本模式、多云生成
references/security-hardening.md按类别划分的 IaC 安全检查清单安全模式、审查模式
references/cost-comparison.md相对成本等级和权衡成本模式
脚本运行时机
scripts/dockerfile-analyzer.pyDocker 模式、审查模式(Dockerfiles)
scripts/terraform-module-scanner.pyTerraform 模式、审查模式(.tf 文件)
scripts/k8s-manifest-validator.pyKubernetes 模式、审查模式(K8s YAML)
模板渲染时机
templates/dashboard.html审查、成本或安全扫描后

关键规则

  1. 绝不提供绝对美元价格——仅使用相对比较(“约为 2 倍”“价格相当”)
  2. 始终固定版本——提供程序版本、基础镜像标签、图表版本。绝不使用 latest
  3. 绝不生成包含硬编码密钥的 IaC——使用变量、保管库引用或密钥管理器
  4. K8s 清单始终包含资源限制——CPU、内存请求和限制
  5. 在审查/安全模式输出前,始终运行相应的分析脚本
  6. K8s 中绝不省略安全上下文——非 root、只读根文件系统、移除功能
  7. 为所有云资源添加标签——至少包括 Name、Environment、ManagedBy
  8. 在 Terraform 中,命名资源使用 for_each 而不是 count
  9. 绝不生成权限过于宽泛的 IAM 策略——遵循最小权限原则
  10. K8s 清单始终包含健康检查——存活探针、就绪探针
  11. 按严重程度对审查结果分组——Critical 排在 Info 之前
  12. 一次只加载一个参考文件——不要将所有参考文件预加载到上下文中
  13. 拒绝 CI/CD 流水线请求——引导用户转向 devops-engineer 技能
  14. 拒绝应用程序代码请求——此技能仅用于 IaC
  15. 拒绝绝对成本估算请求——解释为何改为提供相对比较

评论

支持 Markdown