【问题标题】:Terraform ebs volumeTerraform ebs 卷
【发布时间】:2017-07-25 10:45:24
【问题描述】:

我是 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.ebs_att #2:“设备名称”:未设置必填字段
  • aws_volume_attachment.ebs_att #2:“volume_id”:未设置必填字段
  • aws_volume_attachment.ebs_att #2: : 无效或未知密钥:volume
  • aws_volume_attachment.ebs_att #4:“device_name”:未设置必填字段
  • aws_volume_attachment.ebs_att #4:“volume_id”:未设置必填字段
  • aws_volume_attachment.ebs_att #4: : 无效或未知密钥:volume
  • aws_volume_attachment.ebs_att #3:“device_name”:未设置必填字段
  • aws_volume_attachment.ebs_att #3:“volume_id”:未设置必填字段
  • aws_volume_attachment.ebs_att #3: : 无效或未知密钥:volume
  • aws_volume_attachment.ebs_att #0:“volume_id”:未设置必填字段
  • aws_volume_attachment.ebs_att #0:“device_name”:未设置必填字段
  • aws_volume_attachment.ebs_att #0: : 无效或未知密钥:volume
  • aws_volume_attachment.ebs_att #1:“设备名称”:未设置必填字段
  • aws_volume_attachment.ebs_att #1:“volume_id”:未设置必填字段
  • aws_volume_attachment.ebs_att #1: : 无效或未知密钥:volume
  • aws_volume_attachment.ebs_att #5:“volume_id”:未设置必填字段
  • aws_volume_attachment.ebs_att #5:“device_name”:未设置必填字段
  • aws_volume_attachment.ebs_att #5: : 无效或未知密钥:volume

【问题讨论】:

  • 你能澄清你在问什么吗? But the below code is creating only 2 ebs volumes.这句话好像没写完,你粘贴的代码sn-p的预期结果是什么?它没有正确应用不同的类型吗?您是否正在寻求其他代码的帮助以将其与 EC2 实例相关联?
  • @AnthonyNeace 我想知道将 2 个卷附加到每个实例的附加代码

标签: terraform


【解决方案1】:

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

解决此问题的一种方法以及解决方法是将 ebs 卷直接附加到实例资源。

您可以通过将“ebs_block_device”元素添加到每个服务器配置,然后运行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.

【讨论】:

  • 如果我将上述内容添加到现有的 EC2 中,将重新创建 EC2。这不是我所期望的。您现有的 EC2 是否仍然存在或已被替换?
  • @user389955 是的,使用此方法将重新创建服务器。我已经更新了我的答案以反映这一点。在不重新创建服务器的情况下添加附加卷的最佳方法是定义另一个卷并使用卷附件,如已接受的答案中所示。
  • @Budris 先生:谢谢。会试试的。
【解决方案2】:

我会以这种格式做一些事情:

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}"
}

希望对你有帮助

【讨论】:

  • 您将如何处理附加 ebs 卷的计数
猜你喜欢
  • 1970-01-01
  • 2017-08-12
  • 2018-05-06
  • 2019-04-06
  • 1970-01-01
  • 1970-01-01
  • 2021-09-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多