怎么使用 Terraform 自动化创建腾讯云 CVM 实例?

文章导读
使用 Terraform 自动化创建腾讯云 CVM 实例,适合需要重复部署、环境一致性要求高的场景。核心是通过编写 HCL 配置文件调用腾讯云 Provider 完成资源编排,但必须注意密钥安全管理和资源属性的动态获取。
📋 目录
  1. 命令速用版
  2. 为什么会这样
  3. 分步处理
  4. 怎么验证是否生效
  5. 常见坑
  6. 参考来源
A A

使用 Terraform 自动化创建腾讯云 CVM 实例,适合需要重复部署、环境一致性要求高的场景。核心是通过编写 HCL 配置文件调用腾讯云 Provider 完成资源编排,但必须注意密钥安全管理和资源属性的动态获取。

先说结论:Terraform 是管理腾讯云 CVM 的有效工具,但严禁在代码中硬编码密钥,且镜像 ID 需动态查询以防失效。

  • 适合:批量创建实例、多环境(开发/测试/生产)一致性部署、CI/CD 流水线集成。
  • 先准备:腾讯云 CAM 子账号密钥(最小权限)、安装 Terraform 客户端、确认地域可用区。
  • 验收:通过腾讯云控制台核对实例状态,结合 terraform output 输出确认资源信息。
  • 安全警告:密钥请通过环境变量传递,切勿将包含密钥的 tfvars 文件提交至代码仓库。

命令速用版

以下是初始化、计划和应用的核心命令,执行前请确保当前目录包含 .tf 配置文件:

1. 初始化 Provider 插件:

terraform init `--upgrade`

2. 预览变更计划:

terraform plan

3. 确认并执行创建:

terraform apply

4. 销毁资源(慎用):

terraform destroy

为什么会这样

Terraform 通过 Provider 插件与腾讯云 API 交互,将基础设施定义为代码(IaC)。它维护一个状态文件(terraform.tfstate),记录已创建资源的 ID 和属性。当你修改配置再次执行 apply 时,它会对比状态文件和实际云资源,只执行必要的变更。这种机制避免了手动操作带来的遗漏或配置漂移,但要求使用者理解状态文件的重要性,不可随意手动删除或修改,建议配合远程后端存储状态。

分步处理

1. 安装与认证配置

怎么使用 Terraform 自动化创建腾讯云 CVM 实例?

下载对应系统的 Terraform 二进制文件并配置环境变量。认证推荐通过环境变量传递密钥,避免明文出现在配置文件中:

export TENCENTCLOUD_SECRET_ID=你的 SecretId
export TENCENTCLOUD_SECRET_KEY=你的 SecretKey

在项目中创建 variables.tf 定义变量结构,provider.tf 引用变量:

# variables.tf
variable "region" {
  description = "部署地域"
  type        = string
  default     = "ap-guangzhou"
}

# provider.tf
provider "tencentcloud" {
  secret_id = var.secret_id
  secret_key = var.secret_key
  region    = var.region
}

若使用环境变量认证,provider 块中可省略 secret_id 和 secret_key,Terraform 会自动读取环境变量。

2. 动态查询镜像与编写资源

创建 main.tf,定义 VPC、子网和 CVM 实例。注意 CVM 必须依赖子网,子网依赖 VPC。镜像 ID 建议使用 data source 动态查询,避免硬编码导致地域不可用:

# data.tf - 动态查询 Ubuntu 公共镜像
data "tencentcloud_images" "ubuntu" {
  image_type = ["PUBLIC_IMAGE"]
  owners     = ["imageOwner"]
  filter {
    name   = "image-name"
    values = ["Ubuntu Server 22.04 LTS AMD64*"]
  }
}

# main.tf - 定义资源
resource "tencentcloud_vpc" "vpc" {
  name       = "my_vpc"
  cidr_block = "10.0.0.0/16"
}

resource "tencentcloud_subnet" "subnet" {
  vpc_id            = tencentcloud_vpc.vpc.id
  name              = "my_subnet"
  cidr_block        = "10.0.1.0/24"
  availability_zone = "ap-guangzhou-3"
}

resource "tencentcloud_instance" "cvm" {
  instance_name     = "my_cvm"
  availability_zone = "ap-guangzhou-3"
  image_id          = data.tencentcloud_images.ubuntu.images.0.image_id
  instance_type     = "S2.SMALL2"
  system_disk_type  = "CLOUD_PREMIUM"
  system_disk_size  = 50
  subnet_id         = tencentcloud_subnet.subnet.id
  vpc_id            = tencentcloud_vpc.vpc.id
}

# outputs.tf - 输出实例 IP
output "instance_public_ip" {
  value = tencentcloud_instance.cvm.public_ip
}

3. 执行部署

依次运行 init、plan 和 apply。plan 阶段会列出即将创建的资源清单,确认无误后输入 yes 执行 apply。若本地调试,可使用 terraform.tfvars 文件存放变量值,但务必将其加入 .gitignore:

怎么使用 Terraform 自动化创建腾讯云 CVM 实例?
# .gitignore
*.tfvars
*.tfstate
*.tfstate.lock.info

怎么验证是否生效

1. 控制台核对:登录腾讯云控制台,进入云服务器列表,检查实例名称、配置、地域是否与配置一致。

2. 输出变量检查:执行 apply 后终端会直接打印 instance_public_ip,可直接用于后续脚本调用或 SSH 连接测试。

3. 状态文件检查:查看本地 terraform.tfstate 文件,确认 resources 数组中包含了 tencentcloud_instance 资源及其 id 属性。

常见坑

1. 密钥泄露风险:不要将包含 secret_id 和 secret_key 的配置文件或 tfvars 文件提交到公共代码仓库。CI/CD 环境中请使用 Secret 管理工具注入环境变量。

2. 镜像 ID 失效:硬编码 image_id 在不同地域或镜像更新后会失效,导致 plan 报错。务必使用 data source 动态查询最新可用镜像。

3. 实例类型限制:实例类型(如 S2.SMALL2)具有地域性,部分可用区可能不支持特定机型。创建前可通过控制台或 API 查询可用实例规格。

4. 可用区与子网匹配:CVM 的 availability_zone 必须与子网的可用区一致,否则创建会失败。多可用区地域需先查询可用区列表再规划子网。

5. 扩容触发更换:修改系统盘大小(system_disk_size)在某些情况下可能导致系统盘更换而非原地扩容,实例密码可能重置,操作前务必在测试环境验证。

参考来源

  • Terraform Registry - tencentcloud_instance 文档
  • 腾讯云开发者社区 - Terraform 最佳实践
  • 腾讯云官方文档 - 云服务器 CVM 实例类型