【发布时间】:2021-12-13 23:07:18
【问题描述】:
给定一些条件/过滤的for_each 语句,我如何将剩余的对象用于下游依赖项?
注意:Terraform 0.13.7
例如,如果用户没有 s3 存储桶,terraform 应该创建一个并设置它的通知策略。如果他们确实有一个存储桶,那么 terraform 应该查找存储桶并设置它的通知。
到目前为止,我已经尝试像这样格式化我的有效负载:
"snowpipes": {
. . .
"create_staging_bucket": true,
"staging_bucket": {
"name": "existing-bucket-deployment",
"url": "old-dirty-bucket",
"arn": "arn:aws:s3:::old-dirty-bucket"
},
. . .
}
然后像这样构建我的 terraform:
resource "aws_s3_bucket" "staging_bucket" {
for_each = {for k, v in var.snowpipes : k => v if v.create_staging_bucket == true}
bucket = lower(each.value.staging_bucket.url)
}
resource "aws_s3_bucket_notification" "bucket_notification" {
for_each = var.snowpipes
bucket = aws_s3_bucket.staging_bucket[each.key].id
. . .
}
然后我得到这样的错误,表明给定的密钥被过滤掉了:
Error: Invalid index
on main.tf line 504, in resource "aws_s3_bucket_notification" "bucket_notification":
504: bucket = aws_s3_bucket.staging_bucket[each.key].id
|----------------
| aws_s3_bucket.staging_bucket is object with no attributes
| each.key is "existing-bucket-deployment"
The given key does not identify an element in this collection value.
不确定是否有办法在 resource 和 data 对象之间来回交换?
【问题讨论】:
标签: amazon-s3 terraform terraform-provider-aws terraform0.12+