使用 Terraform 批量创建腾讯云服务器

准备配置文件

创建 main.tf, 根据自己需求按照注释提示替换内容:

terraform {
  required_providers {
    tencentcloud = {
      source  = "tencentcloudstack/tencentcloud"
      version = "1.66.3"
    }
  }
}

provider "tencentcloud" {
  secret_id  = "************************************" # 云 API 密钥 SecretId
  secret_key = "********************************" # 云 API 密钥 SecretKey
  region     = "ap-chengdu" # 地域,完整可用地域列表参考: https://cloud.tencent.com/document/product/213/6091
}

data "tencentcloud_image" "ubuntu" {
  image_name_regex = "Ubuntu Server 20.04 LTS 64bit" # 操作系统镜像名

  filter {
    name   = "image-type"
    values = ["PUBLIC_IMAGE"]
  }
}

data "tencentcloud_instance_types" "node" {
  exclude_sold_out = true # 忽略已售罄的机型
  filter {
    name   = "instance-charge-type"
    values = ["POSTPAID_BY_HOUR"] # 过滤出支持按理计费的机型
  }
  filter {
    name   = "zone"
    values = ["ap-chengdu-1", "ap-chengdu-2"] # 过滤出可用区中可用的机型
  }
  cpu_core_count = 2 # 过滤 CPU 规格
  memory_size    = 4 # 过滤内存规格
}

data "tencentcloud_vpc_instances" "testvpc" {
  name = "testvpc" # 指定 VPC 名称
}

data "tencentcloud_vpc_subnets" "testsubnet" {
  vpc_id = data.tencentcloud_vpc_instances.testvpc.instance_list.0.vpc_id
  name   = "testsubnet-2-1" # 指定子网名称
}

resource "tencentcloud_instance" "testcvm" {
  count                      = 3 # 创建机器的数量
  instance_name              = "testcvm" # CVM 实例名称
  hostname                   = "testcvm" # CVM hostname
  system_disk_type           = "CLOUD_PREMIUM" # 系统盘类型:高性能云盘
  system_disk_size           = 50 # 系统盘大小:50GB
  project_id                 = 0 # 默认项目
  key_name                   = "skey-3t01mlvf" # SSH 密钥 ID
  instance_charge_type       = "POSTPAID_BY_HOUR" # 实例计费模式:按量计费
  allocate_public_ip         = true # 是否分配公网 IP
  internet_max_bandwidth_out = 100 # 公网流量带宽限制:100GB
  internet_charge_type       = "TRAFFIC_POSTPAID_BY_HOUR" # 公网流量计费模式:按使用流量
  availability_zone          = data.tencentcloud_vpc_subnets.testsubnet.instance_list.0.availability_zone # CVM 可用区跟随子网可用区
  image_id                   = data.tencentcloud_image.ubuntu.image_id
  instance_type              = data.tencentcloud_instance_types.node.instance_types.0.instance_type
  vpc_id                     = data.tencentcloud_vpc_instances.testvpc.instance_list.0.vpc_id
  subnet_id                  = data.tencentcloud_vpc_subnets.testsubnet.instance_list.0.subnet_id


  data_disks {
    data_disk_type = "CLOUD_PREMIUM" # 50GB 高性能云硬盘
    data_disk_size = 50
    encrypt        = false
  }

  tags = {
    test = "test" # 打上腾讯云标签
  }
}

创建并获取云服务器列表

main.tf 所在目录执行 terraform init,然后再执行 terraform apply,输入 yes 确认执行。

执行完毕之后 CVM 创建成功,可以获取出创建出来的 CVM 内网 IP 列表 (注意替换 testcvm):

$ terraform show -json | jq -r '.values.root_module.resources[] | select(.address | test("tencentcloud_instance.testcvm")) | .values.private_ip'
10.10.6.15
10.10.6.6
10.10.6.3

销毁所有云服务器

main.tf 所在目录执行:

terraform destroy

参考资料