Terraform 快速参考 - 常用命令和示例

所有terraform命令的列表

目录

以下是全面的 Terraform 命令参考,包含基本命令、配置元素、资源管理、模块、变量、状态处理和最佳实践。

Terraform 是由 HashiCorp 开发的开源基础设施即代码(IaC)工具,使用户能够使用声明式配置文件在多个云提供商(如 AWS、Azure、GCP)上定义和部署基础设施。其主要目的是自动化基础设施的部署,确保一致性并减少人为错误。Terraform 支持 多云模块化状态驱动 的工作流程,使其成为现代 DevOps 实践的基石。

学生使用 Terraform

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"
  • 类型: 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=INFOTF_LOG=DEBUG 以获取详细日志
  • 格式化: terraform fmt

此命令参考为 Terraform 使用的最常见和高级方面提供了快速访问的参考 - 从命令到最佳实践 - 使其对初学者和高级用户都实用。 祝您有美好的一天!

有用的链接