Is it possible to turn the access_logs block on and off via the environment_name variable?

jmreicha picture jmreicha · Feb 25, 2017 · Viewed 49.1k times · Source

I'm looking at using the new conditionals in Terraform v0.11 to basically turn a config block on or off depending on the evnironment.

Here's the block that I'd like to make into a conditional, if, for example I have a variable to turn on for production.

access_logs {
    bucket = "my-bucket"
    prefix = "${var.environment_name}-alb"
}

I think I have the logic for checking the environment conditional, but I don't know how to stick the above configuration into the logic.

"${var.environment_name == "production" ? 1 : 0 }"

Is it possible to turn the access_logs block on and off via the environment_name variable? If this is not possible, is there a workaround?

Answer

Juho Rutila picture Juho Rutila · Jul 17, 2019

One way to achieve this with TF 0.12 onwards is to use dynamic blocks:

dynamic "access_logs" {
  for_each = var.environment_name == "production" ? [var.environment_name] : []
  content {
    bucket  = "my-bucket"
    prefix  = "${var.environment_name}-alb"
  }
}

This will create one or zero access_logs blocks depending on the value of var.environment_name.