【发布时间】:2020-08-22 10:46:54
【问题描述】:
我正在使用 terraform 12,我的问题是我猜我误解了一个纯粹的 terraform 语法。
我正在从数据源对象中的 for_each 循环中获取 AWS KMS 密钥,如下所示:
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 存储桶,并关联其特定的 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 循环中看到我使用的局部变量如下所示:
locals {
kms_key_binding = zipmap(var.partners,data.aws_kms_key.kms_key)
}
这是我被阻止的地方。我尝试了很多东西,但没有任何效果。我需要的是一张地图,其中的键是合作伙伴列表中的值(例如测试),键的 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).
谢谢!
【问题讨论】:
标签: amazon-web-services amazon-s3 foreach terraform terraform0.12+