Terraform基础设施即代码Skill terraform

Terraform是一种基础设施即代码工具,用于编写模块、管理状态和实现自动化部署。适用于多环境部署、资源导入和状态漂移排查。关键词:基础设施即代码、自动化、云原生、DevOps、状态管理、Terraform模块、云计算、CI/CD。

云原生架构 0 次安装 0 次浏览 更新于 3/12/2026

名称: 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网关和适当输出的模块

输入: “修复状态漂移” 操作: 运行计划,识别漂移,决定刷新、导入或手动修复