ia-terraform

Polar Sponsor
爱发电 赞助
.NET 9.0

Terraform 与 OpenTofu 配置、模块、测试、状态管理及 HCL 代码审查。适用于使用 Terraform、OpenTofu、HCL、tfvars、tftest、state 等工具的场景。

Terraform & OpenTofu.

功能概述

Terraform & OpenTofu.是一项面向实际任务的技能,主要用于File Organization & nameing.File.Purpose.terraform.tf.Terraform + 供应商版本要求;提供者.tf. 提供方配置;

核心要点

  • main.tf.;
  • Prime 资源和数据源. vari.。
  • 它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。

使用与执行

使用时应结合输入条件选择合适的执行方式,核对必要参数、依赖环境与输出内容,并按原始要求处理异常情况。从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。

结果检查与注意事项

执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。该技能适合用于一次性任务,也可以接入自动化工作流,与其他技能或上层代理配合完成更完整的业务链路;在组合使用时,应明确每一步的输入输出关系,并避免不同步骤之间出现参数冲突。

Terraform & OpenTofu

文件组织与命名规范

文件 用途
terraform.tf Terraform 及 provider 版本要求
providers.tf Provider 配置
main.tf 主要资源与数据源
variables.tf 输入变量(按字母顺序排列)
outputs.tf 输出值(按字母顺序排列)
locals.tf 本地值
  • 小写加下划线:如 web_api,而非 webAPI 或 web-api
  • 使用具描述性的名词,且**不包含资源类型**:如 aws_instance.web_api,而非 aws_instance.web_api_instance
  • 使用单数形式,而非复数
  • 对模块内唯一实例的资源使用 this 命名(即每模块中该类型仅存在一个)
  • 变量命名需体现上下文:如 vpc_cidr_block,而非 cidr

代码块顺序规范

资源定义(Resources): count/for_each(其后空一行)→ 参数 → 嵌套块 → tags → depends_on → lifecycle(置于最后)

变量定义(Variables): description → type → default → validation → nullable

每个变量必须声明 type 和 description;每个输出必须声明 description;敏感字段须显式标记 sensitive = true。

模块结构

类型 作用域 示例
Resource Module 单一逻辑单元 VPC + 子网、安全组(SG)+ 规则
Infrastructure Module 多个 Resource Module 的集合 单区域内的网络 + 计算资源
Composition 完整基础设施部署 跨区域 / 跨账号部署
module-name/
├── main.tf, variables.tf, outputs.tf, versions.tf
├── examples/
│   ├── minimal/
│   └── complete/
└── tests/
    └── defaults.tftest.hcl

保持模块轻量(单一职责原则)。examples/ 目录兼具文档说明与集成测试用例双重作用。所有对外发布的模块均须遵循语义化版本控制(Semantic Versioning)。

count 与 for_each 的选用

场景 推荐方式
布尔开关(创建或跳过) count = condition ? 1 : 0
带名称/键的项(可能重排序) for_each = toset(list) 或 map
固定数量的完全相同副本 count = N

默认优先使用 for_each —— 若从 count 列表中移除中间某一项,会导致其后所有资源被销毁重建。仅在布尔条件判断或真正完全一致的副本场景下使用 count。

测试策略

场景 方法
快速校验 terraform fmt -check && terraform validate
提交前检查(Pre-commit) 额外增加:tflint + trivy config . / checkov -d .
逻辑校验(Terraform 1.6+) 原生 terraform test,配合 command = plan
零成本单元测试(Terraform 1.7+) 原生测试 + mock_provider
真实基础设施验证 原生测试配合 command = apply,或 Terratest(Go 实现)

原生测试关键要点(.tftest.hcl 文件置于 tests/ 目录下):

  • command = plan 用于快速单元测试;command = apply 用于集成测试(默认行为)
  • assert { condition = expr; error_message = "..." } —— 每个 run 块中可定义多个断言
  • expect_failures = [var.name] 支持负向测试(例如验证非法输入是否被正确拒绝)
  • mock_provider "aws" { mock_resource "..." { defaults = { ... } } } —— 仅适用于 plan 模式,无需凭据,CI 构建速度快
  • variables {} 可置于文件顶层(影响全部 run 块),也可置于单个 run 块内(覆盖全局变量)
  • 引用前置 run 的输出:如 run.setup.vpc_id
  • 独立状态的并行执行:设置 parallel = true,后续顺序执行将自动成为同步点
  • 启用 parallel = true 时,必须为每个并行 run 显式指定 state_key = "name"
  • 文件命名建议:*_unit_test.tftest.hcl(plan 模式) vs *_integration_test.tftest.hcl(apply 模式)

版本锁定策略

组件 策略 示例
Terraform 锁定次版本号(minor) required_version = "~> 1.9"
Providers 锁定主版本号(major) version = "~> 5.0"
模块(生产环境) 精确锁定(exact) version = "5.1.2"
模块(开发环境) 允许补丁更新(patch) version = "~> 5.1"

关键现代特性支持: moved 块(1.1+)、带默认值的 optional() 类型(1.3+)、原生测试框架(1.6+)、模拟 Provider(1.7+)、跨变量校验(1.9+)、只写参数(write-only arguments,1.11+)。 Stacks(HCP —— 请查阅当前发布状态):将多个配置编排为统一部署单元 —— 建议评估其在多环境部署模式中的适用性。

状态管理与安全规范

  • 必须使用支持锁机制的远程 Backend:如 S3+DynamoDB、Azure Blob、GCS 或 Terraform Cloud;共享基础设施严禁使用本地 state。
  • State 文件须静态加密;禁止提交 .tfstate、.terraform/ 或 *.tfplan;必须提交 .terraform.lock.hcl。
  • Provider 级别配置 default_tags,确保资源标签一致性。
  • 所有存储服务须启用静态加密;网络默认私有化 —— 公网访问需显式开启并提供合理依据。
  • 安全组遵循最小权限原则;禁止无明确理由的 0.0.0.0/0 入站规则。
  • 禁止硬编码凭证 —— 应使用 assume_role、OIDC 或密钥管理服务(如 AWS Secrets Manager)。
  • 提交前检查流程:先自动格式化(terraform fmt -recursive —— 直接重写文件),再校验(terraform validate && tflint && trivy config .)
  • 重构资源或模块路径时,使用 moved { from = old; to = new } 避免销毁重建;该块在成功 apply 后应立即移除。

问题排查

  • State 锁卡死:执行 terraform force-unlock —— 仅限确认无其他并发操作运行时使用
  • 资源漂移(Drift):使用 terraform plan -refresh-only 检测,terraform apply -refresh-only 接受变更
  • 替换已标记为损坏(tainted)的资源:使用 terraform apply -replace=ADDR(terraform taint 已弃用)
  • 导入已有资源:Terraform 1.5+ 支持 import 块实现声明式导入;亦可使用命令行方式 terraform import ADDR ID

依赖管理

使用 locals 结合 try() 函数控制销毁顺序,避免显式依赖 depends_on:

locals {
  vpc_id = try(aws_vpc_ipv4_cidr_block_association.this[0].vpc_id, aws_vpc.this.id, "")
}

该写法强制 Terraform 在销毁 CIDR 关联前先销毁子网,从而规避删除失败错误。

  • 子网 CIDR 应通过计算生成:cidrsubnet(var.vpc_cidr, 8, count.index) —— **禁止硬编码子网地址**
  • 多区域部署:通过 provider "aws" { alias = "eu_west_1" } 定义别名 Provider,并在模块调用中以 providers = { aws = aws.eu_west_1 } 显式指定

最终校验

在确认完成前,请务必执行以下命令:

terraform fmt -check && terraform validate && tflint && trivy config .

所有命令必须**零错误通过**。

相关专题

更多
Postman身份认证怎么配置
Postman身份认证怎么配置

本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。

2026.11.06

0

12

Postman请求头Headers怎么设置
Postman请求头Headers怎么设置

围绕Postman HTTP请求头配置展开,讲解Headers选项的具体使用方式,包括Key和Value参数填写、请求头信息添加、常见Header字段设置及请求头修改方法,帮助用户解决接口调试过程中遇到的请求头配置问题。

2026.11.06

0

13

Postman接口请求发送教程
Postman接口请求发送教程

详细介绍Postman接口请求的创建与发送方法,涵盖GET和POST请求、URL配置、请求参数、Headers请求头、Body请求体设置以及响应结果查看,帮助用户掌握Postman接口请求的完整操作流程。

2026.11.06

0

10

DBeaver怎么导入数据
DBeaver怎么导入数据

DBeaver数据导入专题,整理Excel、CSV、SQL、TXT等常见文件的数据导入方法,涵盖目标数据库选择、数据表创建、字段映射、数据类型设置及导入参数配置等操作,帮助用户将本地文件中的数据写入数据库,并了解批量导入、重复数据处理和导入失败等常见问题的解决方法。

2026.11.05

0

12

DBeaver安全防护教程大全
DBeaver安全防护教程大全

DBeaver安全防护专题,围绕数据库连接安全、账号密码保护和访问权限管理展开,整理SSL/TLS加密连接、SSH隧道、数据库凭据保存及证书验证等配置方法,同时介绍敏感信息保护、远程连接风险和高权限账号使用等注意事项,帮助用户提高数据库日常管理的安全性。

2026.11.05

0

12

DBeaver连接创建与配置教程
DBeaver连接创建与配置教程

本专题聚焦DBeaver数据库连接配置与管理,覆盖从新建连接、选择数据库类型到填写连接参数和验证连接的完整流程。针对MySQL、PostgreSQL、SQL Server等常见数据库,整理相应的连接设置方法,并提供驱动缺失、认证失败和连接异常等问题的排查方向。

2026.11.04

0

16

XORM框架结构体映射与表结构同步
XORM框架结构体映射与表结构同步

本专题围绕XORM框架的结构体映射展开,说明表名与字段的命名策略、xorm标签常用属性、主键自增与时间字段自动填充,并演示Sync2自动建表、增量字段升级、索引声明与反向生成结构体的完整流程。

2026.11.04

0

15

XORM框架安装配置与数据库连接
XORM框架安装配置与数据库连接

本专题聚焦XORM框架的配置与连接环节,拆解MySQL、PostgreSQL、SQLite、SQL Server的DSN写法与驱动选择,讲清连接池参数、多数据源拆分、读写分离与超时重连的处理方式,并补充容器与兼容数据库的适配经验。

2026.11.04

0

15

XORM框架安装配置与数据库连接
XORM框架安装配置与数据库连接

本专题聚焦XORM框架的配置与连接环节,拆解MySQL、PostgreSQL、SQLite、SQL Server的DSN写法与驱动选择,讲清连接池参数、多数据源拆分、读写分离与超时重连的处理方式,并补充容器与兼容数据库的适配经验。

2026.11.04

0

16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.7万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 134.1万人学习