terraform - “count”和“for_each”元参数是互斥的,只有一个应该用来明确要创建的资源数量
问题描述
资源代码:
resource "aws_kinesis_firehose_delivery_stream" "kinesis_firehose_to_s3" {
count = "${var.fh_destination == s3 ? 1 : 0}"
for_each = {for entity in var.entities : entity.name => entity}
name = test_firehose
}
问题:我无法在创建 terraform 资源时使用以下两种语法的组合.. 但单独工作。
count = "${var.fh_destination == s3 ? 1 : 0}"
for_each = {for entity in var.entities : entity.name => entity}
要求:
- 仅当= s3时才必须创建此
kinesis_firehose_to_s3
资源fh_destination
count = "${var.fh_destination == s3 ? 1 : 0}
- 它必须为每个实体创建此资源:
for_each = { for entity in var.entities : entity.name => entity}
解决方案
condition
当您说您真正的意思时,我假设在您的问题中count
,因为condition
不是 Terraform 中的资源元参数。
在您的count
表达式中,您根据某些条件在拥有一个实例或拥有零个实例之间进行选择。在for_each
我们通过更改映射中有多少元素来声明我们想要多少个实例时for_each
,因此等效于for_each
根据相同的条件在空映射或非空映射之间进行选择。
例如:
for_each = (
var.fh_destination == "s3" ?
{ for entity in var.entities : entity.name => entity } :
{}
)
使用上述条件表达式,如果var.fh_destination == "s3"
then 结果将具有 的每个元素一个元素,但否则结果将具有零个元素,因此零个实例,创建与条件臂var.entities
相同的结果。0
count
推荐阅读
- algorithm - 条件下树遍历和求和节点值的最优解
- asp.net - 如何在 Visual Studio 中启用即时编译
- android - 设置材质芯片图标笔触/背景颜色
- c# - HttpClient.GetAsync 在一个类中有效,但在另一类中无效
- c# - 具有 edmx (2 dbcontext) 问题的可跟踪实体
- node.js - 使用 nginx 和节点的 web-app - 哪个是 web-server?
- ios - 如何从广播更改屏幕录像机中的相机胶卷名称
- python - 如何在 python 中为多维度数据实现非线性最小二乘?
- c++ - 如何从 3 个字段中动态检索 json 值取决于传递的参数
- php - 如何在 Yii2 页面创建中使用带有多个单词的破折号