この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
ウィスキー、シガー、パイプをこよなく愛する大栗です。 Keynoteを前に、新機能ラッシュの様相となっているre:Invent 2015です。先ほどEC2のSpotインスタンスに新しいオプションSpot Blockが発表されましたのでご紹介します。
Spot Block?
Spotインスタンスは、価格の変動により何時停止するか分からない起動方法(正確には停止の2分前に検知可能)です。そのためSpotインスタンスを使用する場面は限定的なことが多かったと思います。 しかし、Spot Blockでは一定の時間起動は価格変動があっても起動し続けられるオプションとなっています。最大で6時間起動し続けられます。
試してみる
まずはAWS-CLIをバージョンアップしてください。AWS-CLI 1.8.10以降でSpot Blockが使用できます。
sudo pip install -U awscli
次にCLIのオプションを決めるために、skeletonを出力します。
aws ec2 request-spot-instances --generate-cli-skeleton
以下のオプションとなります。BlockDurationMinutes
が増えていますね。BlockDurationMinutes
は60分の倍数(60、120、180、240、300、360)が設定可能です。
{
"DryRun": true,
"SpotPrice": "",
"ClientToken": "",
"InstanceCount": 0,
"Type": "",
"ValidFrom": null,
"ValidUntil": null,
"LaunchGroup": "",
"AvailabilityZoneGroup": "",
"BlockDurationMinutes": 0,
"LaunchSpecification": {
"ImageId": "",
"KeyName": "",
"SecurityGroups": [
""
],
"UserData": "",
"AddressingType": "",
"InstanceType": "",
"Placement": {
"AvailabilityZone": "",
"GroupName": ""
},
"KernelId": "",
"RamdiskId": "",
"BlockDeviceMappings": [
{
"VirtualName": "",
"DeviceName": "",
"Ebs": {
"SnapshotId": "",
"VolumeSize": 0,
"DeleteOnTermination": true,
"VolumeType": "",
"Iops": 0,
"Encrypted": true
},
"NoDevice": ""
}
],
"SubnetId": "",
"NetworkInterfaces": [
{
"NetworkInterfaceId": "",
"DeviceIndex": 0,
"SubnetId": "",
"Description": "",
"PrivateIpAddress": "",
"Groups": [
""
],
"DeleteOnTermination": true,
"PrivateIpAddresses": [
{
"PrivateIpAddress": "",
"Primary": true
}
],
"SecondaryPrivateIpAddressCount": 0,
"AssociatePublicIpAddress": true
}
],
"IamInstanceProfile": {
"Arn": "",
"Name": ""
},
"EbsOptimized": true,
"Monitoring": {
"Enabled": true
},
"SecurityGroupIds": [
""
]
}
}
最小限のオプションとして、以下の内容のJSONファイルを作成しました。BlockDurationMinutes
は60の倍数なので60を設定しています。CLIのオプションでは、--block-duration-minutes
オプションとなります。
spot_block.json
{
"SpotPrice": "0.5",
"InstanceCount": 1,
"BlockDurationMinutes": 60,
"LaunchSpecification": {
"ImageId": "ami-e3106686",
"KeyName": "virginia-xxxxxxxx",
"InstanceType": "m4.large"
}
}
この内容でコマンドを実行します。
aws ec2 request-spot-instances --cli-input-json file://spot_block.json
以下のようにSpotリクエストが表示されます。
少し待つと、以下のようにステータスがactiveに変わります。
この様にインスタンスが普通に起動しました。
さいごに
Spotインスタンスのアップデートは、先日Spot Fleetが発表されて全体のキャパシティを確保することが出来るようになりました。今回は一定時間の可用性を確保するオプションが提供されるようになりました。そのため様々な場面でスポットインスタンスを使用できるのではないでしょうか?