Terraform 12 Как преобразовать источники данных for_each в список и карту - PullRequest
0 голосов
/ 07 мая 2020

Я использую terraform 12, и моя проблема в том, что я полагаю, что чисто синтаксис terraform неправильно понят от меня.

Я получаю AWS KMS Key от for_each l oop в источнике данных как показано ниже:

data "aws_kms_key" "kms_key" {
  for_each = toset(var.partners) //partners is a list of string ["test","test2"]
  key_id = "alias/aws/s3" //just for the example, it really gets cutom KMS key here
}

Затем я пытаюсь создать корзину S3 для каждого значения в списке партнеров с их спецификациями. c Связанный ключ KMS:

resource "aws_s3_bucket" "bucket" {
  for_each = local.kms_key_binding
  bucket   = "bucket-${each.key}"
  server_side_encryption_configuration {
    rule {
      apply_server_side_encryption_by_default {
        kms_master_key_id = each.value.arn
        sse_algorithm     = "aws:kms"
      }
    }
  }
}

Вы можете см. в ведре s3 for_each l oop, что я использую локальную переменную, которая выглядит так:

locals {
  kms_key_binding = zipmap(var.partners,data.aws_kms_key.kms_key)
}

Вот где я заблокирован. Я много чего пробовал, но ничего не работает. Что мне нужно, так это иметь карту, в которой в качестве ключа указано значение в списке партнеров (например, test), а в качестве ключа - ARN ключа, который находится в данных kms_key.

Вы можете мне помочь, пожалуйста?

Ошибка, которую я получаю, говорит о том, что данные kms_key рассматриваются не как список, а как объект с атрибутами. Как я могу получить из этого список, чтобы составить карту с желаемыми парами ключ / значение?

|----------------
    | data.aws_kms_key.kms_key is object with 2 attributes
    | var.partners is list of string with 2 elements

Call to function "zipmap" failed: number of keys (2) does not match number of
values (1).

Спасибо!

1 Ответ

0 голосов
/ 07 мая 2020

Я решил проблему, создав следующую локальную переменную:

kms_key_list = [
  for kms_key in data.aws_kms_key.kms_key : {
    arn = kms_key.arn
  }
]

kms_key_binding = zipmap(var.partners,local.kms_key_list)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...