2017-03-05 84 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