如何使用 Terraform 创建不同大小的 EBS 卷并附加到单个 EC2 实例?

问题描述

我正在创建多个不同大小的卷,如下所示:

chart.update(2,3.14159)
chart.update(2,2.71828)

我会像上面一样创建多个卷。现在,我想将它附加到单个 EC2 实例。 在下面,资源 ec2_production 我正在定义 root 卷 的配置,即 大小为 40GB,卷类型为 gp2。现在我想再创建 5 个 5 卷,如上述资源 ebs_volume 中提到的那样,并将它们附加到我下面定义的 ec2_production 实例

2

这是 EBS_volume_attachment 的资源:

我不确定如何传递设备名称以及如何将所有 EBS 卷附加到我的 AWS 实例:

resource "aws_ebs_volume" "ebs_volume" {
  for_each = {
    0 = 100
    1 = 50
    2 = 20
    3 = 20
    4 = 50
  }
  availability_zone = var.availability_zone
  size              = each.value
  type              = "gp2"
}

我的 variable.tf 文件

resource "aws_instance" "ec2_production" {
  count         = "${var.ec2_instance_count}"
  ami           = "${var.ami}"
  availability_zone = var.availability_zone
  instance_type = "${var.ec2_instance_type}"
  subnet_id = aws_subnet.subnet.id
  associate_public_ip_address = true
  vpc_security_group_ids = [aws_security_group.security_group_access_internet.id]
  key_name = "key-pair"
  ebs_block_device {
    device_name = "/dev/sda1"
    volume_type = "gp2"
    volume_size = 40
  }
  tags = {
    Name = var.tag
  }
}

有什么方法可以将所有卷附加到我上面创建的每个设备并附加到我的 EC2 实例?

解决方法

首先,我认为您的 PARTITION BY 在问题中的名称有误,但这可能只是复制和粘贴错误,应该是 GROUP BY 而不是 aws_ebs_volume

第二个在您的 resource "aws_ebs_volume" "ebs_volume" 中,您错误地访问了 resource "aws_ebs_volume" "for_each" 索引,您想要执行 aws_volume_attachment,即在 {{1} 处访问 ebs_volume 的列表} 位置,然后获取属性 volume_id = aws_ebs_volume.ebs_volume[count.index].id

第三,ebs_volume 中的 count.index 迭代次数过多,id 可以修复。

因此您更新后的 count 代码应如下所示:

aws_volume_attachment
,

您需要定义 EBS 到实例/实例的附件。 之后,您需要安装它们。 我有一个小的 cheatsheet 用于您可能使用的一个 Instance-EBS。