从自定义AMI创建EC2实例时,给予不同的卷标。

4

我正在使用自定义AMI创建一个具有2个卷的ec2实例。我想为这两个卷分别命名/标记,如

将vol-lab-cam-web-aue1-sda1命名为根卷, 将vol-lab-cam-web-aue1-sdb命名为另一个卷,并使用terraform进行操作。

在terraform文档中,我只能看到一个volume_tags选项。是否有任何解决此问题的方法?下面是我的示例代码:

resource "aws_instance" "web" {
ami           = "ami-0e6f18d5546ceec3d"
instance_type = "t2.micro"
volume_tags = {
  Name = "vol-lab-cam-web01-aue1a-sda1"
  }

tags = {
  Name = "HelloWorld"
  }
}

以下是我使用此命令获得的截图: sdb sda1 的截图如下:

你需要使用设备ID标记卷的原因是什么? - ydaetskcoR
是的,因为这些 AMI 有多个卷,并且有超过 100 个 EC2 实例。很难找到哪一个是根卷。 - Sohaib Mustafa
为什么需要从实例外部识别根/非根卷? - ydaetskcoR
由于有时我们需要增加非根卷的容量大小,我们不希望通过停止或分离服务器的根卷来陷入困境。 - Sohaib Mustafa
你有没有找到解决方案? - D Swartz
不是这样。相反,我需要创建一个 Lambda 函数,调用 SSM 文档来获取卷挂载点和标记到各自的卷。 - Sohaib Mustafa
2个回答

1
由于volume_tags会统一应用于启动时创建的所有设备,因此不要将其用于特定于设备的值。相反,请使用aws_ebs_volume资源来创建sdb卷,并使用aws_volume_attachment资源将其附加到实例。

aws_ebs_volume代码中,您可以为Name值输入“vol-lab-cam-web-aue1-sdb”。


当AMI有2个卷时,这并没有帮助。 - ydaetskcoR
没错,这是创建新卷并将其附加到EC2实例的解决方案。@ydaetskcoR是正确的。 - Sohaib Mustafa
1
明白了,我没有从问题中获取到那个信息。 - KJH

1

像KLH所说的,如果你在Terraform中创建了2个卷:

resource "aws_ebs_volume" "drivea" {
  availability_zone = "${var.availability_zone}"
  size              = 40

  tags = {
    Name = "HelloWorld"
  }
}

resource "aws_ebs_volume" "driveb" {
  availability_zone = "${var.availability_zone}"
  size              = 40

  tags = {
    Name = "WhaleTail"
  }
}

像这样,然后将它们附加到您的实例:
resource "aws_volume_attachment" "ebsa" {
  device_name = "/dev/sdh"
  volume_id   = "${aws_ebs_volume.drivea.id}"
  instance_id = "${aws_instance.web.id}"
}

resource "aws_volume_attachment" "ebsb" {
  device_name = "/dev/sdi"
  volume_id   = "${aws_ebs_volume.driveb.id}"
  instance_id = "${aws_instance.web.id}"
}

您的实例将附带2个带有不同标记的磁盘。如果您查看AWS控制台,则会看到具有不同标记的不同卷。

我的自定义AMI有2个卷,我不会创建新的卷来附加到EC2实例。 - Sohaib Mustafa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接