[アップデート] Amazon EC2 Fleet でも中断可能なキャパシティが指定できるようになりました
いわさです。
先日ブログを書きましたが、中断可能な予約キャパシティを使うことで余っているキャパシティを中断可能なワークロードで利用することが出来ます。
これまで中断可能なキャパシティ予約を使うには個別にインスタンスを起動する必要がありました。
これが先日のアップデートで EC2 Fleet をサポートし、フリートを使って複数のインスタンスをまとめてプロビジョニングできるようになりました。
今回は EC2 Fleet から中断可能なキャパシティ予約を使う方法を確認してみたので紹介します。
使ってみた
では実際に EC2 Fleet から中断可能なキャパシティ予約を使ってインスタンスを起動してみます。
前提として、中断可能なキャパシティ予約が既に作成されている状態とします。

中断可能なキャパシティ予約の作成方法は前述の記事を参照してください。
起動テンプレートを作成する
まず、EC2 Fleet で起動テンプレートを指定するので、中断可能なキャパシティ予約を指定した起動テンプレートを作成します。
ポイントとしては「高度な詳細」セクションで作成した中断可能なキャパシティ予約を指定します。このあたりは EC2 で個別のインスタンスを起動するときと同じですかね。

EC2 Fleet を作成してインスタンスを起動する
では EC2 Fleet を作成しましょう。
知らなかったのですが EC2 Fleet の作成は本日時点ではマネジメントコンソールから利用できないため AWS CLI や CloudFormation を使う必要があるみたいです。今日は AWS CLI を使ってみましょう。
AWS CLI ではec2 create-fleetを使います。[1]
注意事項がありまして、中断可能なキャパシティ予約を使う場合、Fleet のタイプは instant のみサポートされています。また、DefaultTargetCapacityType に reserved-capacity を指定し、ReservedCapacityOptions の ReservationTypes に interruptible-capacity-reservation を設定する必要があります。
ちなみに OnDemandTargetCapacity や SpotTargetCapacity を指定しつつ DefaultTargetCapacityType に reserved-capacity を設定する構成はサポートされていないので注意してください。[2]
前提として、AWS CLI のバージョンは 1.44.62 以上でinterruptible-capacity-reservationの指定が出来るようになります。事前にアップデートしておきましょう。
% cat hoge.json
{
"LaunchTemplateConfigs": [
{
"LaunchTemplateSpecification": {
"LaunchTemplateName": "hoge0323template",
"Version": "1"
}
}
],
"TargetCapacitySpecification": {
"TotalTargetCapacity": 1,
"DefaultTargetCapacityType": "reserved-capacity"
},
"ReservedCapacityOptions": {
"ReservationTypes": ["interruptible-capacity-reservation"]
},
"Type": "instant"
}
% aws ec2 create-fleet --cli-input-json file://hoge.json
{
"FleetId": "fleet-e604b527-d31c-69bc-ac10-848874ed8c0e",
"Errors": [],
"Instances": [
{
"LaunchTemplateAndOverrides": {
"LaunchTemplateSpecification": {
"LaunchTemplateId": "lt-0d49bd7805fc162ca",
"Version": "1"
},
"Overrides": {}
},
"Lifecycle": "interruptible-capacity-reservation",
"InstanceIds": [
"i-0debd8379ad1498e9"
],
"InstanceType": "t3.nano"
}
]
}
レスポンスのLifecycle が interruptible-capacity-reservation になっていることが確認できます。中断可能なキャパシティ予約を使ってインスタンスが起動されたことがわかりますね。
EC2 コンソールのインスタンス一覧を確認すると、Fleet から起動されたインスタンスが表示されています。

なお、ターゲットキャパシティが中断可能なキャパシティ予約の利用可能容量を超えている場合は、起動できた分のインスタンスだけがレスポンスに含まれ、残りは Errors に報告されるみたいです。試してみましょう。
中断可能な予約キャパシティの容量は1だったのですが、もうひとつフリートを作成してみましょうか。
% aws ec2 create-fleet --cli-input-json file://hoge.json
{
"FleetId": "fleet-78372096-3ca5-c40f-8612-01003dd66dbf",
"Errors": [
{
"LaunchTemplateAndOverrides": {
"LaunchTemplateSpecification": {
"LaunchTemplateId": "lt-0d49bd7805fc162ca",
"Version": "1"
},
"Overrides": {}
},
"Lifecycle": "interruptible-capacity-reservation",
"ErrorCode": "ReservationCapacityExceeded",
"ErrorMessage": "The requested reservation does not have sufficient compatible and available capacity for this request."
}
],
"Instances": []
}
Errorsに情報が含まれていますね。
オンデマンドや Spot へのフォールバックは行われないので、ターゲットキャパシティは中断可能なキャパシティ予約の利用可能容量以下に設定しておくようにしましょう。
中断時の挙動
中断可能なキャパシティの回収をしてみましょう。
キャパシティ回収の手順は前回の記事と同じです。

数分後に期待どおりシャットダウンされました。
さいごに
本日は Amazon EC2 Fleet でも中断可能なキャパシティが指定できるようになったので確認してみました。
中断が許容されるバッチ処理などのワークロードで、組織内の未使用キャパシティを効率的に活用したい場合かつフリートで複数台を管理したりプロビジョニングしたい時に活用出来そうです。







