资源代码:
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
}
问题:在创建地形资源时,我无法使用以下两种语法的组合。。但是单独工作。
count = "${var.fh_destination == s3 ? 1 : 0}"
for_each = {for entity in var.entities : entity.name => entity}
要求:
- 只有当
fh_destination
=s3时,它才必须创建此kinesis_firehose_to_s3
资源
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"
,则结果将为var.entities
的每个元素有一个元素,但否则结果将为零个元素,因此为零个实例,从而创建与条件count
的0
臂相同的结果。