チュートリアル: ターゲットのキャパシティ予約を使用してオンデマンドインスタンスを起動するように EC2 フリートを設定する - Amazon Elastic Compute Cloud

チュートリアル: ターゲットのキャパシティ予約を使用してオンデマンドインスタンスを起動するように EC2 フリートを設定する

このチュートリアルでは実行するべきステップを段階的に解説しています。それにより、EC2 フリートがオンデマンドインスタンスをtargetedキャパシティー予約で起動できるようにします。

オンデマンドインスタンスの起動時に、最初にtargetedオンデマンドキャパシティー予約を使用するようにフリートを設定する方法を学習します。また、オンデマンドターゲット容量の合計が使用可能な未使用のキャパシティ予約数を超えた場合、フリートは指定された割り当て戦略を使用して、残りのターゲット容量を起動するインスタンスプールを選択するようにフリートを設定する方法についても学習します。

EC2 フリートの設定

このチュートリアルでは、フリートは次のように設定されます。

  • ターゲット容量:10 オンデマンドインスタンス

  • 未使用の合計targetedキャパシティー予約:6 (フリートの目標オンデマンド容量である 10 オンデマンドインスタンスを下回っています)

  • キャパシティ予約のプールの数:2 (us-east-1aおよびus-east-1b)

  • プールあたりのキャパシティ予約数:3

  • オンデマンド割り当て戦略:lowest-price(未使用キャパシティーの予約の数が目標オンデマンド容量より少ない場合、フリートは、オンデマンド配分戦略に基づいて、残りのオンデマンド容量を起動するプールを決定します)。

    また、lowest-price割り当て戦略の代わりにprioritized割り当て戦略を使用することもできます。

ステップ 1: キャパシティー予約を作成する

キャパシティー予約の作成コマンドを使用してキャパシティ予約を作成します。3 つはus-east-1aの目的に、別の3つはus-east-1bの目的にします。アベイラビリティーゾーンを除き、キャパシティー予約の他の属性は同じです。

us-east-1aでの 3 つのキャパシティー予約

aws ec2 create-capacity-reservation \ --availability-zone us-east-1a \ --instance-type c5.xlarge \ --instance-platform Linux/UNIX \ --instance-count 3 \ --instance-match-criteria targeted

キャパシティー予約 ID の結果の例

cr-1234567890abcdef1

us-east-1bでの 3 つのキャパシティー予約

aws ec2 create-capacity-reservation \ --availability-zone us-east-1b \ --instance-type c5.xlarge \ --instance-platform Linux/UNIX \ --instance-count 3 \ --instance-match-criteria targeted

キャパシティー予約 ID の結果の例

cr-54321abcdef567890

ステップ 2: キャパシティー予約のリソースグループを作成する

resource-groupsサービスを使用する、およびグループを作成するコマンドを使用して、キャパシティー予約のリソースグループを作成します。この例では、プレイスメントグループ名はmy-cr-groupです。リソースグループを作成する必要がある理由の詳細については、キャパシティ予約を使用して、EC2 フリートのオンデマンドキャパシティを予約するを参照してください。

aws resource-groups create-group \ --name my-cr-group \ --configuration '{"Type":"AWS::EC2::CapacityReservationPool"}' '{"Type":"AWS::ResourceGroups::Generic", "Parameters": [{"Name": "allowed-resource-types", "Values": ["AWS::EC2::CapacityReservation"]}]}'

ステップ 3: キャパシティ予約リソースグループにキャパシティ予約を追加する

resource-groupsサービス、およびグループリソースコマンドを使用して、手順 1 で作成したキャパシティ予約をキャパシティ予約リソースグループに追加します。オンデマンドキャパシティ予約は、ARN ごとに参照する必要があります。

aws resource-groups group-resources \ --group my-cr-group \ --resource-arns \ arn:aws:ec2:us-east-1:123456789012:capacity-reservation/cr-1234567890abcdef1 \ arn:aws:ec2:us-east-1:123456789012:capacity-reservation/cr-54321abcdef567890

出力例

{ "Failed": [], "Succeeded": [ "arn:aws:ec2:us-east-1:123456789012:capacity-reservation/cr-1234567890abcdef1", "arn:aws:ec2:us-east-1:123456789012:capacity-reservation/cr-54321abcdef567890" ] }

(オプション) ステップ 4: リソースグループのキャパシティーの予約を表示する

resource-groupsサービス、およびグループリソースを表示するコマンドを使用して、キャパシティ予約を表示するリソースグループをオプションで記述します。

aws resource-groups list-group-resources --group my-cr-group

出力例

{ "ResourceIdentifiers": [ { "ResourceType": "AWS::EC2::CapacityReservation", "ResourceArn": "arn:aws:ec2:us-east-1:123456789012:capacity-reservation/cr-1234567890abcdef1" }, { "ResourceType": "AWS::EC2::CapacityReservation", "ResourceArn": "arn:aws:ec2:us-east-1:123456789012:capacity-reservation/cr-54321abcdef567890" } ] }

ステップ 5: キャパシティ予約が特定のリソースグループをターゲットに指定する起動テンプレートを作成する

起動テンプレートを作成するコマンドを使用して、使用するキャパシティー予約を指定する起動テンプレートを作成します。この例では、フリートはtargetedキャパシティー予約を使用して、ソースグループに追加されます。したがって、起動テンプレートデータでは、キャパシティ予約が特定のリソースグループをターゲットに指定します。次の例で、プレイスメントグループ名はmy-launch-templateです。

aws ec2 create-launch-template \ --launch-template-name my-launch-template \ --launch-template-data \ '{"ImageId": "ami-0123456789example", "CapacityReservationSpecification": {"CapacityReservationTarget": { "CapacityReservationResourceGroupArn": "arn:aws:resource-groups:us-east-1:123456789012:group/my-cr-group" } } }'

(オプション) ステップ 6: 起動テンプレートを説明する

describe-launch-template-versions コマンドを使用して、オプションで、その設定を表示するための起動テンプレートを説明します。

aws ec2 describe-launch-template-versions --launch-template-name my-launch-template

出力例

{ "LaunchTemplateVersions": [ { "LaunchTemplateId": "lt-01234567890example", "LaunchTemplateName": "my-launch-template", "VersionNumber": 1, "CreateTime": "2021-01-19T20:50:19.000Z", "CreatedBy": "arn:aws:iam::123456789012:user/Admin", "DefaultVersion": true, "LaunchTemplateData": { "ImageId": "ami-0947d2ba12ee1ff75", "CapacityReservationSpecification": { "CapacityReservationTarget": { "CapacityReservationResourceGroupArn": "arn:aws:resource-groups:us-east-1:123456789012:group/my-cr-group" } } } } ] }

ステップ 7: EC2 フリートを作成する

起動するインスタンスの設定情報を指定する EC2 フリートを作成します。以下の EC2 フリート設定は、この例に関連する設定のみを示しています。起動テンプレートmy-launch-templateは、ステップ 5 で作成した起動テンプレートです。2 つのインスタンスプールがあり、それぞれ同じインスタンスタイプ (c5.xlarge)ですが、異なるアベイラビリティーゾーン (us-east-1aおよびus-east-1b)にあります。料金は、アベイラビリティーゾーンごとではなく、リージョンに対して定義されるため、インスタンスプールの料金は同じです。合計ターゲット容量は 10 で、デフォルトのターゲット容量タイプはon-demandです。オンデマンド配分戦略はlowest-priceです。キャパシティ予約の使用戦略はuse-capacity-reservations-firstです。

注記

フリートタイプはinstantである必要があります。他のフリートタイプはuse-capacity-reservations-firstをサポートしていません。

{ "LaunchTemplateConfigs": [ { "LaunchTemplateSpecification": { "LaunchTemplateName": "my-launch-template", "Version": "1" }, "Overrides": [ { "InstanceType": "c5.xlarge", "AvailabilityZone": "us-east-1a" }, { "InstanceType": "c5.xlarge", "AvailabilityZone": "us-east-1b" } ] } ], "TargetCapacitySpecification": { "TotalTargetCapacity": 10, "DefaultTargetCapacityType": "on-demand" }, "OnDemandOptions": { "AllocationStrategy": "lowest-price", "CapacityReservationOptions": { "UsageStrategy": "use-capacity-reservations-first" } }, "Type": "instant" }

上記の設定を使用してinstantフリートを作成すると、目標容量を満たすために以下の 10 個のインスタンスが起動されます。

  • 次のように、6 つのオンデマンドインスタンスを起動するために、キャパシティ予約が最初に使用されます。

    • 3 つのオンデマンドインスタンスが、us-east-1aでの 3 つのc5.xlargetargetedキャパシティー予約で起動します。

    • 3 つのオンデマンドインスタンスが、us-east-1bでの 3 つのc5.xlargetargetedキャパシティー予約で起動します。

  • ターゲット容量を満たすために、4 つの追加のオンデマンドインスタンスは、オンデマンド配分戦略 (この例ではlowest-price) に従って通常のオンデマンド容量で起動します。ただし、プールの価格は同じであるため (価格はアベイラビリティーゾーンごとではなく、リージョンごとであるため)、フリートは残りの 4 つのオンデマンドインスタンスをいずれかのプールで起動します。

(オプション) ステップ 8: 未使用のキャパシティ予約の残りの数を表示する

フリートの起動後、describe-capacity-reservations を実行して、未使用のキャパシティー予約の残りの数を確認できます。この例では、以下のレスポンスが表示されます。これは、すべてのプール内のすべてのキャパシティ予約が使用されたことを示しています。

{ "CapacityReservationId": "cr-111", "InstanceType": "c5.xlarge", "AvailableInstanceCount": 0 } { "CapacityReservationId": "cr-222", "InstanceType": "c5.xlarge", "AvailableInstanceCount": 0 }