zl程序教程

您现在的位置是:首页 >  Python

当前栏目

linux terraform环境配置(创建cvm的例子)

2023-04-18 14:39:06 时间

两种办法:建议采用2(1我还没顾上验证)

terraform依赖go环境,go环境配置参考https://cloud.tencent.com/developer/article/1836994

1、参考https://github.com/tencentcloudstack/terraform-provider-tencentcloud#readme

需要Go1.13和Terraform 0.13

https://golang.org/dl/#go1.13

https://releases.hashicorp.com/terraform/0.13.0/

2、手动配置

terraform依赖go环境,go环境配置参考https://cloud.tencent.com/developer/article/1836994

terraform下载地址:https://releases.hashicorp.com/terraform/

找到terraform 0.13.x版本下载地址进行下载

我做实验时下载的terraform_0.13.0

http://releases.hashicorp.com/terraform/0.13.7/terraform_0.13.7_linux_amd64.zip

http://releases.hashicorp.com/terraform/0.13.6/terraform_0.13.6_linux_amd64.zip

http://releases.hashicorp.com/terraform/0.13.5/terraform_0.13.5_linux_amd64.zip

http://releases.hashicorp.com/terraform/0.13.4/terraform_0.13.4_linux_amd64.zip

http://releases.hashicorp.com/terraform/0.13.3/terraform_0.13.3_linux_amd64.zip

http://releases.hashicorp.com/terraform/0.13.2/terraform_0.13.2_linux_amd64.zip

http://releases.hashicorp.com/terraform/0.13.1/terraform_0.13.1_linux_amd64.zip

http://releases.hashicorp.com/terraform/0.13.0/terraform_0.13.0_linux_amd64.zip

http://windows-1251783334.cos.ap-shanghai.myqcloud.com/terraform_0.13.0_linux_amd64.zip

http://windows-1251783334.cos.ap-shanghai.myqcloud.com/terraform_0.13.1_linux_amd64.zip

http://windows-1251783334.cos.ap-shanghai.myqcloud.com/terraform_0.13.2_linux_amd64.zip

http://windows-1251783334.cos.ap-shanghai.myqcloud.com/terraform_0.13.3_linux_amd64.zip

http://windows-1251783334.cos.ap-shanghai.myqcloud.com/terraform_0.13.4_linux_amd64.zip

http://windows-1251783334.cos.ap-shanghai.myqcloud.com/terraform_0.13.5_linux_amd64.zip

http://windows-1251783334.cos.ap-shanghai.myqcloud.com/terraform_0.13.6_linux_amd64.zip

http://windows-1251783334.cos.ap-shanghai.myqcloud.com/terraform_0.13.7_linux_amd64.zip

# wget http://windows-1251783334.cos.ap-shanghai.myqcloud.com/terraform_0.13.0_linux_amd64.zip

# mkdir terraform_dir

# unzip terraform_0.13.0_linux_amd64.zip

# mv terraform terraform_dir/

# echo "export PATH=$PATH:/root/terraform_dir" >> /etc/profile && source /etc/profile

# cd terraform_dir/

# vim provider.tf

添加内容

provider "tencentcloud" {

secret_id = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

secret_key = "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy"

region = "ap-shanghai"

}

# terraform init

第一次执行 terraform init 会提醒让执行terraform 0.13upgrade

执行terraform 0.13upgrade后会提示让敲yes

敲完yes后会看到

紧接着再执行一次terraform init就会看到

yes 后继续执行 terraform init

需要注意的是,有时候敲yes后再敲一遍terraform init就ok了,但有时候可能需要执行几次terraform init才能成功,例如下图

接下来就是编辑cvm.tf文件

vim cvm.tf

请注意里面的参数值请具体化成你自己的

resource "tencentcloud_instance" "cvm_test" {

  instance_name              = "xxx测试"
  availability_zone          = "ap-shanghai-4"
  image_id                   = "img-29hl923v"
  instance_type              = "S5.SMALL2"
  instance_charge_type       = "POSTPAID_BY_HOUR"
  system_disk_type           = "CLOUD_PREMIUM"
  system_disk_size           = 50
//hostname                   = "cvm_test"
  project_id                 = 1214130
  vpc_id                     = "vpc-dvnmxoki"
  subnet_id                  = "subnet-5gtwidoz"
  internet_charge_type       = "TRAFFIC_POSTPAID_BY_HOUR"
  internet_max_bandwidth_out = 5
  allocate_public_ip         = true
  instance_count             = 2
//count                      = 2
  data_disks {
    data_disk_type           = "CLOUD_PREMIUM"
    data_disk_size           = 10
    data_disk_snapshot_id    = "snap-4zyitidw"
  }

//tags = {
//  tagKey                   = "tagValue"
//}

//security_groups            = ["xxx"]

  password                   = "Fuzasuijimima@qq.com"
//keep_image_login           = true

  disable_monitor_service   = false
  disable_security_service  = false

//user_data                  = "PHBvd2Vyc2hlbGw+CmdldC1kYXRlIC1mb3JtYXQgSEg6bW06c3M6ZmZmZmZmZiA+PiBDOlxhYWEudHh0OwpTZXQtRXhlY3V0aW9uUG9saWN5IC1TY29wZSBDdXJyZW50VXNlciBVbnJlc3RyaWN0ZWQgLWZvcmNlCmlmKC1OT1QgKFtTZWN1cml0eS5QcmluY2lwYWwuV2luZG93c1ByaW5jaXBhbF1bU2VjdXJpdHkuUHJpbmNpcGFsLldpbmRvd3NJZGVudGl0eV06OkdldEN1cnJlbnQoKSkuSXNJblJvbGUoW1NlY3VyaXR5LlByaW5jaXBhbC5XaW5kb3dzQnVpbHRJblJvbGVdICJBZG1pbmlzdHJhdG9yIikpCnsgICAKJGFyZ3VtZW50cyA9ICImICciICsgJG15aW52b2NhdGlvbi5teWNvbW1hbmQuZGVmaW5pdGlvbiArICInIgpTdGFydC1Qcm9jZXNzIHBvd2Vyc2hlbGwgLVZlcmIgcnVuQXMgLUFyZ3VtZW50TGlzdCAkYXJndW1lbnRzCkJyZWFrCn0KZ2V0LWRhdGUgLWZvcm1hdCBISDptbTpzczpmZmZmZmZmID4+IEM6XGFhYS50eHQ7CgpuZXQgdXNlciBBZG1pbmlzdHJhdG9yICJGdXphc3VpamltaW1hQHFxLmNvbSIKZWNobyAiUkVHRURJVDQiID4gYzpcdGVtcC5yZWcKZWNobyAiW0hLRVlfTE9DQUxfTUFDSElORVxTT0ZUV0FSRVxNaWNyb3NvZnRcV2luZG93cyBOVFxDdXJyZW50VmVyc2lvblxXaW5sb2dvbl0iID4+IGM6XHRlbXAucmVnCmVjaG8gImAiQXV0b0FkbWluTG9nb25gIj1gIjFgIiI+PiBjOlx0ZW1wLnJlZwplY2hvICJgIkRlZmF1bHRVc2VyTmFtZWAiPWAiQWRtaW5pc3RyYXRvcmAiIiAgPj4gYzpcdGVtcC5yZWcKZWNobyAiYCJEZWZhdWx0UGFzc3dvcmRgIj1gIkZ1emFzdWlqaW1pbWFAcXEuY29tYCIiID4+IGM6XHRlbXAucmVnCmNtZCAvYyAicmVnIGltcG9ydCBjOlx0ZW1wLnJlZyIKCnN0YXJ0LXNsZWVwIDEwCnJlc3RhcnQtY29tcHV0ZXIgLWZvcmNlIDI+JG51bGwKCmdldC1kYXRlIC1mb3JtYXQgSEg6bW06c3M6ZmZmZmZmZiA+PiBDOlxhYWEudHh0Owo8L3Bvd2Vyc2hlbGw+"
}

编好后就可以执行terraform validate来验证是否存在语法问题,没问题的话就可以执行terraform plan了,注意执行terraform plan时加-out参数,因为光执行terraform plan会报

Note: You didn't specify an "-out" parameter to save this plan, so Terraform

can't guarantee that exactly these actions will be performed if

"terraform apply" is subsequently run.

去除这个报错的办法就是加-out参数,例如terraform plan -out test

然后就是执行terraform apply "test"

要销毁上面创建的cvm的话,执行terraform destroy

1.59.18之前的版本(本文档首次实验时,provider是1.59.14版本)

如果大家亲自试一遍的话,会发现 instance_count = 2跟count = 2都能创建2台机器出来,但是执行terraform destroy的话,instance_count = 2的情况只能销毁1台机器,因为创建机器的时候记录了1个instanceid,销毁的时候应该就是读创建时记录的那些个instanceid的,由于就记录了1个,所以销毁的时候也就销毁1个。

试了count = 2的情况下,创建的时候记录了2个instanceid,销毁的时候也记录了2个instanceid。

另外, instance_count = 2跟count = 2的情况在资源编排TIC上的表现跟在linux terraform环境中的表现一样。

估计instance_count = 2是个bug吧。

1.59.18及其之后的版本(本文档第二次实验时,provider是1.61.4),instance_count和count的情况正好反过来了。总之,1.59.18之前的版本用instance_count,1.59.18及其之后的版本用count,这问题是我反馈给腾讯云修正的

关于cvm的参数详见:

https://registry.terraform.io/providers/tencentcloudstack/tencentcloud/latest/docs/resources/instance

关于cbs的参数详见:

https://registry.terraform.io/providers/tencentcloudstack/tencentcloud/latest/docs/resources/cbs_storage