[英]Terraform 12 How to convert for_each data sources into list and map
我正在使用 terraform 12 我的问题是我想我误解了一个纯粹的 terraform 语法。
我从数据源 object 中的 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)
}
这是我被阻止的地方。 我尝试了很多东西,但没有任何效果。 我需要的是有一个 map 作为密钥合作伙伴列表中的值(例如测试),并作为密钥的 ARN,它在数据 kms_key 中。
你能帮我吗?
我得到的错误表明数据 kms_key 不被视为列表,而是带有属性的 object。 我如何从中获取列表以使用我想要的键/值对制作 map?
|----------------
| 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).
谢谢 !
我通过创建一个局部变量解决了这个问题,如下所示:
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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.