Итерация по списку при использовании for_each (Terraform 0.12) - PullRequest
1 голос
/ 11 марта 2020

В настоящее время я пытаюсь использовать TF 0,12 для создания AWS учетных записей организаций. Прямо сейчас у меня есть карта счетов с соответствующей информацией, вот пример, где «Services» - это имя учетной записи:

accountMap = {
...
  Services = {
    OU          = ["Development", "Production"]
  },
...
}

OU относится к единицам организации, частью которых должна быть учетная запись. В настоящее время я уже использую for_each для l oop через эту карту имен учетных записей, но я застрял на том, как использовать OU в качестве суффикса, поэтому имя учетной записи org станет «Services-Development» и «Services- Производство». Я пробовал аналогично следующему:

resource "aws_organizations_account" "main" {
  for_each = var.ouMap

  name     = "${each.key}-${var.accountMap["${each.value[*]}"]}"
  ...
}

Однако для «имени» требуется строка, и я получаю сообщение об ошибке, так как я предоставляю список подразделений, но я хочу, чтобы одна учетная запись принадлежала нескольким OUs или просто один OU. Итак, как я могу преобразовать список в строку по одному за раз, в то же время для одной и той же итерации for_each (но для моих разных OU)?

Я открыт для других предложений относительно наилучшей практики для сопоставления AWS Учетная запись организации в нескольких подразделениях, так как я все еще плохо знаком с Terraform.

1 Ответ

1 голос
/ 15 марта 2020

A локальное значение может быть вычислено с использованием , вложенного для l oop в terraform v0.12.

Локальное значение может позже использоваться в ресурсах. В этом примере обрабатывается нулевой ресурс .

accountMap = {
  Services = {
    OU = ["Development", "Production"]
  }
}


locals {
  organization_account = flatten(
      [for k, v in var.accountMap: [for v2 in v.OU: "${k}-${v2}"]]
  )
}

resource "null_resource" "foo" {
    count = length(local.organization_account)
    provisioner "local-exec" {
        command = "echo ${local.organization_account[count.index]}"
    }
}

output "organization_account" {
  value = local.organization_account
}
...