Terraform 快速参考 - 常用命令和示例
所有terraform命令的列表
目录
以下是全面的 Terraform 命令参考,包含基本命令、配置元素、资源管理、模块、变量、状态处理和最佳实践。
Terraform 是由 HashiCorp 开发的开源基础设施即代码(IaC)工具,使用户能够使用声明式配置文件在多个云提供商(如 AWS、Azure、GCP)上定义和部署基础设施。其主要目的是自动化基础设施的部署,确保一致性并减少人为错误。Terraform 支持 多云、模块化 和 状态驱动 的工作流程,使其成为现代 DevOps 实践的基石。
Terraform 的主要优势:
- 声明式语法:通过代码定义所需的基础设施状态。
- 与提供者无关:适用于 AWS、Azure、GCP、Kubernetes 等。
- 状态管理:跟踪基础设施更改以避免冲突。
安装和设置指南
https://developer.hashicorp.com/terraform/tutorials#get-started
Terraform 的安装过程非常简单。
-
Linux (Ubuntu/Debian):
wget -O - https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(grep -oP '(?<=UBUNTU_CODENAME=).*' /etc/os-release || lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list sudo apt update && sudo apt install terraform
-
Windows (WSL):
wget -O terraform.zip https://releases.hashicorp.com/terraform/1.5.5/terraform_1.5.5_windows_amd64.zip unzip terraform.zip
-
macOS (Homebrew):
brew install terraform
验证
terraform --version
Terraform CLI 命令
以下是所有 Terraform 命令的列表:
命令 | 描述 |
---|---|
terraform init |
初始化新的或现有的 Terraform 配置目录 |
terraform validate |
检查配置是否有效 |
terraform plan |
显示执行计划而不进行更改 |
terraform apply |
应用更改以达到期望状态 |
terraform destroy |
销毁 Terraform 管理的基础设施 |
terraform fmt |
以标准格式重新格式化配置文件 |
terraform show |
显示当前状态或计划 |
terraform refresh |
用真实基础设施更新状态 |
terraform providers |
显示配置中使用的提供者 |
terraform graph |
以图形式可视化资源依赖关系 |
terraform workspace list |
列出所有可用的工作区 |
terraform workspace new |
创建新工作区 |
terraform workspace select |
切换到指定的工作区 |
terraform workspace show |
显示当前工作区的名称 |
terraform workspace delete |
删除指定的工作区 |
terraform output |
显示来自状态文件的输出值 |
terraform import |
将现有资源导入 Terraform |
terraform taint |
标记资源以便在下次应用时重新创建 |
terraform untaint |
取消标记资源为“被污染” |
terraform state list |
列出状态文件中的资源 |
terraform state show |
显示状态文件中单个资源的属性 |
配置基础
文件扩展名
.tf
: 主配置文件(HCL 语法).tfvars
: 变量值
Terraform 块类型
- 提供者示例
provider "aws" { region = "us-east-1" }
- 资源示例
resource "aws_instance" "web" { ami = "ami-0abcdef" instance_type = "t2.micro" }
- 变量示例
variable "instance_count" { type = number default = 2 }
- 输出示例
output "instance_ip" { value = aws_instance.web.public_ip }
- 模块示例
module "vpc" { source = "./modules/vpc" cidr_block = var.vpc_cidr }
使用变量
- 声明变量
variable "region" { description = "AWS region" default = "us-east-1" }
- 赋值
- CLI:
terraform apply -var="region=us-west-2"
- tfvars 文件:
terraform apply -var-file="prod.tfvars"
- CLI:
- 类型:
string
,number
,bool
,list
,map
,object
状态管理
- 状态文件:
terraform.tfstate
- 远程状态(S3 示例)
backend "s3" { bucket = "my-tf-state" key = "state.tfstate" region = "us-east-1" }
- 查看状态:
terraform show
terraform state list
循环和条件语句
- 计数
resource "aws_instance" "web" { count = 3 ... }
- for_each
resource "aws_s3_bucket" "b" { for_each = var.bucket_names bucket = each.value }
- 条件语句
instance_type = var.env == "prod" ? "t2.large" : "t2.micro"
函数
- 字符串插值:
resource "aws_s3_bucket" "example" { bucket = "my-bucket-${var.env}" }
- 列表、映射示例:
locals { my_map = { a = 1, b = 2 } }
提供者
用于引导资源。示例:
resource "aws_instance" "web" {
...
provisioner "local-exec" {
command = "echo 实例已创建"
}
}
最佳实践
- 版本控制 所有
.tf
文件 - 锁定提供者版本 以确保部署一致性
- 远程后端 用于状态管理(S3、Azure Blob 等)
- 加密远程后端中的状态文件
- 模块化 基础设施,使用可重用模块
- 记录 配置
- 在生产之前在预发布环境中测试
其他参考资料
- 帮助:
terraform --help
或[command] --help
获取特定命令的帮助 - 调试: 设置
TF_LOG=INFO
或TF_LOG=DEBUG
以获取详细日志 - 格式化:
terraform fmt
此命令参考为 Terraform 使用的最常见和高级方面提供了快速访问的参考 - 从命令到最佳实践 - 使其对初学者和高级用户都实用。 祝您有美好的一天!
有用的链接
- https://developer.hashicorp.com/terraform
- Docker 命令参考
- Docker Compose 命令参考 - 最有用的命令示例
- Kubernetes 命令参考
- 将带有后端的 Flutter 项目部署到 AWS Amplify
- 将 Hugo 生成的网站部署到 AWS S3
- AWS Lambda 性能:JavaScript 与 Python 与 Golang
- 使用 AWS SAM 和 Python 实现分层 Lambda
- AWS SAM + AWS SQS + Python PowerTools
- Minio 作为 AWS S3 的替代方案。Minio 概述和安装