Terraform for_中的条件语句围绕弹性IP循环

Terraform for_中的条件语句围绕弹性IP循环,terraform,Terraform,我有以下代码,我希望有一个条件,只有当实例是公共子网的一部分时(或者如果需要,基于布尔值),才会创建弹性IP。这是我目前使用的代码,但我不希望它为私有子网上的资源创建弹性IP: locals { instances_beta = { my-ec2 = { name = "myec2", ami = "ami-029e27fb2fc8ce9d8", instancety

我有以下代码,我希望有一个条件,只有当实例是公共子网的一部分时(或者如果需要,基于布尔值),才会创建弹性IP。这是我目前使用的代码,但我不希望它为私有子网上的资源创建弹性IP:

locals {
  instances_beta = {
    my-ec2 = {
      name           = "myec2",
      ami            = "ami-029e27fb2fc8ce9d8",
      instancetype   = "t3.xlarge"
      environment    = "Beta",
      securitygroups = [var.mysg],
      subnetid       = var.public-a,
      elasticip      = true
    }
  }
}

resource "aws_instance" "beta-instance" {
  for_each               = local.instances_beta
  ami                    = each.value.ami
  instance_type          = each.value.instancetype
  subnet_id              = each.value.subnetid
  key_name               = "mykey"
  vpc_security_group_ids = each.value.securitygroups

  tags = {
    Name        = each.value.name
    Environment = each.value.environment
  }
}

resource "aws_eip" "beta-eip" {
  for_each = local.instances_beta
  instance = aws_instance.beta-instance[each.key].id
  vpc      = true
}

听起来计数是做类似事情的最好方法,但我不能这样做,因为我已经在使用for_each来实现资源创建。我试图用嵌套for循环来实现这一点,但我不太清楚如何获得正确的语法,或者这是否是最好的方法。作为参考,我在上面找到的最好的资源就是这里的每个条件:

您可以使用
For
循环来创建过滤映射,例如:

for_each = { 
  for key, value in local.instances_beta: key => value if value.subnetid == var.public-a 
}
它将过滤
local.instances_beta
,并在
subnetid
等于
var.public-a
的位置保留项目。您可以根据需要调整条件


.

您可以使用
for
循环来创建过滤映射,例如:

for_each = { 
  for key, value in local.instances_beta: key => value if value.subnetid == var.public-a 
}
它将过滤
local.instances_beta
,并在
subnetid
等于
var.public-a
的位置保留项目。您可以根据需要调整条件