Terraform创建aws_s3_bucket_object时count与for_each同时使用报错如何解决
错误原因
Terraform 中count和for_each属于互斥的元参数,同一资源块内只能使用其中一个来声明资源的创建数量,同时声明两个就会触发上述报错。
解决方案
你不需要用count做开关,直接把创建判断逻辑合并到for_each的取值中即可,修改后的代码如下:
resource "aws_s3_bucket_object" "object" { depends_on = [aws_s3_bucket.bucket_backup] for_each = var.s3_create[1] ? local.buckets_and_folders : tomap({}) bucket = each.value.bucket_backup key = format("%s/", each.value.folder) force_destroy = true }
逻辑说明
- 当
var.s3_create[1]值为true时,for_each会读取原始的local.buckets_and_folders集合,按预期创建对应的S3对象实例 - 当
var.s3_create[1]值为false时,for_each会接收一个空的映射集合,Terraform不会创建任何该资源的实例,完全匹配你的开关需求
注意事项
如果你的local.buckets_and_folders是Set类型而非Map类型,空值需要对应改为toset([]),保证类型一致即可。
内容的提问来源于stack exchange,提问作者bhamichi
相关产品推荐
相关产品推荐

