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