具有可变数量操作的 Terraform Glue 触发器

Terraform Glue trigger with variable number of actions

我正在为 AWS Glue 触发器创建 Terraform 资源块,如下所示:

resource "aws_glue_trigger" "first_trigger" {
  name          = "first_trigger"
  type          = "CONDITIONAL"
  workflow_name = "first_workflow"
  enabled       = true
  actions {
    job_name  = "job_a"
  }
  actions {
    job_name  = "job_b"
  }
  actions {
    job_name  = "job_c"
  }
}

如您所见,块中有多个 actions,在此示例中为三个。在某些时候,我想让资源块更通用,涵盖几个 Glue 触发器。当我这样做时,不同情况下的动作数量会有所不同。所以我需要找到一种方法让它们可变。

我试过这个:

resource "aws_glue_trigger" "first_trigger" {
  name          = "first_trigger"
  type          = "CONDITIONAL"
  workflow_name = "first_workflow"
  enabled       = true
  actions {
    count = length(var.jobs)
    job_name = "${var.jobs[count.index]["name"]}"
  }
}

上面的 var jobs 指的是一个 .tfvars 文件,如下所示:

jobs = [
   {name="job_a"}
  ,{name="job_b"}
  ,{name="job_c"}
]

但这不起作用。 Terraform 不喜欢我尝试概括动作创建的方式。它给我错误 Error: Reference to "count" in non-counted context

是否有其他方法可以在我的 aws_glue_trigger 资源块中进行可变数量的操作? count 以外的其他类型的迭代器可以使它工作吗?

您正在寻找 dynamic block。它看起来像这样(未经测试):

resource "aws_glue_trigger" "first_trigger" {
  name          = "first_trigger"
  type          = "CONDITIONAL"
  workflow_name = "first_workflow"
  enabled       = true
  
  dynamic "actions" {
    for_each = var.jobs
    content {
      job_name = actions.value.name
    }
  }
}

请注意语法有点奇怪。与资源中的 for_each 不同,您使用 each.keyeach.value 访问值,在动态块中 each 被块名称替换(在这种情况下,actions).这样您就可以嵌套动态块而不会 each 变得不明确。