【发布时间】:2022-08-02 12:23:35
【问题描述】:
我需要使用位于此处的实例模板模块在 GCP 中创建多个虚拟机: https://github.com/terraform-google-modules/terraform-google-vm/tree/master/modules/instance_template
我的实例模板代码如下所示:
module \"db_template\" {
source = \"terraform-google-modules/vm/google//modules/instance_template\"
version = \"7.8.0\"
name_prefix = \"${var.project_short_name}-db-template\"
machine_type = var.app_machine_type
disk_size_gb = 20
source_image = \"debian-10-buster-v20220719\"
source_image_family = \"debian-10\"
source_image_project = \"debian-cloud\"
additional_disks = var.additional_disks
labels = {
costing = \"db\",
inventory = \"gcp\",
}
network = var.network
subnetwork = var.subnetwork
access_config = []
service_account = {
email = var.service_account_email
scopes = [\"cloud-platform\"]
}
tags = [\"compute\"]
}
在我的 tfvars 我有这个:
additional_disks = [
{ disk_name = \"persistent-disk-1\"
device_name = \"persistent-disk-1\"
auto_delete = true
boot = false
disk_size_gb = 50
disk_type = \"pd-standard\"
interface = \"SCSI\"
disk_labels = {}
}
]
但是,当我的代码使用此模板部署多个 VM 时,只会部署 1 个 VM(第一个 VM),随后的 VM 会出现以下错误消息:
Error: Error creating instance: googleapi: Error 409: The resource \'projects/<PATH>/persistent-disk-1\' already exists, alreadyExists
我明白发生了什么,但我不知道如何解决它。无法创建后续 VM,因为 additional_disk 名称已被第一个 VM 占用。我认为使用实例模板的全部意义在于其中内置了逻辑,您可以在其中使用相同的模板并创建多个该类型的虚拟机。
但似乎我必须做一些额外的编码才能使用这个模板部署多个虚拟机。
谁能建议如何做到这一点?
-
您如何尝试部署多个实例?
-
使用类似
disk_name = \"$disk-{random_id.id.hex}\"registry.terraform.io/providers/hashicorp/random/latest/docs/… -
那将必须是一个不同的变量并且以不同的方式编写,但这是一个好主意。
-
我应该提到我扩展实例的方法是
for_each,这可能会影响您的 cmets。我确实尝试了random_id资源的各种化身,但也发现很难做到这一点。最终,我得到了它与for_each的合作,并分两步创建和附加磁盘。
标签: templates google-cloud-platform terraform google-compute-engine terraform-provider-gcp