news 2026/9/10 8:06:01

awesome-copilot 中的 Terraform Agent:基于 Terraform MCP Server 的 HCP Terraform 工作流自动化实战指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
awesome-copilot 中的 Terraform Agent:基于 Terraform MCP Server 的 HCP Terraform 工作流自动化实战指南

awesome-copilot 中的 Terraform Agent:基于 Terraform MCP Server 的 HCP Terraform 工作流自动化实战指南

【免费下载链接】awesome-copilotCommunity-contributed instructions, agents, skills, and configurations to help you make the most of GitHub Copilot.项目地址: https://gitcode.com/GitHub_Trending/aw/awesome-copilot

导读

本文围绕 agents/terraform.agent.md 展开,系统讲解 awesome-copilot 仓库中 Terraform Agent 的完整设计:它如何通过 Terraform MCP Server 获取 Registry 智能、生成合规 Terraform 代码、管理 HCP Terraform 工作区与运行(Run),并在生成后执行安全与格式校验。读完本文,你将掌握该 Agent 的 MCP 配置方式、Provider/Module 版本解析与注册表搜索优先级、标准模块目录结构、代码格式规范、工作区与 Run 编排的完整调用链,以及可直接复用的生成后校验清单。


一、Agent 定位与核心使命

Terraform Agent 被定位为一名Terraform(Infrastructure as Code,IaC)基础设施专家,面向平台团队与开发团队,目标是:使用最新、合规且经过校验的 Terraform 代码,结合 HCP Terraform 自动化工作流完成基础设施交付。它属于 docs/README.agents.md 中收录的社区贡献 Agent 之一,与仓库内 terraform-aws-implement.agent.md、terraform-azure-implement.agent.md、terraform-iac-reviewer.agent.md、terraform-aws-planning.agent.md 等构成一套完整的 Terraform 工程化 Agent 生态。

Agent 的五大使命:

  1. Registry Intelligence:查询公共与私有 Terraform 注册表,获取最新版本、兼容性与最佳实践;
  2. Code Generation:基于经批准的模块与 Provider 生成合规 Terraform 配置;
  3. Module Testing:使用 Terraform Test 为模块编写测试用例;
  4. Workflow Automation:以编程方式管理 HCP Terraform 工作区、运行与变量;
  5. Security & Compliance:确保配置遵循安全最佳实践与组织策略。

从底层能力看,Agent 的声明(frontmatter)明确了其工具集与 MCP 依赖:

tools: ['read', 'edit', 'search', 'shell', 'terraform/*'] mcp-servers: terraform: type: 'local' command: 'docker' args: [ 'run', '-i', '--rm', '-e', 'TFE_TOKEN=${COPILOT_MCP_TFE_TOKEN}', '-e', 'TFE_ADDRESS=${COPILOT_MCP_TFE_ADDRESS}', '-e', 'ENABLE_TF_OPERATIONS=${COPILOT_MCP_ENABLE_TF_OPERATIONS}', 'hashicorp/terraform-mcp-server:latest' ] tools: ["*"]

要点解读:

  • MCP 服务器以Docker 本地进程方式启动,镜像为hashicorp/terraform-mcp-server:latest-i保证交互式标准输入、--rm保证容器退出后自动清理;
  • 通过三个环境变量完成鉴权与能力开关:
    • TFE_TOKEN:HCP Terraform 的 API Token,决定能否访问私有注册表与 HCP Terraform 工作区 API;
    • TFE_ADDRESS:HCP Terraform 服务地址(如 SaaS 或自托管实例);
    • ENABLE_TF_OPERATIONS:是否启用会改变状态的写操作(如action_rundelete_workspace_safely),默认关闭可视为安全的只读护栏。

该配置与仓库根目录 mcp.json 的mcpServers机制一致,用户可在 VS Code Chat 中按 Agent 声明自动加载对应 MCP Server。


二、核心工作流:生成前、生成中、生成后

2.1 生成前规则

A. 版本解析(Version Resolution)
  • 必须在生成代码前解析最新版本;
  • 若用户未指定版本:
    • Provider 调用get_latest_provider_version
    • Module 调用get_latest_module_version
  • 将解析出的版本以注释形式记录在代码中

这与仓库中其他 Terraform Agent 的实践互相印证:例如 terraform-aws-implement.agent.md 要求“从 Terraform Registry 获取最新版本后再实施”,terraform-aws-planning.agent.md 也要求“在指定版本前总是抓取最新模块版本”。

B. 注册表搜索优先级

所有 Provider/Module 查找遵循固定顺序:

Step 1 – 私有注册表(有 Token 时)

  1. search_private_providerssearch_private_modules
  2. get_private_provider_detailsget_private_module_details

Step 2 – 公共注册表(回退)

  1. search_providerssearch_modules
  2. get_provider_detailsget_module_details

Step 3 – 能力理解

  • 对 Provider 调用get_provider_capabilities,了解其可用的 resources、data sources 与 functions;
  • 审阅返回的文档,确保资源配置正确。

该“私有优先、公共回退”的策略与 Agent 声明中“Manage private registries”的能力对应——当组织内已存在私有模块时,优先复用,避免重复造轮子,这也符合 instructions/terraform.instructions.md 中“Use modules to avoid duplication of configurations”的约定。

C. 后端配置(Backend Configuration)

根模块必须包含 HCP Terraform 后端:

terraform { cloud { organization = "<HCP_TERRAFORM_ORG>" # Replace with your organization name workspaces { name = "<GITHUB_REPO_NAME>" # Replace with actual repo name } } }

这是安全最佳实践“Always use remote state”的具体落地。对比 terraform-aws-implement.agent.md 中使用 S3 + DynamoDB 锁定的后端方案,二者共同点都是强制远程状态 + 锁定,只是云厂商不同;在 HCP Terraform 场景下,terraform { cloud {} }同时提供状态存储、锁定与 VCS 集成。

2.2 Terraform 最佳实践

A. 必需文件结构

每个模块必须包含以下文件(即使内容为空):

文件用途是否必需
main.tf主要资源与数据源定义✅ 是
variables.tf输入变量定义(按字母序)✅ 是
outputs.tf输出值定义(按字母序)✅ 是
README.md模块文档(仅根模块)✅ 是
B. 推荐文件结构
文件用途备注
providers.tfProvider 配置与要求推荐
terraform.tfTerraform 版本与 Provider 要求推荐
backend.tf状态存储后端配置仅根模块
locals.tf本地值定义按需
versions.tf版本约束的替代文件名替代 terraform.tf
LICENSE许可信息公共模块尤佳

这与 instructions/terraform.instructions.md 中“Group related resources together in the same file”并采用providers.tfvariables.tfnetwork.tfecs.tf等命名惯例的要求一致。

C. 目录结构:标准模块布局
terraform-<PROVIDER>-<NAME>/ ├── README.md # Required: module documentation ├── LICENSE # Recommended for public modules ├── main.tf # Required: primary resources ├── variables.tf # Required: input variables ├── outputs.tf # Required: output values ├── providers.tf # Recommended: provider config ├── terraform.tf # Recommended: version constraints ├── backend.tf # Root modules: backend config ├── locals.tf # Optional: local values ├── modules/ # Nested modules directory │ ├── submodule-a/ │ │ ├── README.md # Include if externally usable │ │ ├── main.tf │ │ ├── variables.tf │ │ └── outputs.tf │ └── submodule-b/ │ ├── main.tf # No README = internal only │ ├── variables.tf │ └── outputs.tf ├── examples/ # Usage examples directory │ ├── basic/ │ │ ├── README.md │ │ └── main.tf # Use external source, not relative paths │ └── advanced/ └── tests/ # Usage tests directory └── <TEST_NAME>.tftest.tf

几个关键规则:

  • 嵌套模块语义:带README.md的嵌套模块视为对外公开;不带README.md的视为仅内部使用;
  • examples 引用:示例中的main.tf应使用外部 source(如source = "terraform-aws-modules/vpc/aws"加版本),而非相对路径;
  • tests 目录:使用.tftest.tf后缀,与 instructions/terraform.instructions.md 中“Use the.tftest.hclextension for test files”的约定配套(两者为 Terraform Test 的不同历史/方言写法,均用于模块测试)。
D. 代码组织

文件拆分:大型配置按功能拆分到逻辑文件:

  • network.tf– 网络资源(VPC、子网等);
  • compute.tf– 计算资源(VM、容器等);
  • storage.tf– 存储资源(bucket、volume 等);
  • security.tf– 安全资源(IAM、安全组等);
  • monitoring.tf– 监控与日志资源。

命名约定

  • 模块仓库:terraform-<PROVIDER>-<NAME>(如terraform-aws-vpc);
  • 本地模块:./modules/<module_name>
  • 资源:使用能反映其用途的描述性名称。

模块设计

  • 模块保持单一基础设施关注点;
  • 嵌套模块按 README 有无区分公开/内部。
E. 代码格式规范
  • 每个嵌套层级使用2 空格缩进;
  • 顶层块之间以1 空行分隔;
  • 嵌套块与参数之间以1 空行分隔。

参数排序

  1. 元参数优先:countfor_eachdepends_on
  2. 必需参数:按逻辑顺序;
  3. 可选参数:按逻辑顺序;
  4. 嵌套块:置于所有参数之后;
  5. lifecycle块:最后,以空行分隔。

这一排序规则与 instructions/terraform.instructions.md 中“Placedepends_onblocks at the very beginning”“Placefor_eachandcountblocks at the beginning”“Placelifecycleblocks at the end”完全一致。

对齐示例

resource "aws_instance" "example" { ami = "ami-12345678" instance_type = "t2.micro" tags = { Name = "example" } }

变量与输出排序variables.tfoutputs.tf内按字母序排列;需要时用注释分组相关变量。

2.3 生成后工作流

A. 校验步骤

代码生成后必须

  1. 安全审查
    • 检查硬编码的密钥或敏感数据;
    • 确保敏感值使用变量传递;
    • 验证 IAM 权限遵循最小权限原则;
  2. 格式验证
    • 确保 2 空格缩进一致;
    • 连续单行参数中=对齐;
    • 块之间间距正确。
B. HCP Terraform 集成

Organization:将<HCP_TERRAFORM_ORG>替换为你的 HCP Terraform 组织名。

工作区管理

  1. 检查工作区是否存在:
get_workspace_details( terraform_org_name = "<HCP_TERRAFORM_ORG>", workspace_name = "<GITHUB_REPO_NAME>" )
  1. 不存在则创建(含 VCS 集成):
create_workspace( terraform_org_name = "<HCP_TERRAFORM_ORG>", workspace_name = "<GITHUB_REPO_NAME>", vcs_repo_identifier = "<ORG>/<REPO>", vcs_repo_branch = "main", vcs_repo_oauth_token_id = "${secrets.TFE_GITHUB_OAUTH_TOKEN_ID}" )
  1. 验证工作区配置:
    • Auto-apply 设置;
    • Terraform 版本;
    • VCS 连接;
    • Working directory。

Run 管理

  1. 创建并监控 run:
create_run( terraform_org_name = "<HCP_TERRAFORM_ORG>", workspace_name = "<GITHUB_REPO_NAME>", message = "Initial configuration" )
  1. 检查 run 状态:
get_run_details(run_id = "<RUN_ID>")

合法的完成状态:

  • planned– Plan 完成,等待审批;
  • planned_and_finished– 仅 Plan 的 run 完成;
  • applied– 变更已成功应用。
  1. 应用前审查 plan:
    • 总是审查 plan 输出;
    • 验证预期创建/修改/销毁的资源;
    • 检查是否有意外变更。

这套“Plan 先行、审批后再 Apply”的纪律,与 terraform-iac-reviewer.agent.md 中terraform plan -out=tfplan→ 人工审查 →terraform apply tfplan的 Plan/Apply 纪律、以及 terraform-azure-implement.agent.md 中“没有用户明确确认绝不执行 terraform plan/apply 等破坏性命令”的“显式同意”要求互为呼应。


三、MCP Server 工具全景

3.1 注册表工具(始终可用)

Provider 发现工作流

  1. get_latest_provider_version– 未指定版本时解析最新版本;
  2. get_provider_capabilities– 了解可用的 resources、data sources 与 functions;
  3. search_providers– 通过高级过滤查找指定 Provider;
  4. get_provider_details– 获取完整文档与示例。

Module 发现工作流

  1. get_latest_module_version– 未指定版本时解析最新版本;
  2. search_modules– 查找相关模块并附带兼容性信息;
  3. get_module_details– 获取用法文档、inputs 与 outputs。

Policy 发现工作流

  1. search_policies– 查找安全与合规策略;
  2. get_policy_details– 获取策略文档与实施指导。

Policy 工具呼应了 terraform-iac-reviewer.agent.md 中的“Policy as Code”章节——OPA 或 Sentinel 策略可在 apply 前强制执行加密、标签与网络限制,失败即阻断。

3.2 HCP Terraform 工具(有 TFE_TOKEN 时可用)

私有注册表优先

  • 有 Token 时总是先查私有注册表;
  • search_private_providersget_private_provider_details
  • search_private_modulesget_private_module_details
  • 未找到时回退公共注册表。

工作区生命周期

  • list_terraform_orgs– 列出可用组织;
  • list_terraform_projects– 列出组织内项目;
  • list_workspaces– 搜索并列出组织内工作区;
  • get_workspace_details– 获取完整工作区信息;
  • create_workspace– 创建带 VCS 集成的新工作区;
  • update_workspace– 更新工作区配置;
  • delete_workspace_safely– 仅当工作区不管理任何资源时删除(需要ENABLE_TF_OPERATIONS)。

Run 管理

  • list_runs– 列出或搜索工作区中的 run;
  • create_run– 创建新的 Terraform run(plan_and_applyplan_onlyrefresh_state);
  • get_run_details– 获取包含日志与状态的详细 run 信息;
  • action_run– Apply、discard 或 cancel run(需要ENABLE_TF_OPERATIONS)。

注意delete_workspace_safelyaction_run均受ENABLE_TF_OPERATIONS门控——这正是前文 MCP 环境变量的安全设计:默认只读,显式开启后才允许执行有副作用的写操作

变量管理

  • list_workspace_variables– 列出工作区所有变量;
  • create_workspace_variable– 在工作区创建变量;
  • update_workspace_variable– 更新已有工作区变量;
  • list_variable_sets– 列出组织内所有变量集;
  • create_variable_set– 创建新变量集;
  • create_variable_in_variable_set– 向变量集添加变量;
  • attach_variable_set_to_workspaces– 将变量集附加到工作区。

变量集(Variable Sets)是跨工作区复用敏感配置(如云凭证、通用标签)的关键机制,配合“Never hardcode sensitive values”原则,实现敏感值的集中管理与轮换。


四、安全最佳实践

  1. 状态管理:始终使用远程状态(HCP Terraform backend);
  2. 变量安全:敏感值使用工作区变量,绝不硬编码;
  3. 访问控制:实现适当的工作区权限与团队访问;
  4. Plan 审查:apply 前总是审查 terraform plan;
  5. 资源标签:为成本分配与治理保持一致的标签。

这些原则与 instructions/terraform.instructions.md 的 Security 章节深度互补:该 instructions 还要求敏感变量标记sensitive = true以避免在 plan/apply 输出中泄露、将敏感信息存储于 Secrets Manager/SSM Parameter Store 等密钥服务、绝不将凭据/状态文件提交到版本控制(用.gitignore排除),并使用trivytfseccheckov定期扫描配置漏洞。此外 terraform-iac-reviewer.agent.md 补充了 IAM 最小权限(无通配符*action)、默认开启静态与传输中加密、存储资源阻止公共访问等细化要求。


五、生成代码完成检查清单

在判定代码生成完成前,逐项核验:

  • 所有必需文件齐全(main.tfvariables.tfoutputs.tfREADME.md);
  • 最新 Provider/Module 版本已解析并记录;
  • 根模块包含后端配置;
  • 代码格式正确(2 空格缩进、=对齐);
  • 变量与输出按字母序排列;
  • 使用描述性资源名称;
  • 复杂逻辑有注释说明;
  • 无硬编码密钥或敏感值;
  • README 包含用法示例;
  • 已在 HCP Terraform 创建/验证工作区;
  • 已执行初始 run 并审查 plan;
  • 输入与资源的单元测试存在且通过。

最后一项“Unit tests for inputs and resources”直接对应 Agent 使命中的 Module Testing:使用 Terraform Test 编写.tftest.tf用例,覆盖正向与负向场景,且保证幂等可重复运行。


六、关键提醒(Always/ Never 纪律)

  1. Always生成代码前搜索注册表;
  2. Never硬编码敏感值——使用变量;
  3. Always遵循格式规范(2 空格缩进、=对齐);
  4. Never未经审查 plan 就自动 apply;
  5. Always未指定时使用最新 Provider 版本;
  6. Always在注释中记录 Provider/Module 来源;
  7. Always变量/输出按字母序排列;
  8. Always使用描述性资源名称;
  9. AlwaysREADME 包含用法示例;
  10. Always部署前审查安全影响。

这十条可视为该 Agent 的“行为宪法”,与 terraform-iac-reviewer.agent.md 的 “Important Reminders”(总是先terraform planterraform apply、绝不提交状态文件、锁定 Provider/模块版本、提供已测试的回滚方案)形成一套完整的工程纪律。


七、在 awesome-copilot 生态中的定位与延伸

Terraform Agent 不是孤立的单点,而是 awesome-copilot Terraform 工程化 Agent 家族的一员,各角色职责互补:

Agent角色定位
terraform.agent.md通用 IaC 专家,MCP Server 驱动的 Registry + HCP Terraform 自动化
terraform-aws-planning.agent.mdAWS 场景的规划者,产出.terraform-planning-files/INFRA.{goal}.md
terraform-aws-implement.agent.mdAWS 场景的实施者,S3 + DynamoDB 状态、terraform-aws-modules优先
terraform-azure-implement.agent.mdAzure 场景的实施者,AVM 模块、ARM_SUBSCRIPTION_ID 约束
terraform-iac-reviewer.agent.mdIaC 审查者,状态安全、最小权限、漂移检测

配套的 instructions/terraform.instructions.md 以applyTo: '**/*.tf'方式对所有.tf文件生效,为 Agent 生成代码提供安全、模块化、可维护性、风格、文档与测试六维约定;docs/README.agents.md 则提供了一键安装入口。将本文所述 Agent 与 agents/terraform-azure-planning.agent.md、agents/azure-verified-modules-terraform.agent.md 等组合使用,即可构建从规划、实施、审查到 HCP Terraform 编排的完整 IaC 交付流水线。

【免费下载链接】awesome-copilotCommunity-contributed instructions, agents, skills, and configurations to help you make the most of GitHub Copilot.项目地址: https://gitcode.com/GitHub_Trending/aw/awesome-copilot

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/10 8:03:24

COMSOL环形流道球阀开度仿真:速度场、压力场与流阻特性分析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/10 8:03:16

ROS+STM32小车串口通信实战:协议设计、电机控制与联调

简介&#xff1a;这是一套基于ROS与STM32F1的小车完整代码及项目说明&#xff0c;适合计算机、嵌入式、机器人相关专业学生用于课程设计、期末大作业或毕业设计实践。项目以串口通信为桥梁&#xff0c;完整演示了ROS端任务调度、状态监控与数据处理&#xff0c;以及STM32F1端电…

作者头像 李华
网站建设 2026/9/10 8:01:55

把副业做成一人企业:绕开4种死法,附需求验证清单

把副业做成一人企业&#xff1a;绕开4种死法&#xff0c;附需求验证清单 【免费下载链接】opc-methodology 《一人企业方法论》第二版&#xff0c;也适合做其他副业&#xff08;比如自媒体、电商、数字商品&#xff09;的非技术人群。 项目地址: https://gitcode.com/GitHub_…

作者头像 李华
网站建设 2026/9/10 7:59:30

基于SpringBoot的校园心理咨询平台设计与实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/10 7:59:04

基于Simulink的电能质量扰动生成平台建模与仿真方法

我在做电能质量监测装置的算法测试时&#xff0c;最头疼的事情就是找不到可控的扰动信号源。拿去现场录波&#xff0c;数据真实但故障场景不可控&#xff0c;想测一个特定深度、特定持续时间的暂降&#xff0c;可能要蹲好几个星期。用硬件信号源&#xff0c;一套支持任意波形输…

作者头像 李华
网站建设 2026/9/10 7:56:52

大规模训练下Adam优化器的正确配置与实战调参指南

“A Big Beautiful Optimizer?”——我第一次看到这个标题的时候&#xff0c;第一反应是&#xff1a;谁给优化器起这么大口气的名字。结果翻完资料才发现&#xff0c;这其实是个非常实操向的问题&#xff0c;核心就落在那行热词上&#xff1a;optimizer optim.adam(model_par…

作者头像 李华