2017-03-05 78 views
2

我是terraform的新手,已经创建了3个ec2实例,并且我创建了6个ebs体积。我们如何将2 ebs卷添加到三个实例中的每一个?Terraform 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: “DEVICE_NAME”:需要字段未设置
  • aws_volume_attachment.ebs_att#2: “volume_id”:需要字段未设置
  • aws_volume_attachment.ebs_att#2:无效或未知密钥:卷
  • aws_volume_attachment.ebs_att#4:“device_name”:未设置必填字段
  • aws_volume_attachment.ebs_att#4: “volume_id”:需要字段未设置
  • aws_volume_attachment.ebs_att#4:4:无效或未知项:体积
  • aws_volume_attachment.ebs_att#3: “DEVICE_NAME”:需要字段不是设置
  • aws_volume_attachment.ebs_att#3: “volume_id”:需要字段未设置
  • aws_volume_attachment.ebs_att#3::无效或未知项:体积
  • aws_volume_attachment.ebs_att#0: “volume_id”:需要字段未设定
  • aws_volume_attachment.ebs_att#0 : “DEVICE_NAME”:需要字段未设置
  • aws_volume_attachment.ebs_att#0:无效或未知项:体积
  • aws_volume_attachment.ebs_att#1: “DEVICE_NAME”:需要字段未设置
  • aws_volume_attachment.ebs_att #1: “volume_id”:需要字段未设置
  • aws_volume_attachment.ebs_att#1:无效或未知项:体积
  • aws_volume_attachment.ebs_att#5: “volume_id”:需要字段未设置
  • aws_volume_attachment .ebs_att#5:“device_name”:必填字段未设置
  • aws_volume_attachment.ebs_att#5:无效的或未知的关键:量
+0

你能澄清你问什么? '但是下面的代码只创建了2 ebs的音量.'这句话似乎还没有完成,你粘贴的代码片段的预期结果是什么?它不正确地应用不同的类型吗?您是否需要其他代码的帮助来将其与EC2实例相关联? –

+0

@AnthonyNeace我想知道额外的代码将2个卷附加到每个实例 – Swat

回答

2

注:此方法会破坏并重新创建服务器。如果这不能让你接受,请使用'音量附件'方法(请参阅接受的答案)。

解决此问题的一种方法以及我如何解决这个问题,是将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.

+0

如果我添加上面的现有EC2,EC2将被重新创建。这不是我所期望的。你现有的EC2还在那里还是被替换? – user389955

+0

@ user389955是的,使用这种方法服务器将被重新创建。我已经更新了我的答案以反映这一点。在不重新创建服务器的情况下添加额外卷的最佳方式是定义另一个卷并使用卷附件,如接受的答案中所述。 –

+0

@ Mr.Budris:谢谢。会尝试。 – user389955

0

我会做一些这种格式:

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

我希望帮助

+0

如何计算附加ebs的数量 – Swat