Terraform

Terraform 基础设施即代码实战入门

学习如何使用 Terraform 管理云基础设施,涵盖 HCL 语法、状态管理、模块化设计等核心概念。

什么是基础设施即代码?

基础设施即代码(Infrastructure as Code, IaC)是通过代码而非手动操作来管理和配置基础设施的实践。Terraform 是目前最流行的 IaC 工具之一。

Terraform 核心概念

Provider

Provider 是 Terraform 与云服务交互的插件。每个云平台都有对应的 Provider。

terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 5.0"
    }
  }
}

provider "aws" {
  region = "us-east-1"
}

Resource

Resource 是 Terraform 管理的基础设施组件。

resource "aws_instance" "web" {
  ami           = "ami-0c55b159cbfafe1f0"
  instance_type = "t3.micro"

  tags = {
    Name = "web-server"
  }
}

Variable 和 Output

variable "instance_type" {
  description = "EC2 实例类型"
  type        = string
  default     = "t3.micro"
}

output "instance_ip" {
  description = "实例的公网 IP"
  value       = aws_instance.web.public_ip
}

工作流程

Terraform 的基本工作流程包含三个步骤:

# 1. 初始化 - 下载 Provider 插件
terraform init

# 2. 计划 - 预览将要执行的变更
terraform plan

# 3. 应用 - 执行变更
terraform apply

状态管理

Terraform 使用状态文件(terraform.tfstate)来跟踪已创建的资源。在团队协作中,建议使用远程后端存储状态:

terraform {
  backend "s3" {
    bucket         = "my-terraform-state"
    key            = "prod/terraform.tfstate"
    region         = "us-east-1"
    dynamodb_table = "terraform-locks"
    encrypt        = true
  }
}

模块化

将基础设施拆分为可复用的模块是最佳实践:

modules/
├── vpc/
│   ├── main.tf
│   ├── variables.tf
│   └── outputs.tf
├── ec2/
│   ├── main.tf
│   ├── variables.tf
│   └── outputs.tf
└── rds/
    ├── main.tf
    ├── variables.tf
    └── outputs.tf
module "vpc" {
  source = "./modules/vpc"

  cidr_block  = "10.0.0.0/16"
  environment = "production"
}

module "web_server" {
  source = "./modules/ec2"

  vpc_id        = module.vpc.vpc_id
  subnet_id     = module.vpc.public_subnet_ids[0]
  instance_type = "t3.micro"
}

总结

Terraform 让基础设施管理变得可预测、可重复、可版本控制。掌握这些基础概念后,你就可以开始用代码管理你的云基础设施了。