チュートリアル: キャパシティ予約リソースグループを使用して複数のキャパシティ予約タイプでインスタンスを起動するように EC2 Fleet を設定する
このチュートリアルでは、単一のキャパシティ予約リソースグループを使用して、オンデマンドキャパシティ予約 (ODCR)、機械学習用のキャパシティブロック、中断可能なキャパシティ予約といった複数のキャパシティ予約タイプでインスタンスを起動する EC2 Fleet を設定するためのステップを詳しく説明します。
異なるキャパシティ予約タイプが含まれるキャパシティ予約リソースグループを作成し、特定の順序でキャパシティ予約タイプを優先するように EC2 Fleet を設定して、ターゲットを満たすためのリザーブドキャパシティが不足しているときにオプションでオンデマンドキャパシティにフォールバックする方法を学びます。
考慮事項
-
ReservedCapacityOptionsを使用するときは、instantタイプの EC2 Fleet リクエストのみがサポートされます。 -
ターゲットにするキャパシティ予約タイプを
ReservationTypesリストで明示的に指定する必要があります。EC2 Fleet は、指定されたキャパシティ予約タイプのみでインスタンスを起動します。 -
ReservedCapacityOptionsとOnDemandOptions.CapacityReservationOptionsは相互排他的です。同じ EC2 Fleet リクエストで両方を使用することはできません。
このチュートリアルは、アカウント内に以下のキャパシティ予約が既に存在することを前提としています。
-
us-east-1aにあるp5.48xlargeの ODCR (cr-1234567890abcdef1) -
us-east-1bにあるp4d.48xlargeの ODCR (cr-abcdef1234567890a) -
us-east-1aにあるp5.48xlargeのキャパシティブロック (cr-0123456789abcdef0) -
組織内の別のアカウントから共有された、
us-east-1aにあるp5.48xlargeの中断可能なキャパシティ予約 (cr-9876543210fedcba9)
アクセス許可の確認
EC2 フリート を作成する前に、必要なアクセス許可が含まれている IAM ロールがあることを確認します。詳細については、「EC2 フリートの前提条件」を参照してください。
ステップ 1: キャパシティ予約リソースグループを作成する
EC2 Fleet がターゲットにするキャパシティ予約を保持するためのキャパシティ予約リソースグループを作成します。あらゆるインスタンスタイプやキャパシティ予約タイプのキャパシティ予約を受け入れられるようにグループを設定します。そうすることで、グループが複数のキャパシティ予約タイプの組み合わせを保持できるようになります。ステップバイステップの手順については、「キャパシティ予約グループ」を参照してください。
注記
グループを作成するときは、AWS::EC2::CapacityReservationPool 設定に instance-type または reservation-type パラメータを指定しないでください。これらのパラメータを省略することで、グループがあらゆるインスタンスタイプやキャパシティ予約タイプのキャパシティ予約を受け入れられるようになります。
ステップ 2: キャパシティ予約をグループに追加する
キャパシティ予約をキャパシティ予約リソースグループに追加します。ODCR、機械学習用のキャパシティブロック、中断可能なキャパシティ予約、UltraServer キャパシティブロックの任意の組み合わせを追加できます。このチュートリアルでは、このチュートリアルの冒頭に記載されている 4 つのキャパシティ予約を追加します。ステップバイステップの手順については、「キャパシティ予約グループ」を参照してください。
ステップ 3: 起動テンプレートを作成する
create-launch-template コマンドを使用して、キャパシティ予約リソースグループをターゲットにする起動テンプレートを作成します。EC2 Fleet 設定で ReservedCapacityOptions を使用する場合、起動テンプレートで MarketType を設定する必要はありません。EC2 Fleet が各キャパシティ予約タイプに自動的に設定します。
aws ec2 create-launch-template \ --launch-template-namemy-cr-resource-group-template\ --launch-template-data \ '{"ImageId": "ami-0123456789example", "CapacityReservationSpecification": {"CapacityReservationTarget": {"CapacityReservationResourceGroupArn": "arn:aws:resource-groups:us-east-1:123456789012:group/my-cr-resource-group"} } }'
ステップ 4: EC2 フリートを作成する
キャパシティ予約リソースグループ内の複数のキャパシティ予約タイプをターゲットにする EC2 Fleet を作成します。重要な設定は ReservedCapacityOptions です。この設定は以下を指定します。
-
ReservationTypes– ターゲットにするキャパシティ予約タイプの順序付きリストです。EC2 Fleet は、この順序でタイプを使用します。有効な値は、on-demand-capacity-reservation、capacity-block、interruptible-capacity-reservationです。 -
AllocationStrategy– 各キャパシティ予約タイプ内のインスタンスタイプに優先順位を付ける方法です。インスタンスタイプの上書き順序に従う場合は、prioritizedに設定します。 -
ReservedCapacityFallbackOptions– リザーブドキャパシティが不十分な場合にオンデマンドインスタンスを起動するには、MarketTypesを["on-demand"]に設定します。フォールバックオプションを指定しない場合、EC2 Fleet は指定されたキャパシティ予約タイプが完全に消費された後も他のマーケットタイプにフォールバックしません。
config.json という名前のファイルを作成し、次の内容を記述します。次の例では、リソース識別子を独自のリソース識別子に置き換えます。
{ "LaunchTemplateConfigs": [ { "LaunchTemplateSpecification": { "LaunchTemplateName": "my-cr-resource-group-template", "Version": "1" }, "Overrides": [ { "InstanceType": "p5.48xlarge", "AvailabilityZone": "us-east-1a", "Priority": 1 }, { "InstanceType": "p4d.48xlarge", "AvailabilityZone": "us-east-1b", "Priority": 2 } ] } ], "TargetCapacitySpecification": { "TotalTargetCapacity":100, "DefaultTargetCapacityType": "reserved-capacity" }, "ReservedCapacityOptions": { "ReservationTypes": ["on-demand-capacity-reservation", "capacity-block", "interruptible-capacity-reservation"], "ReservedCapacityFallbackOptions": { "MarketTypes": ["on-demand"] }, "AllocationStrategy": "prioritized" }, "Type": "instant" }
create-fleet コマンドを使用してフリートを起動します。
aws ec2 create-fleet --cli-input-json file://config.json
詳細については、「EC2 フリートの作成」を参照してください。
EC2 Fleet がキャパシティ予約を解決する方法
前述の設定に基づき、EC2 Fleet は次の順序でインスタンスの起動を試みます。
-
ODCR – 最初に
p5.48xlarge予約 (優先順位が最もの高いインスタンスタイプ)、次にp4d.48xlarge予約を選択します。各インスタンスタイプ内に複数の ODCR が存在する場合、そのうちの 1 つがランダムに選択されます。 -
キャパシティブロック – どの ODCR にも利用可能なキャパシティが残っていない場合、EC2 Fleet はキャパシティブロックをターゲットにします。各インスタンスタイプ内で、最初に
p5.48xlarge予約、次にp4d.48xlarge予約がランダムに選択されます。 -
中断可能なキャパシティ予約 – どのキャパシティブロックにも利用可能なキャパシティが残っていない場合、EC2 Fleet は中断可能なキャパシティ予約をターゲットにします。各インスタンスタイプ内で、最初に
p5.48xlarge予約、次にp4d.48xlarge予約がランダムに選択されます。 -
オンデマンドフォールバック – 100 インスタンスのターゲットを満たすためのリザーブドキャパシティが不足している場合、不足分のキャパシティをオンデマンドインスタンスとして起動します。EC2 Fleet は、
OnDemandOptionsでユーザーが指定する割り当て戦略に従ってこれらのオンデマンドインスタンスを起動します。
注記
EC2 Fleet は、最初にキャパシティ予約タイプを解決してから、各キャパシティ予約タイプ内のインスタンスタイプを解決します。EC2 Fleet が順序付きリストの次のタイプに移動するのは、各キャパシティ予約タイプが完全に消費された後です。
(オプション) ステップ 5: インスタンスプロパティを検証する
describe-instances コマンドを使用して、各インスタンスが消費したキャパシティ予約タイプを検証します。フリートによって起動されたインスタンスには、次のプロパティが表示されます。
| プロパティ | オンデマンドキャパシティ予約の値 | キャパシティブロックの値 | 中断可能なキャパシティ予約の値 | オンデマンドの値 |
|---|---|---|---|---|
instance-lifecycle |
null |
capacity-block |
interruptible-capacity-reservation |
null |
capacity-reservation-id |
消費されたキャパシティ予約 ID | 消費されたキャパシティ予約 ID | 消費されたキャパシティ予約 ID | なし |
capacity-reservation-specification |
グループ ARN | グループ ARN | グループ ARN | なし |
以下のコマンドを使用して、キャパシティ予約リソースグループ別にインスタンスをフィルタリングできます。
aws ec2 describe-instances \ --filters "Name=capacity-reservation-specification.capacity-reservation-target.capacity-reservation-resource-group-arn,Values=arn:aws:resource-groups:us-east-1:123456789012:group/my-cr-resource-group"
クリーンアップ
料金の発生を防ぐため、不要になったインスタンスは終了させてください。キャパシティブロックの予約が終了すると、そのキャパシティブロックで起動されたインスタンスが自動的に終了することに注意してください。中断可能なキャパシティ予約で起動されたインスタンスは、キャパシティの所有者がキャパシティを再利用すると自動的に終了します。