2017-03-05 2 views
2

Ich bin neu in Terraform, habe 3 ec2 ​​Instanzen erstellt, und ich habe 6 ebs Volumen erstellt. Wie hängen wir zwei ebs-Volumes an jede der drei Instanzen an?Terraform ebs Volumen

#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)}]" 
} 

Fehler:

  • aws_volume_attachment.ebs_att # 2: "device_name": erforderliches Feld nicht
  • aws_volume_attachment.ebs_att # 2 gesetzt ist: "volume_id": erforderliches Feld nicht gesetzt ist
  • aws_volume_attachment.ebs_att # 2:: ungültiger oder unbekannter Schlüssel: Volumen
  • aws_volume_attachment.ebs_att # 4: "device_name": erforderliches Feld nicht gesetzt ist
  • aws_volume_attachment.ebs_att # 4: "volume_id": Pflichtfeld wird nicht
  • aws_volume_attachment.ebs_att # 4: ungültig oder unbekannter Schlüssel: Volumen
  • aws_volume_attachment.ebs_att # 3: "device_name": erforderliches Feld ist nicht set
  • aws_volume_attachment.ebs_att # 3: "volume_id": erforderliches Feld nicht gesetzt ist
  • aws_volume_attachment.ebs_att # 3:: ungültiger oder unbekannter Schlüssel: Volumen
  • aws_volume_attachment.ebs_att # 0: "volume_id": Pflichtfeld ist nicht gesetzt
  • aws_volume_attachment.ebs_att # 0 : "Device_name": Pflichtfeld
  • aws_volume_attachment.ebs_att # 0 nicht gesetzt ist: ungültig oder unbekannter Schlüssel: Volumen
  • aws_volume_attachment.ebs_att # 1: "device_name": erforderliches Feld nicht gesetzt ist
  • aws_volume_attachment.ebs_att # 1: "volume_id": erforderliches Feld nicht gesetzt ist
  • aws_volume_attachment.ebs_att # 1: ungültig oder unbekannter Schlüssel: Volumen
  • aws_volume_attachment.ebs_att # 5: "volume_id": erforderliches Feld nicht gesetzt ist
  • aws_volume_attachment .ebs_att # 5: "Gerätename": erforderliches Feld ist nicht gesetzt
  • aws_volume_attachment.ebs_att # 5:: ungültiger oder unbekannter Schlüssel: Volumen
+0

Können Sie klären, was Sie fragen? 'Aber der unten stehende Code erstellt nur 2 ebs Volumen. Dieser Satz scheint unvollendet zu sein, was war das erwartete Ergebnis des Code-Snippets, das Sie eingefügt haben? Werden die verschiedenen Typen nicht korrekt angewendet? Fragen Sie nach Hilfe mit zusätzlichem Code, um ihn einer EC2-Instanz zuzuordnen? –

+0

@AnthonyNeace Ich möchte den zusätzlichen Code kennen, um 2 Volumes an jede Instanz anzuhängen – Swat

Antwort

2

Hinweis: diese Methode zerstören und die Server neu erstellen. Verwenden Sie die Methode "Datenträgeranhang" (siehe akzeptierte Antwort), wenn dies für Sie nicht akzeptabel ist.

Eine Möglichkeit, dieses Problem anzugehen und wie ich es lösen würde, besteht darin, die ebs-Volumes direkt an die Instanzressource anzuhängen.

Sie können dazu ein Element 'ebs_block_device' zu jeder Serverkonfiguration hinzufügen und dann terraform apply ausführen. Zum Beispiel kann jeder Server-Ressource Sie wünschten 2 ebs Block Geräte hinzuzufügen, zu würde wie folgt aussehen:

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

Dann terraform plan laufen, sehen, dass die Blockgeräte werden auf den Servern und den Servern hinzugefügt werden. Mit dieser Methode werden die Server zerstört und erhalten. Wenn dies akzeptabel ist, führen Sie terraform apply aus, um die Server mit den zusätzlichen Volumes neu zu erstellen.

Check out the documentation around ebs_block_device and aws_instance here.

+0

Wenn ich oben zu dem vorhandenen EC2 hinzufügen, wird EC2 neu erstellt. das habe ich nicht erwartet. Ist deine vorhandene EC2 noch da oder ersetzt? – user389955

+0

@ user389955 Ja, mit dieser Methode wird der Server neu erstellt. Ich habe meine Antwort aktualisiert, um dies zu berücksichtigen. Die beste Möglichkeit, zusätzliche Volumes hinzuzufügen, ohne den Server neu zu erstellen, besteht darin, ein anderes Volume zu definieren und einen Volume-Anhang zu verwenden, wie in der akzeptierten Antwort. –

+0

@ Mr.Budris: Danke. werde das versuchen. – user389955

0

Ich werde in diesem Format etwas tun:

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

Ich hoffe, das hilft

+0

wie würdest du mit zählung zum anhängen von ebs volumes machen? – Swat

Verwandte Themen