名称: terraform 描述: 编写Terraform模块,管理状态,并实现基础设施即代码。用于基础设施自动化或状态管理。
Terraform
使用Terraform实现基础设施即代码。
何时使用
- 创建基础设施模块
- 管理Terraform状态
- 多环境部署
- 导入现有资源
- 排查状态漂移
模块结构
modules/
└── vpc/
├── main.tf # 资源
├── variables.tf # 输入变量
├── outputs.tf # 输出值
└── versions.tf # 提供者要求
最佳实践
变量
variable "environment" {
description = "环境名称"
type = string
validation {
condition = contains(["dev", "staging", "prod"], var.environment)
error_message = "环境必须是dev、staging或prod。"
}
}
variable "tags" {
description = "资源标签"
type = map(string)
default = {}
}
资源
resource "aws_instance" "main" {
ami = data.aws_ami.latest.id
instance_type = var.instance_type
tags = merge(var.tags, {
Name = "${var.project}-${var.environment}"
})
lifecycle {
create_before_destroy = true
}
}
输出
output "instance_id" {
description = "EC2实例ID"
value = aws_instance.main.id
}
状态管理
# backend.tf
terraform {
backend "s3" {
bucket = "terraform-state-bucket"
key = "project/terraform.tfstate"
region = "us-east-1"
encrypt = true
dynamodb_table = "terraform-locks"
}
}
常用命令
# 初始化和计划
terraform init
terraform plan -out=tfplan
# 应用并自动批准(用于CI/CD)
terraform apply -auto-approve tfplan
# 导入现有资源
terraform import aws_instance.main i-1234567890abcdef0
# 状态操作
terraform state list
terraform state show aws_instance.main
terraform state mv aws_instance.old aws_instance.new
工作空间策略
# 为每个环境创建工作空间
terraform workspace new dev
terraform workspace new prod
# 在配置中使用
locals {
env_config = {
dev = { instance_type = "t3.micro" }
prod = { instance_type = "t3.large" }
}
config = local.env_config[terraform.workspace]
}
示例
输入: “创建VPC模块” 操作: 创建包含子网、路由表、NAT网关和适当输出的模块
输入: “修复状态漂移” 操作: 运行计划,识别漂移,决定刷新、导入或手动修复