首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用"additional_disks“从实例模板创建多个VM的GCP Terraform错误

用"additional_disks“从实例模板创建多个VM的GCP Terraform错误
EN

Stack Overflow用户
提问于 2022-07-31 04:12:46
回答 1查看 223关注 0票数 1

我需要使用位于以下的实例模板模块在GCP中创建多个VM:https://github.com/terraform-google-modules/terraform-google-vm/tree/master/modules/instance_template

我的实例模板代码如下所示:

代码语言:javascript
复制
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"]
}

在我的tfvar里我有这样的东西:

代码语言:javascript
复制
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时,只会部署一个VM--第一个VM--以及随后的VM错误,其中包含以下消息:

代码语言:javascript
复制
Error: Error creating instance: googleapi: Error 409: The resource 'projects/<PATH>/persistent-disk-1' already exists, alreadyExists

我知道发生了什么,但我不知道如何解决。无法创建后续VM,因为第一个VM已经使用了additional_disk名称。我认为使用实例模板的全部意义在于,其中内置了逻辑,您可以使用相同的模板并创建该类型的多个VM。

但是,似乎我必须做一些额外的编码,以获得多个VM部署在这个模板。

有人能建议怎么做吗?

EN

回答 1

Stack Overflow用户

发布于 2022-08-02 04:23:35

最终,它与各种for_each结构一起工作:

代码语言:javascript
复制
locals {
  app_servers = ["inbox", "batch", "transfer", "tools", "elastic", "artemis"]
  db_servers  =  ["inboxdb", "batchdb", "transferdb", "gatewaydb", "artemisdb"]
}

resource "google_compute_disk" "db_add_disk" {
  for_each = toset(local.db_servers)
  name  = "${each.value}-additional-disk"
  type  = "pd-standard" // pd-ssd
  zone  = var.zone
  size  = 50
  // interface     = "SCSI"
  labels = {
    environment = "dev"
  }
  physical_block_size_bytes = 4096
}
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"
  

  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"]
}

resource "google_compute_instance_from_template" "db_server-1" {
  for_each =  toset(local.db_servers)
  name = "${var.project_short_name}-${each.value}-1"
  zone = var.zone

  source_instance_template =  module.db_template.self_link
 

  // Override fields from instance template
  labels = {
    costing   = "db",
    inventory = "gcp",
    component = "${each.value}"
  }
  lifecycle {
    ignore_changes = [attached_disk]
  }
}

resource "google_compute_attached_disk" "db_add_disk" {
  for_each = toset(local.db_servers)
  disk     = google_compute_disk.db_add_disk[each.key].id
  instance = google_compute_instance_from_template.db_server-1[each.key].id
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73180620

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档