用途:为编写可靠、安全的 Terraform 配置提供指导,适用于多云基础设施部署场景,强调状态文件与凭证管理不当可能带来的风险。
状态管理:使用远程状态,避免本地状态成为单点故障;将状态存放在云端原生后端(AWS 用 S3+DynamoDB,阿里云用 OSS,腾讯云用 COS),启用状态锁定防止并发 apply,.tfstate 不纳入版本控制(常含 IP、凭证等敏感输出),并按环境(dev/staging/prod)拆分状态。示例远程后端配置为:
terraform { backend "s3" { bucket = "myteam-tfstate" key = "prod/infra.tfstate" region = "us-east-1" dynamodb_table = "tf-lock" encrypt = true } }
模块设计:每个模块聚焦单一职责(如“含公有/私有子网的 VPC”不应同时创建 EC2),用 validation 块校验变量输入,输出下游所需的值(ID、IP、端点、DNS 名),生产环境固定模块版本(source = "git::...?ref=v1.2.0")。
安全:不在 .tf 中硬编码凭证,改用环境变量(TF_VAR_*)、密钥管理器或基于 profile 的凭证注入;安全组入站限制到实际需要的 CIDR;为存储资源启用静态加密;优先使用附加到实例的 IAM 角色而非内嵌访问密钥;为每个资源打上 owner、purpose、expires 标签以便清理。
变量与 locals:为可选变量设置合理默认值,为每个变量写 description,敏感变量标记 sensitive = true,用 locals 存放计算值避免重复;示例 locals 可用于生成命名前缀与通用标签。
常见陷阱:新增 provider 后报“Could not load plugin”多为忘记 terraform init,可运行 terraform init -upgrade;资源创建顺序错误需补充 depends_on;计划出现意外变更多为控制台手工修改导致状态漂移,可运行 terraform refresh 后复查;敏感值出现在输出需补 sensitive = true;使用 -target 会留下部分状态,应执行完整 plan 以协调。限制:资料未提供具体支持范围、收费与平台适配信息。