首页 > 解决方案 > 如何为 EC2、安全组和 ebs 卷进行 for_each 和 for 循环?

问题描述

我是 Terraform 的新手,想知道我是否有办法做到这一点。我想用它自己的安全组创建多个 EC2 实例,并附加不同大小和类型的卷。

module "ec2_sg" {
  source              = "../../modules/sgs"
  for_each            = var.ec2_info
  name                = each.value.name
  description         = "Security group for ${each.value.name}"
  vpc_id              = each.value.vpc
  ingress_cidr_blocks = each.value.ingress_cidr_blocks
  ingress_rules       = each.value.ingress_rules
  egress_cidr_blocks  = each.value.egress_cidr_blocks
  egress_rules        = each.value.egress_rules
}

module "ec2_instance" {
  source = "../../modules/ec2"
  for_each                    = var.ec2_info
  name                        = each.value.name
  ami                         = var.AMIS.linux_ami
  instance_type               = each.value.ec2_instance_type
  vpc_security_group_ids      = module.ec2_sg.security_group_id[each.key]
}

resource "aws_ebs_volume" "volume_disk" {
  for_each          = var.ec2_info
  type              = each.value.type
  iops              = each.value.iops
  availability_zone = each.value.availability_zone
  size              = each.value.size
}

resource "aws_volume_attachment" "volume_disk" {
  for_each    = var.ec2_info
  device_name = each.value.device_name
  volume_id   = aws_ebs_volume.data1[each.key].id
  instance_id = module.ec2_instance.id[each.key]
}

这是我迄今为止尝试过的,但我无法让音量部分正常工作。ec2_info 包含有关我要创建的 2 个不同 EC2 实例的信息。我应该做什么样的数据操作来实现这一点?您认为对磁盘使用单独的变量可以实现这一点吗?就像是:

resource "aws_ebs_volume" "volume_disk" {
  for_each          = var.disks_info
  type              = each.value.type
  iops              = each.value.iops
  availability_zone = each.value.availability_zone
  size              = each.value.size
}

resource "aws_volume_attachment" "volume_disk" {
  for_each    = var.disks_info
  device_name = each.value.device_name
  volume_id   = aws_ebs_volume.data1[each.key].id
  instance_id = module.ec2_instance.id[each.key]
}

但如果我这样做呢?如何确保每个磁盘都连接到预期的 EC2 实例?谢谢你。

标签: terraformterraform-provider-aws

解决方案


您可以尝试使用“count”参数。

https://www.terraform.io/docs/language/meta-arguments/count.html


推荐阅读