Terraform核心命令 电脑版发表于:2025/7/1 16:31  ># Terraform核心命令 [TOC] Terraform基本命令 ------------ | 命令 | 功能与作用 | 常用参数 | 使用示例 | |-------------------|--------------------------------------------------------------------------|--------------------------------------------------------------------------|--------------------------------------------------------------------------| | **terraform init** | 初始化 Terraform 配置目录,下载并安装提供者插件。 | `-upgrade`:升级提供者插件到最新版本。 | 在 Terraform 配置目录中运行 `terraform init -upgrade`,下载最新版提供者插件。 | | | | `-backend-config`:指定后端存储配置文件。 | 使用 `-backend-config` 参数指定存储桶名称、访问密钥等。 | | **terraform plan** | 根据配置文件和实际状态,生成执行计划,列出资源变更情况,不实际修改基础设施。 | `-var`:指定变量的值。 | 配置文件有变量时,运行 `terraform plan -var "变量名=值"`。 | | | | `-target`:指定特定资源作为目标。 | 只关注名为 “my - server” 的云服务器修改计划,用 `-target my - server`。 | | | | `-out`:指定计划文件输出路径。 | 将计划保存到 “my - plan. tfplan” 文件,用 `-out my - plan. tfplan`。 | | **terraform apply** | 根据配置文件或计划文件执行基础设施变更操作。 | `-auto - approve`:自动批准执行计划。 | 确认计划正确后,运行 `terraform apply -auto - approve` 自动执行计划。 | | | | `-lock`:控制状态文件锁定机制。 | 一般默认启用锁定,保证多人操作时状态文件安全。 | | **terraform destroy** | 销毁 Terraform 管理的基础设施资源。 | `-target`:指定特定资源进行销毁。 | 只销毁名为 “test - server” 的云服务器,用 `-target test - server`。 | | | | `-force`:强制销毁资源,可能数据丢失。 | 确定不再需要资源时,运行 `terraform destroy -force`(谨慎使用)。 | ### Terraform init tn2>Terraform init之后,会去获取Provider,获取Provider之后它的目录结构如下图所示:  tn2>红色的表示提供的可执行程序,不同的依赖是不能复用的。其中的`.terraform.lock.hcl`文件用于锁定版本的文件。  ### Terraform plan tn2>执行这个命令,Terraform会去把期望状态和当前状态做对比  tn2>当它发现清单需要新增加一台时,它会计划好需要新增一台机器,每一个资源都有它的标识ID,每一个provider会自定义。  ### Terraform State File tn2>`terraform.tfstate`文件json格式,记录了真实世界所有的状态。 包括敏感信息,如虚拟机密码。 可以存储在本地或远端(非Git)。 随着destroy命令而清空。  Demo2:导入资源 ------------ tn2>适用场景:资源一开始并不是由terraform创建的,state状态丢失需要重新拉去真实的状态。 首先我们创建一个`Demo2`的文件夹,并将我们相关的`cvm.tf`复制到`Demo2`文件夹下面。 接着我们复制`.terraform`文件夹与`.terraform.lock.hcl`文件为了不再使用`terraform init`进行初始化包。 我们开始执行`terraform plan`查看有哪些变更。  tn2>然后我们开始执行`terraform apply -auto-approve`进行创建相对应的清单。  tn2>`terraform.tfstate`这里列举出我们所有创建的清单,这时我们将`terraform.tfstate`这个文件改成`terraform.tfstate.b`然后我们通过`import`命令进行下拉我们的列表。 ```bash terraform import <webserver> <serverid> ```   ```bash terraform import tencentcloud_instance.web ins-cagzrs10 ```  tn2>发现是多了一个`count`造成的,去掉之后再执行一下就可以了。 ```bash resource "tencentcloud_instance" "web" { instance_name = "web server" availability_zone = data.tencentcloud_availability_zones.default.zones.0.name image_id = data.tencentcloud_images.default.images.0.image_id instance_type = data.tencentcloud_instance_types.default.instance_types.0.instance_type system_disk_type = "CLOUD_PREMIUM" system_disk_size = 50 allocate_public_ip = true internet_max_bandwidth_out = 20 security_groups = [tencentcloud_security_group.default.id] } ```   tn2>我们发现`terraform.tfstate`文件已经导出下来了,对比一下我们的`terraform.tfstate.b`。  tn2>我们会发现就末尾部分不太一样。 下面将列举配置文件、状态、真实状态以及对应的操作是什么。  本地与远程 ------------  ### Remote Backend (Terraform cloud) tn2>这里我们选择远程存储到Terraform cloud平台中,首先我们对其进行登录或注册: https://app.terraform.io/session  tn2>首先我们创建个人的组织。   tn2>然后我们创建一下Workspace,点击第二个`CLI-Driven Workflow`。    tn2>创建好后,我们按照它的要求在本地进行操作,首先执行`terraform login`命令进行登录,输入yes后会自动弹出一个需要Token的框,然后我们创建一个token复制后粘贴到本地命令需要输入token的地方。     tn2>然后添加一下远程存储的代码。  tn2>通过再次初始化,在是否需要将配置保存到workspace输入yes。   tn2>这时我们发现我们的`terraform.tfstate`的内容不见了,已经远程保存到了`terraform cloud`的workspace上面了,我们来查看一下。  