Terraform 0.12模块中的可选资源

时间:2019-09-12 13:54:34

标签: terraform terraform0.12+

我将地形从0.11迁移到0.12。我有一个模块,该模块应设置AWS SQS队列,还可以设置死信队列。

我的仓库是here

我对队列资源有以下条件:

resource "aws_sqs_queue" "regular_queue_with_dl" {
  count = var.attach_dead_letter_config ? 1 : 0

  redrive_policy = var.attach_dead_letter_config ? data.template_file.regular_queue_redrive_policy[count.index].rendered : null
...
}

在第一次运行时,attach_dead_letter_config=true使用DLQ创建了队列,但是当我要删除DLQ(attach_dead_letter_config=false)时,在运行Terraform Plan时出现了问题:

Error: Invalid index

  on modules/sqs/sqs.tf line 67, in resource "aws_sqs_queue" "regular_queue_with_dl":
  67:   redrive_policy             = var.attach_dead_letter_config ? data.template_file.regular_queue_redrive_policy[count.index].rendered : null
    |----------------
    | count.index is 0
    | data.template_file.regular_queue_redrive_policy is empty tuple

在模块中创建此类可选资源的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

基于资源的命名方式,这看起来是Terraform 0.11解决方案的示例,该解决方案具有两个resource值相反的count块,因此一次只能创建一个以便在两组不同的参数之间进行选择。

在Terraform 0.12中不再需要该解决方法,因为您可以在不需要的情况下将redrive_policy设置为null。您还可以在Terraform 0.12中用对the templatefile function的调用来代替template_file,使所有内容保持独立:

resource "aws_sqs_queue" "regular_queue" {
  redrive_policy = var.attach_dead_letter_config ? templatefile(
    "${path.module}/redrive_policy.tmpl", {
      # (...whatever you had in "vars" in the template_file data resource...)  
    },
  ) : null
...
}

将资源参数设置为null与完全在Terraform 0.12中完全省略它相同。