terraform - Terraform 0.12 模块中的可选资源
问题描述
我将 terraform 从 0.11 迁移到 0.12。我有一个模块,它应该配置 AWS SQS 队列和可选的死信队列。
我的回购在这里
我对队列资源有以下条件:
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
...
}
在使用 DLQ 创建队列时首次运行attach_dead_letter_config=true
,但当我想删除 DLQ ( attach_dead_letter_config=false
) 时,当 terraform 计划运行时出现问题:
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
在模块中创建此类可选资源的正确方法是什么?
解决方案
根据资源的命名方式,这看起来像是 Terraform 0.11 解决方法的一个示例,该解决方法有两个resource
具有相反count
值的块,因此一次只创建一个块,以便在两组不同的参数之间进行选择。
Terraform 0.12 不再需要该解决方法,因为您可以在不需要的情况下设置redrive_policy
为。null
您还可以替换为对 Terraform 0.12 中的函数template_file
的调用,从而保持一切自包含:templatefile
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 中完全省略它相同。
推荐阅读
- python - 在不加载到内存的情况下在 dask 中映射和合并
- java - Spring Boot Maven 依赖项导致错误
- c# - 返回asp工具的日期?
- c - 如何使用 execvp() & fork()
- ios - 更新 admob 后找不到框架 UserMessagingPlatform
- r - 使用 read_excel 自动删除列名中的所有空格
- javascript - Flutter web app中注入Android对象的Android webview调用方法
- excel - 使用多个条件在表中查找值
- java - 我们如何检查何时在 JVM 中采用未来保证的 SafePoint?
- google-ads-api - 我可以从谷歌广告 api 改变视频广告系列吗?