Terraform使用aws_s3_bucket_logging资源时遇'Unsupported Block type'错误
问题解决:Terraform AWS Provider V4 S3日志配置错误
错误原因
你在独立的aws_s3_bucket_logging资源中嵌套了dynamic "logging"块,但该资源不支持这种嵌套块结构——旧版aws_s3_bucket资源内的logging嵌套块语法,不适用于独立的aws_s3_bucket_logging资源,这是导致Unsupported Block type错误的核心原因。
修复方案
无需修改现有locals.tf和variables.tf,直接调整aws_s3_bucket_logging资源的配置逻辑,利用for_each绑定local.logging数组来动态控制资源创建:
resource "aws_s3_bucket" "bucket" { bucket = local.bucket_name tags = local.tags force_destroy = var.force_destroy hosted_zone_id = var.hosted_zone_id } resource "aws_s3_bucket_logging" "logging" { # 当local.logging为空数组时,该资源不会创建;有元素时按元素配置 for_each = local.logging bucket = aws_s3_bucket.bucket.id target_bucket = each.value["target_bucket"] target_prefix = each.value["target_prefix"] }
补充说明
在Terraform AWS Provider V4版本中,aws_s3_bucket_logging资源的正确语法是直接在资源层级设置target_bucket和target_prefix参数,不需要任何嵌套块。原代码的错误在于沿用了旧版aws_s3_bucket内的配置习惯,混淆了不同资源的语法规则。
内容的提问来源于stack exchange,提问作者at356
相关产品推荐
相关产品推荐

