Webコンソール以外でEC2をローンチする際にエフェメラルディスク(インスタンスストア)が付いてしまう仕様があるようです。
少なくともCLIとTerraformではこの現象が起きます。
この現象の解消方法は現在のところBlockDeviceMappingのエフェメラルディスクに片っ端からNoDeviceを指定する他ありません。
以下にCLIとTerraformでの例を記載します。
#CLI
BlockDeviceMapping用のjsonファイルを以下のように記述します。
block_device_mappings.json
[
{
"DeviceName": "/dev/sda1",
"Ebs": {
"VolumeSize": 50,
"DeleteOnTermination": true,
"VolumeType": "gp2"
}
},
{"DeviceName": "xvdca", "NoDevice": ""},
{"DeviceName": "xvdcb", "NoDevice": ""},
{"DeviceName": "xvdcc", "NoDevice": ""},
{"DeviceName": "xvdcd", "NoDevice": ""},
{"DeviceName": "xvdce", "NoDevice": ""},
{"DeviceName": "xvdcf", "NoDevice": ""},
{"DeviceName": "xvdcg", "NoDevice": ""},
{"DeviceName": "xvdch", "NoDevice": ""},
{"DeviceName": "xvdci", "NoDevice": ""},
{"DeviceName": "xvdcj", "NoDevice": ""},
{"DeviceName": "xvdck", "NoDevice": ""},
{"DeviceName": "xvdcl", "NoDevice": ""},
{"DeviceName": "xvdcm", "NoDevice": ""},
{"DeviceName": "xvdcn", "NoDevice": ""},
{"DeviceName": "xvdco", "NoDevice": ""},
{"DeviceName": "xvdcp", "NoDevice": ""},
{"DeviceName": "xvdcq", "NoDevice": ""},
{"DeviceName": "xvdcr", "NoDevice": ""},
{"DeviceName": "xvdcs", "NoDevice": ""},
{"DeviceName": "xvdct", "NoDevice": ""},
{"DeviceName": "xvdcu", "NoDevice": ""},
{"DeviceName": "xvdcv", "NoDevice": ""},
{"DeviceName": "xvdcw", "NoDevice": ""},
{"DeviceName": "xvdcx", "NoDevice": ""},
{"DeviceName": "xvdcy", "NoDevice": ""},
{"DeviceName": "xvdcz", "NoDevice": ""}
]
そして、以下のようにCLIを実行します。
ec2_run-instances.sh
aws ec2 run-instances \
--image-id ami-12345678 \
--key-name example \
--instance-type c3.large \
--subnet-id subnet-12345678 \
--iam-instance-profile Arn=arn:aws:iam::123456789123:role/example-role \
--security-group-ids sg-12345678 \
--block-device-mappings file://block_device_mappings.json \
--desable-api-termination
#Terraform
TerraformもVer0.8からNoDeviceをサポートしています。
tfファイルには以下のように記述します。
aws_instance.tf
resource "aws_instance" "example-instance" {
ami = "ami-12345678"
instance_type = "c3.large"
key_name = "example"
subnet_id = "${aws_subnet.example.id}"
security_groups = ["${aws_security_group.example.id}"]
disable_api_termination = true
tags {
Name = "example-instance"
}
iam_instance_profile = "example-role"
root_block_device {
volume_type = "gp2"
volume_size = 50
}
ephemeral_block_device { device_name = "xvdca" no_device = "true" }
ephemeral_block_device { device_name = "xvdcb" no_device = "true" }
ephemeral_block_device { device_name = "xvdcc" no_device = "true" }
ephemeral_block_device { device_name = "xvdcd" no_device = "true" }
ephemeral_block_device { device_name = "xvdce" no_device = "true" }
ephemeral_block_device { device_name = "xvdcf" no_device = "true" }
ephemeral_block_device { device_name = "xvdcg" no_device = "true" }
ephemeral_block_device { device_name = "xvdch" no_device = "true" }
ephemeral_block_device { device_name = "xvdci" no_device = "true" }
ephemeral_block_device { device_name = "xvdcj" no_device = "true" }
ephemeral_block_device { device_name = "xvdck" no_device = "true" }
ephemeral_block_device { device_name = "xvdcl" no_device = "true" }
ephemeral_block_device { device_name = "xvdcm" no_device = "true" }
ephemeral_block_device { device_name = "xvdcn" no_device = "true" }
ephemeral_block_device { device_name = "xvdco" no_device = "true" }
ephemeral_block_device { device_name = "xvdcp" no_device = "true" }
ephemeral_block_device { device_name = "xvdcq" no_device = "true" }
ephemeral_block_device { device_name = "xvdcr" no_device = "true" }
ephemeral_block_device { device_name = "xvdcs" no_device = "true" }
ephemeral_block_device { device_name = "xvdct" no_device = "true" }
ephemeral_block_device { device_name = "xvdcu" no_device = "true" }
ephemeral_block_device { device_name = "xvdcv" no_device = "true" }
ephemeral_block_device { device_name = "xvdcw" no_device = "true" }
ephemeral_block_device { device_name = "xvdcx" no_device = "true" }
ephemeral_block_device { device_name = "xvdcy" no_device = "true" }
ephemeral_block_device { device_name = "xvdcz" no_device = "true" }
}
#まとめ
書式としてはあまりスマートとは言えませんが、現状はこうするしかないようです。
SDKでは検証していませんが、おそらく同じかと思います。
もっとよい書き方があったら教えてください。