Home > other >  Terraform "Unsupported Block type" error when using aws_s3_bucket_logging resource
Terraform "Unsupported Block type" error when using aws_s3_bucket_logging resource

Time:09-22

We are currently in the process of editing our core s3 module to adapt to the new V4.0 changes that terraform released -

Existing main.tf

  bucket = local.bucket_name

  tags = local.tags

  force_destroy = var.force_destroy

  dynamic "logging" {
    for_each = local.logging
    content {
      target_bucket = logging.value["target_bucket"]
      target_prefix = logging.value["target_prefix"]
    }
  }
....
}

I am trying to convert this to use the resource aws_s3_bucket_logging as below

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" {
  bucket = aws_s3_bucket.bucket.id

  dynamic "logging" {
    for_each = local.logging
    content {
      target_bucket = logging.value["target_bucket"]
      target_prefix = logging.value["target_prefix"]
    }
}

locals.tf

locals {
  logging = var.log_bucket == null ? [] : [
    {
      target_bucket = var.log_bucket
      target_prefix = var.log_prefix
    }
  ]
....

variables.tf

  type        = string
  default     = null
  description = "The name of the bucket that will receive the log objects."
}

variable "log_prefix" {
  type        = string
  default     = null
  description = "To specify a key prefix for log objects."
}

And I receive the error

Error: Unsupported block type

Blocks of type "logging" are not expected here.

Any help is greatly appreciated. TA

CodePudding user response:

If you check TF docs aws_s3_bucket_logging, you will find that aws_s3_bucket_logging does not have any block nor attribute called logging. Please have a look at the docs linked, and follow the examples and the documentation.

CodePudding user response:

Although, Is it the right usage of the resource if i remove the locals and simplify the resource to be as below? All am i trying to is pass null as default value

resource "aws_s3_bucket_logging" "logging" {
  bucket = aws_s3_bucket.bucket.id

  target_bucket = var.log_bucket
  target_prefix = var.log_prefix
}
  • Related