Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services Terraform 12如何将每个数据源转换为列表和地图_Amazon Web Services_Amazon S3_Foreach_Terraform_Terraform0.12+ - Fatal编程技术网

Amazon web services Terraform 12如何将每个数据源转换为列表和地图

Amazon web services Terraform 12如何将每个数据源转换为列表和地图,amazon-web-services,amazon-s3,foreach,terraform,terraform0.12+,Amazon Web Services,Amazon S3,Foreach,Terraform,Terraform0.12+,我使用的是terraform 12,我的问题是我猜我对纯粹的terraform syntaxt理解错误 我从数据源对象中的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,

我使用的是terraform 12,我的问题是我猜我对纯粹的terraform syntaxt理解错误

我从数据源对象中的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 bucket,并将它们的特定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 bucket for_中看到我使用的每个循环的局部变量如下所示:

locals {
  kms_key_binding = zipmap(var.partners,data.aws_kms_key.kms_key)
}
这就是我被封锁的地方。我试了很多东西,但都不管用。我需要的是有一个映射,其中包含合作伙伴列表(例如test)中的值作为key,以及数据kms_key中的key的ARN

你能帮我吗

我得到的错误是,数据kms_键不被视为列表,而被视为带有属性的对象。我如何从中获得一个列表,用所需的键/值对制作一个映射

|----------------
    | 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)