地形。在应该知道其中一个值时查找 for_each 的组合

Terraform. Finding combinations for for_each when one of value should be got to know

我想用现有图像(快照)中提供的每个区域创建一个 Droplet。但它需要找出每个区域的图像ID。

当需要知道其中一个值时,我不知道如何找到 for_each 的组合。

locals {
  regions = toset([
    "tor1",
    "sgp1",
    "sfo3",
    "lon1",
    "fra1",
    "blr1",
    "ams3",
    "nyc1",
    "nyc3",
  ])
}

获取区域中的图片ID

data "digitalocean_droplet_snapshot" "web-snapshot" {
  for_each    = local.regions
  name_regex  = "^s-sites"
  region      = each.key
  most_recent = true
}

此代码无效。 在具有这些区域中的图像 ID 的区域中创建 Droplet。

resource "digitalocean_droplet" "stop-sites" {
  for_each   = local.regions
  name       = "${var.server_name}-${each.key}"
  image      = 102913678 # we should find the ID of image
  region     = each.key
  size       = "s-1vcpu-1gb"
  ipv6       = true
  backups    = false
  monitoring = true
  droplet_agent = true
}

由于 data 源也使用 for_each,这意味着在局部变量 (regions 中定义的每个区域都将有一个 data 源), 即:

data.digitalocean_droplet_snapshot.web-snapshot["tor1"]
data.digitalocean_droplet_snapshot.web-snapshot["sgp1"]
...

为了访问使用 data 源时导出的图像 ID 的属性,需要进行以下更改:

resource "digitalocean_droplet" "stop-sites" {
  for_each   = local.regions
  name       = "${var.server_name}-${each.key}"
  image      = data.digitalocean_droplet_snapshot.web-snapshot[each.key].id
  region     = each.key
  size       = "s-1vcpu-1gb"
  ipv6       = true
  backups    = false
  monitoring = true
  droplet_agent = true
}

需要注意的一点:对于set类型的变量,each.keyeach.value是相同的[1].


[1] https://www.terraform.io/language/meta-arguments/for_each#the-each-object