元参数"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
}

问题:在创建地形资源时,我无法使用以下两种语法的组合。。但是单独工作。

count = "${var.fh_destination == s3 ? 1 : 0}" 
for_each = {for entity in var.entities : entity.name => entity}

要求:

  1. 只有当fh_destination=s3时,它才必须创建此kinesis_firehose_to_s3资源
count = "${var.fh_destination == s3 ? 1 : 0}
  1. 它必须为每个实体创建此资源:
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的每个元素有一个元素,但否则结果将为零个元素,因此为零个实例,从而创建与条件count0臂相同的结果。

最新更新