首页 > 解决方案 > “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}

要求:

  1. 仅当= s3时才必须创建此kinesis_firehose_to_s3资源fh_destination
count = "${var.fh_destination == s3 ? 1 : 0}
  1. 它必须为每个实体创建此资源:
for_each = { for entity in var.entities : entity.name => entity}

标签: terraformterraform-provider-aws

解决方案


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相同的结果。0count


推荐阅读