Terraform ebs 卷

Terraform ebs volume

我是 terraform 的新手,创建了 3 个 ec2 实例,并且创建了 6 个 ebs 卷。我们如何将 2 个 ebs 卷附加到三个实例中的每一个?

#Create 6 EBS volumes and attach 2 per instance.
resource "aws_ebs_volume" "vertica_ebs" {
        count                           = "6"
        availability_zone               = "${var.availability_zone}"
        size                            = "500"
        type                            = "st1"

       }
    }

#Attach ebs volume
resource "aws_volume_attachment" "ebs_att" {
     count = "6"
volume {
     device_name = "/dev/sdf"
     volume_id = "[${element(aws_ebs_volume.vertica_ebs.*.id, count.index)}]"
}
volume{
     device_name = "/dev/sdg"
     volume_id = "[${element(aws_ebs_volume.vertica_ebs.*.id, count.index)}]"
}
     instance_id = "[${element(aws_instance.vertica1.*.id,count.index)}]"
}

错误:

注意:此方法将销毁并重新创建服务器。如果您无法接受,请使用 'aws volume attachment' method

解决这个问题的一种方法,以及我将如何解决它,是将 ebs 卷直接附加到实例资源。

您可以通过向每个服务器配置添加一个 'ebs_block_device' 元素,然后 运行ning terraform apply 来完成此操作。例如,您希望向每个服务器资源添加 2 个 ebs 块设备,如下所示:

resource "aws_instance""example_instance"{
#INSTANCE CONFIGURATION VALUES  
    ebs_block_device{
      device_name = "/dev/sdf"
      volume_size = 500
      volume_type = "st1"
    }
    ebs_block_device{
      device_name = "/dev/sdg"
      volume_size = 500
      volume_type = "st1"
    }
}

然后运行terraform plan,看到块设备会添加到服务器和服务器中。使用此方法,服务器将被销毁并重新创建。如果可以接受,运行 terraform apply 使用额外的卷重建服务器。

Check out the documentation around ebs_block_device and aws_instance here.

我会做一些这样的格式:

resource "aws_instance" "example" {
  ami           = "${lookup(var.AMIS, var.AWS_REGION)}"
  instance_type = "t2.micro"

}

resource "aws_ebs_volume" "ebs-volume-1" {
    availability_zone = "eu-west-1a"
    size = 500
    type = "st1"
    tags {
        Name = "more volume"
    }
}

resource "aws_ebs_volume" "ebs-volume-2" {
    availability_zone = "eu-west-1a"
    size = 500
    type = "st1"
    tags {
        Name = "more volume"
    }
}

resource "aws_volume_attachment" "ebs-volume-1-attachment" {
  device_name = "/dev/sdf"
  volume_id = "${aws_ebs_volume.ebs-volume-1.id}"
  instance_id = "${aws_instance.example.id}"
}

resource "aws_volume_attachment" "ebs-volume-2-attachment" {
  device_name = "/dev/sdg"
  volume_id = "${aws_ebs_volume.ebs-volume-2.id}"
  instance_id = "${aws_instance.example.id}"
}

希望对你有所帮助