2017-03-05 22 views
2

私はterraformを初めて使い、3 ec2インスタンスを作成しました。私は6 ebsのボリュームを作成しました。どのようにして3つのインスタンスのそれぞれに2つのebsボリュームを付けるのですか?Terraform ebs volume

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

エラー:

  • #2 aws_volume_attachment.ebs_att: "DEVICE_NAME": "volume_id"::必要なフィールドが
  • aws_volume_attachment.ebs_att#2に設定されていない必須フィールドが
  • に設定されていません
  • aws_volume_attachment.ebs_att#2:無効または不明キー:ボリューム
  • aws_volume_attachment.ebs_att#4: "device_name":必須フィールドが設定されていません
  • #4 aws_volume_attachment.ebs_att
  • : "volume_id":必要なフィールドは#4 aws_volume_attachment.ebs_att
  • に設定されていません:無効またはキー不明:ボリューム
  • aws_volume_attachment.ebs_att#3: "DEVICE_NAME":必要なフィールドではありません"volume_id"::必要なフィールドが設定されていない
  • aws_volume_attachment.ebs_att#3:無効または不明なキー:音量
  • aws_volume_attachment.ebs_att#0: "volume_id":必要なフィールド
  • aws_volume_attachment.ebs_att#3を設定します設定されていません
  • 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既存のEC2に上記を追加すると、各インスタンスに2つのボリュームを付加する追加コードを知りたい場合は、 – Swat

答えて

2

注:このメソッドは破壊し、サーバを再作成します。これがあなたに受け入れられない場合は、「音量付加」方法を使用してください(受け入れられた回答を参照)。

この問題にアプローチする方法の1つは、ebsボリュームを直接インスタンスリソースに接続することです。

これは、各サーバー構成に「ebs_block_device」要素を追加し、次にterraform applyを実行することで実行できます。たとえば、あなたは、次のようになりますし2つのEBSブロックデバイスを追加することを望んだ各サーバのリソース:terraform planを実行し

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 applyを実行して、追加のボリュームを持つサーバーを再構築してください。

Check out the documentation around ebs_block_device and aws_instance here.

+0

、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ボリュームを接続するためにcountを使う方法 – Swat