发布于 2026-01-06 0 阅读
0

Terraform战术:DevOps Terraform命令精通指南 关于Terraform Terraform的重要性 日常活动和部署中常用的Terraform命令示例

Terraform战术:DevOps 运维人员掌握Terraform命令指南

关于 Terraform

Terraform为何如此重要

日常活动和部署中常用的 Terraform 命令示例

关于 Terraform

Terraform 是由 HashiCorp 提供的开源基础设施即代码 (IaC) 工具,它使用户能够使用声明式配置语言定义和配置基础设施资源。通过代码定义基础设施,Terraform 可以自动创建、修改和删除跨多个云提供商、数据中心和服务的资源。这种方法增强了基础设施的可扩展性、可重复性和一致性。

Terraform为何如此重要

Terraform 通过提供以下几个关键优势,彻底改变了基础设施管理:

  • 可扩展性:Terraform 通过代码简化了复杂基础设施设置的管理,从而实现了可扩展性和高效的资源配置。
  • 一致性:在 Terraform 中定义的基础设施配置可确保跨环境的一致性,从而减少人为错误并提高可靠性。
  • 协作:团队可以通过对 Terraform 配置进行版本控制来有效协作,从而实现无缝的基础设施更新和跟踪变更。
  • 灵活性:Terraform 支持各种云提供商和服务,使 DevOps 团队能够使用统一的工具处理各种基础设施。
  • 成本效益:通过采用 Terraform,组织可以优化资源使用、监控成本并实现资源生命周期管理的自动化。

日常活动和部署中常用的 Terraform 命令示例

显示版本

  • terraform version

描述:显示当前已安装的 Terraform 版本以及有关 Terraform 安装的信息。

例子

terraform version
Enter fullscreen mode Exit fullscreen mode

输出

Terraform v1.9.5
Enter fullscreen mode Exit fullscreen mode

初始化 Terraform 配置

`terraform init` 命令对于设置 Terraform 项目至关重要。它会下载必要的插件,初始化后端,并确保项目已准备好进行后续的 Terraform 操作。

  • terraform init

描述:初始化新的或现有的 Terraform 配置。此命令通过下载和安装提供程序插件来准备其他 Terraform 命令的工作目录。
示例

terraform init
Enter fullscreen mode Exit fullscreen mode

输出

Initializing the backend...

Initializing provider plugins...
- Checking for available provider plugins...
- Downloading plugin for provider "aws" (hashicorp/aws) 3.47.0...
- Downloading plugin for provider "null" (hashicorp/null) 3.1.0...
- Downloading plugin for provider "template" (hashicorp/template) 2.2.0...

Terraform has been successfully initialized!
Enter fullscreen mode Exit fullscreen mode
  • terraform init -migrate-state

描述:此命令用于将现有状态文件迁移到新的状态存储后端。

例子

terraform init -migrate-state
Enter fullscreen mode Exit fullscreen mode

输出

Migrating state...
Migration successful! State files have been moved to the new backend.
Enter fullscreen mode Exit fullscreen mode
  • terraform init -upgrade

描述:此命令用于将 Terraform 模块和插件升级到最新版本。

例子

terraform init -upgrade
Enter fullscreen mode Exit fullscreen mode

输出

Upgrading Terraform modules and plugins...
Upgrade successful! Modules and plugins are now up to date.
Enter fullscreen mode Exit fullscreen mode
  • terraform init -backend-config=backend.tf

描述:使用后端配置文件(例如 backend.tf)中指定的后端配置初始化 Terraform,允许您在初始化期间指定后端配置选项,从而灵活地控制 Terraform 与后端交互以存储状态数据的方式。

例子

terraform init -backend-config=backend.tf
Enter fullscreen mode Exit fullscreen mode

输出

Initializing Terraform with backend configuration from backend.tf...

Initializing the backend...
- Using backend configuration from backend.tf

Initializing provider plugins...
- Checking for available provider plugins...
- Downloading plugin for provider "aws" (hashicorp/aws) 3.47.0...
- Downloading plugin for provider "null" (hashicorp/null) 3.1.0...

Terraform has been successfully initialized with the specified backend configuration.
Enter fullscreen mode Exit fullscreen mode
  • terraform init -reconfigure

描述:此命令用于强制重新配置后端,即使后端已经配置好。

例子

terraform init -reconfigure
Enter fullscreen mode Exit fullscreen mode

输出

Reconfiguring backend...
Backend reconfiguration successful! Ready for deployment.
Enter fullscreen mode Exit fullscreen mode

管理工作区

在 Terraform 中管理工作区可以将基础设施配置划分为不同的环境或阶段,从而更容易维护和管理基础设施部署。

  • terraform workspace new

描述:创建一个新的 Terraform 工作区。
示例

terraform workspace new staging
Enter fullscreen mode Exit fullscreen mode

输出

Created and switched to workspace "staging".
Enter fullscreen mode Exit fullscreen mode
  • terraform workspace list

描述:列出所有可用的工作区。
示例

terraform workspace list
Enter fullscreen mode Exit fullscreen mode

输出

default
staging
production
Enter fullscreen mode Exit fullscreen mode
  • terraform workspace select

描述:切换到特定工作区。
示例

terraform workspace select production
Enter fullscreen mode Exit fullscreen mode

输出

Switched to workspace "production".
Enter fullscreen mode Exit fullscreen mode
  • terraform workspace show

描述:显示当前工作区。
示例

terraform workspace show
Enter fullscreen mode Exit fullscreen mode

输出

Current workspace: production
Enter fullscreen mode Exit fullscreen mode
  • terraform workspace delete

描述:删除指定的工作区。
示例

terraform workspace delete staging
Enter fullscreen mode Exit fullscreen mode

输出

Deleted workspace "staging" and switched to "default" workspace.
Enter fullscreen mode Exit fullscreen mode

规划基础设施/资源变更

在配置基础设施时,Terraform 会在应用任何更改之前创建一个执行计划,以便您可以在应用更改之前预览 Terraform 将对您的基础设施所做的更改。

  • terraform plan

描述:创建一个执行计划,允许您预览 Terraform 计划对您的基础架构进行的更改。
示例

terraform plan
Enter fullscreen mode Exit fullscreen mode

输出

Refreshing Terraform state...
...
Plan: 3 to add, 0 to change, 0 to destroy.
Enter fullscreen mode Exit fullscreen mode
  • terraform plan -var-file="prod.tfvars"

描述:使用 tfvars 文件创建执行计划,允许您预览 Terraform 计划在特定环境(例如生产环境)中对您的基础架构所做的更改。
示例

terraform plan -var-file="prod.tfvars"
Enter fullscreen mode Exit fullscreen mode

输出

Refreshing Terraform state...
...
Plan: 15 to add, 3 to change, 5 to destroy.
Enter fullscreen mode Exit fullscreen mode
  • terraform plan -target="aws_instance.my_ec2"

描述:使用 -target 选项创建执行计划,以指定目标资源、模块或资源集合。
示例

terraform plan -target="aws_instance.my_ec2"
Enter fullscreen mode Exit fullscreen mode

输出

Refreshing Terraform state...
...
Plan: 4 to add, 0 to change, 0 to destroy.
Enter fullscreen mode Exit fullscreen mode
  • terraform plan -target="aws_instance.my_ec2" -var-file="prod.tfvars"

描述:使用 -target 选项和 tfvars 文件为您的基础架构创建执行计划,以针对特定环境(例如生产环境)中的特定资源、模块或资源集合。
示例

terraform plan -target="aws_instance.my_ec2" -var-file="prod.tfvars"
Enter fullscreen mode Exit fullscreen mode

输出

Refreshing Terraform state...
...
Plan: 4 to add, 0 to change, 0 to destroy.
Enter fullscreen mode Exit fullscreen mode
  • terraform plan -out=tfplan

描述:使用 `-out` 标志保存计划。之后,您可以应用已保存的计划,Terraform 将仅执行计划中列出的更改。在自动化 Terraform 流水线中,应用已保存的计划文件可确保 Terraform 仅执行您预期的更改,即使您的流水线在不同时间跨多台机器运行。
示例

terraform plan -out=tfplan
Enter fullscreen mode Exit fullscreen mode

输出

Saving a plan to tfplan
Enter fullscreen mode Exit fullscreen mode

应用基础设施/资源变更

当您对基础架构进行更改时,Terraform 会使用初始化期间安装的提供程序和模块来执行存储在执行计划中的步骤。

  • terraform apply

描述:根据您的计划进行更改,以创建或更新资源。
示例

terraform apply
Enter fullscreen mode Exit fullscreen mode

输出

Refreshing Terraform state...
...
Plan: 10 to add, 2 to change, 0 to destroy.
Enter fullscreen mode Exit fullscreen mode
  • terraform apply tfplan

描述:应用指定的计划文件,方法是提供使用 `terraform plan -out` 命令生成的计划文件。
示例

terraform apply tfplan
Enter fullscreen mode Exit fullscreen mode

输出

Refreshing Terraform state...
...
Apply complete! Resources: 7 added, 0 changed, 0 destroyed.
Enter fullscreen mode Exit fullscreen mode
  • terraform apply -var-file="prod.tfvars"

描述:类似于 `terraform plan -var-file="prod.tfvars"` 命令,但它会使用 tfvars 文件应用配置。
示例

terraform apply -var-file="prod.tfvars"
Enter fullscreen mode Exit fullscreen mode

输出

Refreshing Terraform state...
...
Apply complete! Resources: 15 added, 3 changed, 5 destroyed.
Enter fullscreen mode Exit fullscreen mode
  • terraform apply -target="aws_instance.my_ec2"

描述:类似于 `terraform plan -target="aws_instance.my_ec2"` 命令,但它会使用目标定位功能将更改应用到特定资源。
示例

terraform apply -target="aws_instance.my_ec2"
Enter fullscreen mode Exit fullscreen mode

输出

Refreshing Terraform state...
...
Apply complete! Resources: 4 added, 0 changed, 0 destroyed.
Enter fullscreen mode Exit fullscreen mode
  • terraform apply -target="aws_instance.my_ec2" -var-file="prod.tfvars"

描述:使用目标定位功能,在特定环境(例如生产环境)中对特定资源应用更改。
示例

terraform apply -target="aws_instance.my_ec2" -var-file="prod.tfvars"
Enter fullscreen mode Exit fullscreen mode

输出

Refreshing Terraform state...
...
Apply complete! Resources: 5 added, 0 changed, 0 destroyed.
Enter fullscreen mode Exit fullscreen mode

摧毁基础设施/资源

一旦不再需要基础设施,您可能需要将其销毁,以降低安全风险和成本。

  • terraform destroy

描述:终止由您的 Terraform 项目管理的底层架构资源。
示例

terraform destroy
Enter fullscreen mode Exit fullscreen mode

输出

...
Destroy complete! Resources: 3 destroyed.
Enter fullscreen mode Exit fullscreen mode
  • terraform destroy -target="aws_instance.my_ec2"

描述:仅销毁目标基础设施资源。
示例

terraform destroy -target="aws_instance.my_ec2"
Enter fullscreen mode Exit fullscreen mode

输出

...
Destroy complete! Resources: 1 destroyed.
Enter fullscreen mode Exit fullscreen mode
  • terraform destroy -target="aws_instance.my_ec2" -var-file="prod.tfvars"

描述:仅销毁特定环境(例如生产环境)中的目标基础设施资源。
示例

terraform destroy -target="aws_instance.my_ec2" -var-file="prod.tfvars"
Enter fullscreen mode Exit fullscreen mode

输出

...
Destroy complete! Resources: 1 destroyed.
Enter fullscreen mode Exit fullscreen mode

污染/未污染资源

Terraform 有一个名为“tainted”的标记,它用于跟踪对象可能已损坏,因此未来的 Terraform 计划应该替换它。

  • terraform taint aws_instance.my_ec2

描述:此命令通知 Terraform 某个特定对象已降级或损坏,需要在下次应用时重新创建。
示例

terraform taint aws_instance.my_ec2
Enter fullscreen mode Exit fullscreen mode

输出

Resource instance aws_instance.my_ec2 has been marked as tainted.
Enter fullscreen mode Exit fullscreen mode
  • terraform untaint aws_instance.my_ec2

描述:移除受污染资源中的污染。
示例

terraform untaint aws_instance.my_ec2
Enter fullscreen mode Exit fullscreen mode

输出

Resource instance aws_instance.my_ec2 has been successfully untainted.
Enter fullscreen mode Exit fullscreen mode

管理状态文件

Terraform 必须存储有关您托管的基础设施和配置的状态。Terraform 使用此状态将实际资源映射到您的配置、跟踪元数据并提高大型基础设施的性能。默认情况下,此状态存储在名为“terraform.tfstate”的本地文件中。

  • terraform state list

描述:此命令用于列出状态文件中的资源。
示例

terraform state list
Enter fullscreen mode Exit fullscreen mode

输出

aws_instance.foo
aws_instance.bar[0]
aws_instance.bar[1]
module.elb.aws_elb.main
Enter fullscreen mode Exit fullscreen mode
  • terraform state list aws_instance.bar

描述:此命令用于按资源筛选,仅列出具有给定名称的资源。
示例

terraform state list aws_instance.bar
Enter fullscreen mode Exit fullscreen mode

输出

aws_instance.bar[0]
aws_instance.bar[1]
Enter fullscreen mode Exit fullscreen mode
  • terraform state pull > example.tfstate

描述:此命令用于手动下载远程状态并将其输出到本地文件。此命令也适用于本地状态。
示例

terraform state pull > example.tfstate
Enter fullscreen mode Exit fullscreen mode
  • terraform state push

描述:此命令用于手动将本地状态文件上传到远程状态。此命令也适用于本地状态。此命令应尽量避免使用。它仅作为实用工具,用于在需要手动干预远程状态时使用。
示例

terraform state push
Enter fullscreen mode Exit fullscreen mode
  • terraform state rm aws_instance.bar

描述:Terraform 将在系统中搜索与给定资源地址匹配的所有实例,并删除每个实例的记录,以便 Terraform 不再跟踪相应的远程对象。
示例

terraform state rm aws_instance.bar
Enter fullscreen mode Exit fullscreen mode

其他命令

  • terraform force-unlock <LOCK_ID>

说明:此操作不会修改您的基础架构。此命令会移除当前配置状态的锁定。此锁定的行为取决于所使用的后端。本地状态文件无法被其他进程解锁。
示例

terraform force-unlock <LOCK_ID>
Enter fullscreen mode Exit fullscreen mode

输出

Lock ID LOCK_ID released
Enter fullscreen mode Exit fullscreen mode
  • terraform show -json

描述:此命令将显示计划、配置和当前状态的 JSON 表示形式。
示例

terraform show -json
Enter fullscreen mode Exit fullscreen mode

输出

{
  "aws_instance.example": {
    "type": "aws_instance",
    "depends_on": [],
    "primary": {
      "id": "i-1234567890abcdef0",
      "attributes": {
        "ami": "ami-0c55b159cbfafe1f0",
        "instance_type": "t2.micro",
        "tags": {
          "Name": "example-server"
        }
      }
    }
  }
}
Enter fullscreen mode Exit fullscreen mode
文章来源:https://dev.to/haythammostafa/terraform-tropics-a-guide-to-mastering-terraform-commands-for-devops-49ma