Amazon ec2 Terraform:如何在子网的aws_lb内循环aws_实例

Amazon ec2 Terraform:如何在子网的aws_lb内循环aws_实例,amazon-ec2,terraform,aws-load-balancer,Amazon Ec2,Terraform,Aws Load Balancer,我有以下定义实例的Terraform变量 variable "instance_types" { default = { k8_east_1_control_plane = { count = 1 role = "control-plane" ami = "ami-xxx"

我有以下定义实例的Terraform
变量

variable "instance_types" {

  default = {
    k8_east_1_control_plane = {
      count                  = 1
      role                   = "control-plane"
      ami                    = "ami-xxx"
      instance_type          = "t2.large"
      iam_instance_profile   = "xxx-user"
      subnet_id              = "subnet-xxx-0"
    }
    k8_east_2_control_plane = {
      count                  = 3
      role                   = "contro-plane"
      ami                    = "ami-xxx"
      instance_type          = "t2.large"
      iam_instance_profile   = "xxx-user"
      subnet_id              = "subnet-xxx-1"
    }
    ...
   }
我有
N
许多
aws\u实例
(下面的示例)

问题:如何循环这些
aws\U实例
以从
角色
类型的“控制平面”填充
子网

伪代码中的目标,传统的for循环

resource "aws_lb" "k8s_load_balancer" {

  depends_on = [aws_instance.k8s-node]

  name               = "k8_load_balancer"
  load_balancer_type = "network"

  dynamic "subnet_mapping" {

  for(aws_instance instance : aws_instance.k8s-node) {

    if(instance.role.equls("control-plane")){

      subnet_mapping {
        subnet_id            = instance.subnet_id
        private_ipv4_address = instance.private_ip
      }
    }
  }
}

由于您的
var.instance_类型
在您的
aws_实例
和动态块中都使用,因此应该可以执行以下操作:

dynamic "subnet_mapping" {

    for_each = { for key, value in variable.instance_types:
                   key => {
                      subnet_id = value.subnet_id
                   } if value.role == "control-plane"  
               }

    content {
      subnet_id            = subnet_mapping.value.subnet_id
      private_ipv4_address = aws_instance.k8s-node[subnet_mapping.key].private_ip
    }
    
}


马辛又来救我了!感谢you@stackoverflow没问题。很高兴它成功了:-)
resource "aws_lb" "k8s_load_balancer" {

  depends_on = [aws_instance.k8s-node]

  name               = "k8_load_balancer"
  load_balancer_type = "network"

  dynamic "subnet_mapping" {

  for(aws_instance instance : aws_instance.k8s-node) {

    if(instance.role.equls("control-plane")){

      subnet_mapping {
        subnet_id            = instance.subnet_id
        private_ipv4_address = instance.private_ip
      }
    }
  }
}
dynamic "subnet_mapping" {

    for_each = { for key, value in variable.instance_types:
                   key => {
                      subnet_id = value.subnet_id
                   } if value.role == "control-plane"  
               }

    content {
      subnet_id            = subnet_mapping.value.subnet_id
      private_ipv4_address = aws_instance.k8s-node[subnet_mapping.key].private_ip
    }
    
}