Amazon web services Terraform 13,如何引用使用count的模块的单个实例的输出

Amazon web services Terraform 13,如何引用使用count的模块的单个实例的输出,amazon-web-services,terraform,Amazon Web Services,Terraform,我有一个创建多个存储桶的模块: module "s3_bucket" { source = "terraform-aws-modules/s3-bucket/aws" count = length(var.buckets) bucket = "bucket-${var.buckets[count.index]}" } 我只想将桶策略应用于其中一个实例: resource "aws_s3_bucket_po

我有一个创建多个存储桶的模块:

module "s3_bucket" {
  source  = "terraform-aws-modules/s3-bucket/aws"
  count   = length(var.buckets)
  bucket  = "bucket-${var.buckets[count.index]}"
}
我只想将桶策略应用于其中一个实例:

resource "aws_s3_bucket_policy" "policy" {
  bucket = module.s3_bucket.THAT_ONE_BUCKET_BY_NAME

  policy = jsonencode(
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Principal": {
                    "AWS": [
                        "arn:aws:iam::1111111111:role/access-role"
                    ]
                },
                "Action": [
                    "s3:PutObject"

                ],
                "Resource": [
                    "arn:aws:s3:::THAT_ONE_BUCKET_BY_NAME",
                    "arn:aws:s3:::THAT_ONE_BUCKET_BY_NAME/*"
                ]
            }
        ]
    }
  )

在terraform 13中,正确的方法是什么?

当您在这个
模块
块中使用
计数
时,符号
模块.s3_bucket
将成为一个对象列表,而不仅仅是一个表示一组输出的单个对象

因此,为了只访问其中一个的名称,您需要知道要使用的名称的索引,并使用普通索引语法进行访问:

module.s3_bucket[0].name

(以上假设您的模块有一个
输出“name”
,它返回bucket名称。)

您必须使用索引,例如0、1、2,具体取决于
长度(变量bucket)
。比如说,

bucket = module.s3_bucket[0].name