In Terraform/Terragrunt (most recent versions), I would like to add certain tags (in my example are called: Customer and Platform) taken from a variable (var.s3_bucket_configuration) for a resource (in this case an s3 bucket).
The s3 module looks like this:
resource "aws_s3_bucket" "this" {
for_each = var.s3_bucket_configuration
bucket = format("%s%s%s", var.s3_bucket_name_prefix, var.prefix_separator, each.key)
force_destroy = var.force_destroy
tags = merge(
var.tags,
{ Name = format("%s%s%s", var.s3_bucket_name_prefix, var.prefix_separator, each.key) },
# This below is the part I am looking a solution for:
{ Platform = lookup(each.value, "Platform","") },
{ Customer = lookup(each.value, "Customer","") }
)
}
When var.s3_bucket_configuration looks like this (it is obtained from some .json files but this is not relevant):
#from terraform/terragrunt console
> var.s3_bucket_configuration
{
"bucket_1" = {
"acl" = "log-delivery-write"
}
"bucket_2" = {
"description" = "Description bucket_2"
"mfa_delete_enabled" = false
"object_ownership" = "BucketOwnerEnforced"
"sse_algorithm" = "AES256"
"versioning_enabled" = false
#tags
"Customer" = "Customer_bucket_2"
"Platform" = "Platform_bucket_2"
the terraform plan outputs as expected. I mean the tags "Customer" and "Platform" are added:
# aws_s3_bucket.this["bucket_2"] will be created
+ resource "aws_s3_bucket" "this" {
+ acceleration_status = (known after apply)
+ acl = (known after apply)
+ arn = (known after apply)
+ bucket = "bucket_5"
+ bucket_domain_name = (known after apply)
+ bucket_regional_domain_name = (known after apply)
+ force_destroy = false
+ tags = {
+ "Confidentiality" = "C3"
+ "Customer" = "Customer_bucket_2"
+ "Environment" = "PREPROD"
+ "Name" = "bucket_2"
+ "Platform" = "Platform_bucket_2"
}
+ tags_all = (known after apply)
+ website_domain = (known after apply)
+ website_endpoint = (known after apply)
}
But I made var.s3_bucket_configuration look like this below (I added the desired key tags, Customer and Platform, in a map so one can tell they are tags):
> var.s3_bucket_configuration
{
"bucket_1" = {
"acl" = "log-delivery-write"
}
"bucket_2" = {
"description" = "Description bucket_2"
"mfa_delete_enabled" = false
"object_ownership" = "BucketOwnerEnforced"
"sse_algorithm" = "AES256"
"versioning_enabled" = false
"tag" = {
"Customer" = "Customer_bucket_2"
"Platform" = "Platform_bucket_2"
}
}
}
I am stuck on how to modify this part of the resource module so it can add the tags from a map in a map.
{ Platform = lookup(each.value, "Platform","") },
{ Customer = lookup(each.value, "Customer","") }
Thank you.