Terraform conditional block based on environment

我的未来我决定 提交于 2019-12-03 22:36:37

In the current terraform, the if statement is only a value and can not be used for the block.

There is a workaround in this case. You can set the enabled attribute of the access_log block to false. Note that this is not a general solution but can only be used with the access_log block.

access_logs {
    bucket  = "my-bucket"
    prefix  = "${var.environment_name}-alb"
    enabled = "${var.environment_name == "production" ? true : false }"
}

See also:

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] : [] 
  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.

Expanding on Juho Rutila's answer as it's too much to fit in a comment.

This is possible using dynamic blocks from v0.12, but I found the properties had to be included in a nested content block. The for_each statement is also a bit tricky, so I found it sensible to extract that into a local to make the important stuff more readable:

locals {
  isProd = var.environment_name == "production" ? [1] : []

  // Not necessary, but just illustrating that the reverse is possible
  isNotProd = var.environment_name == "production" ? [] : [1]
}

dynamic "access_logs" {
  for_each = local.isProd
  content {
    bucket  = "my-bucket"
    prefix  = "${var.environment_name}-alb"
  }
}

You can read more about dynamic blocks here: https://www.terraform.io/docs/configuration/expressions.html#dynamic-blocks

Conditionals in terraform are currently only to be used to determine a value, not to be used as an if statement wrapping a block.

And you can also use conditionals to determine a value based on some logic.

https://www.terraform.io/docs/configuration/interpolation.html#conditionals

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!