【问题标题】:How can I do a dynamic condition inside module?如何在模块内进行动态条件?
【发布时间】:2022-01-14 14:23:39
【问题描述】:

使用 Terraform,我在尝试和阅读文档时的印象是 dynamicmodule 不兼容。如果是这种情况,如果var.enable_new_relic 为假,我怎么能做到这种动态条件,我不会包含 aws layer 指令?

module "lambda" {
  source = "git@github.com:foobar"

  for_each = local.lambda_configs

  function_name                  = "${local.name}-${each.key}"
  description                    = "foo-builder ${var.name} ${each.key}"
  runtime                        = each.value.runtime
  handler                        = var.enable_new_relic ? local.NEW_RELIC_LAYER_HANDLER : each.value.handler

  ...

  dynamic "new_relic" {
    for_each = var.enable_new_relic ? [1]: []
    content {
      layers = var.new_relic_lambda_layers
    }
  }

【问题讨论】:

  • 该逻辑需要在模块本身内部。

标签: terraform


【解决方案1】:

dynamic 类型的块仅用于生成嵌套块,module 块内没有任何嵌套块,因此 dynamic 块在那里也无效。

如果new_relic 是您在模块内使用variable "new_relic" 块声明的变量,那么您可以使用a conditional expression 有条件地为该变量赋值:

module "lambda" {
  source   = "git@github.com:foobar"
  for_each = local.lambda_configs
  
  # ...
  new_relic = var.enable_new_relic ? {
    layers = var.new_relic_lambda_layers
  } : null
}

这会根据var.enable_new_relic 的值将对象值或null 值分配给new_relic 变量。这是以下等效项的条件版本,如果您想始终设置该变量,您可以编写它:

  new_relic = {
    layers = var.new_relic_lambda_layers
  }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-12
    • 1970-01-01
    • 2019-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多