キャパシティ予約を使用して特定のアベイラビリティーゾーンでキャパシティを予約する - Amazon EC2 Auto Scaling

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

キャパシティ予約を使用して特定のアベイラビリティーゾーンでキャパシティを予約する

Amazon EC2 オンデマンド キャパシティ予約は、特定のアベイラビリティーゾーンでコンピューティング性能を予約するのに役立ちます。キャパシティ予約の使用を開始するには、特定のアベイラビリティーゾーンにキャパシティ予約を作成します。次に、インスタンスをリザーブドキャパシティに起動し、そのキャパシティの使用率をリアルタイムで表示して、必要に応じてキャパシティを増減することができます。

キャパシティ予約は、open または targeted のいずれかで設定されます。キャパシティ予約が open の場合、一致する属性を持つすべての新規および既存のインスタンスは、キャパシティ予約のキャパシティ内で自動的に実行されます。キャパシティ予約 が targeted の場合、インスタンスはそれがリザーブドキャパシティで実行されるように具体的に設定する必要があります。

このトピックでは、targeted キャパシティ予約にオンデマンドインスタンスを起動する Auto Scaling グループを作成する方法を説明します。これにより、特定のキャパシティ予約をいつ使用するかをより細かく制御できます。

基本的なステップは次のとおりです。

  1. 同じインスタンスタイプ、プラットフォーム、インスタンス数を持つ複数のアベイラビリティーゾーンでキャパシティ予約を作成します。

  2. AWS Resource Groups を使用してキャパシティ予約をグループ化します。

  3. キャパシティ予約と同じアベイラビリティーゾーンを使用して、リソースグループを対象とする起動テンプレートを使用して Auto Scaling グループを作成します。

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

最初のステップは、Auto Scaling グループがデプロイされる各アベイラビリティーゾーンにキャパシティ予約を作成することです。

注記

最初にキャパシティ予約を作成するときは、targeted 予約のみを作成できます。

Console
キャパシティ予約を作成するには
  1. Amazon EC2 コンソール (https://console.aws.amazon.com/ec2/) を開きます。

  2. [キャパシティ予約]、[作成キャパシティ予約] の順に選択します。

  3. キャパシティ予約を作成」のページで、[インスタンスの詳細] セクションで、以下の設定を指定します。起動するインスタンスのインスタンスタイプ、プラットフォーム、アベイラビリティーゾーンは、ここで指定するインスタンスタイプ、プラットフォーム、アベイラビリティーゾーンと一致する必要があります。一致しない場合、キャパシティ予約 は適用されません。

    1. [インスタンスのタイプ] では、リザーブドキャパシティーに起動するインスタンスのタイプを選択します。

    2. [プラットフォーム] では、インスタンスのオペレーティングシステムを選択します。

    3. [アベイラビリティーゾーン]で、キャパシティを予約したい最初のアベイラビリティーゾーンを選択します。

    4. 合計容量 で、必要なインスタンスの数を選択します。Auto Scaling グループに必要なインスタンスの総数を、使用する予定のアベイラビリティーゾーンの数で割って計算します。

  4. [キャパシティ予約の詳細] で、[キャパシティ予約の終了] について、次のオプションのいずれかを選択します。

    • 特定の時刻 – 指定された日時に自動的にキャパシティーの予約をキャンセルします。

    • 手動 – 明示的にキャンセルするまで容量を予約します。

  5. [インスタンスの適格性] については、[ターゲット: キャパシティ予約を対象とするインスタンスのみ] を選択します。

  6. (オプション) [タグ] には、キャパシティ予約に関連付けるタグを指定します。

  7. [作成] を選択します。

  8. 新しく作成したキャパシティ予約の ID をメモしておきます。キャパシティ予約グループを設定するために必要です。

Auto Scaling グループに対して有効にする各アベイラビリティーゾーンに対してこの手順を繰り返し、[アベイラビリティーゾーン] オプションの値のみを変更します。

AWS CLI
キャパシティ予約を作成するには

キャパシティ予約を作成するには、次のcreate-capacity-reservationコマンドを使用します。--availability-zone--instance-type--instance-platform、および --instance-count のサンプルの値を置き換えます。

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 の結果の例

{ "CapacityReservation": { "CapacityReservationId": "cr-1234567890abcdef1", "OwnerId": "123456789012", "CapacityReservationArn": "arn:aws:ec2:us-east-1:123456789012:capacity-reservation/cr-1234567890abcdef1", "InstanceType": "c5.xlarge", "InstancePlatform": "Linux/UNIX", "AvailabilityZone": "us-east-1a", "Tenancy": "default", "TotalInstanceCount": 3, "AvailableInstanceCount": 3, "EbsOptimized": false, "EphemeralStorage": false, "State": "active", "StartDate": "2023-07-26T21:36:14+00:00", "EndDateType": "unlimited", "InstanceMatchCriteria": "targeted", "CreateDate": "2023-07-26T21:36:14+00:00" } }

新しく作成したキャパシティ予約の ID をメモしておきます。キャパシティ予約グループを設定するために必要です。

Auto Scaling グループに対して有効にする各アベイラビリティーゾーンに対してこのコマンドを繰り返し、--availability-zone オプションの値のみを変更します。

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

キャパシティ予約の作成が完了したら、 AWS Resource Groups サービスを使用してそれらをグループ化できます。 AWS Resource Groups は、さまざまな用途で複数の異なるタイプのグループをサポートします。Amazon EC2 は、サービスにリンクされたリソースグループと呼ばれる特別な目的のグループを使用して、キャパシティ予約グループをターゲットにします。このサービスにリンクされたリソースグループを操作するには、 AWS CLI  または SDK ですが、コンソールではありません。サービスにリンクされたリソース グループの詳細については、「AWS Resource Groups User Guide」の 「Service configurations for resource groups」を参照してください。

を使用してキャパシティ予約グループを作成するには AWS CLI

create-group コマンドを使用して、キャパシティ予約のみを含めることができるリソースグループを作成します。この例では、プレイスメントグループ名はmy-cr-groupです。

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"]}]}'

以下に、応答の例を示します。

{ "Group": { "GroupArn": "arn:aws:resource-groups:us-east-1:123456789012:group/my-cr-group", "Name": "my-cr-group" }, "GroupConfiguration": { "Configuration": [ { "Type": "AWS::EC2::CapacityReservationPool" }, { "Type": "AWS::ResourceGroups::Generic", "Parameters": [ { "Name": "allowed-resource-types", "Values": [ "AWS::EC2::CapacityReservation" ] } ] } ], "Status": "UPDATE_COMPLETE" } }

リソースグループの ARN をメモしておきます。Auto Scaling グループの起動テンプレートを設定するために必要です。

AWS CLI を使用してキャパシティ予約を新しく作成したグループに関連付けるには

次の group-resources コマンドを使用して、キャパシティ予約を新しく作成したキャパシティ予約グループに関連付けます。--resource-arns オプションの場合、ARN を使用してキャパシティ予約を指定します。関連するリージョン、アカウント ID、および前にメモした予約 ID を使用して ARN を作成します。この例では、ID cr-1234567890abcdef1 と cr-54321abcdef567890 の予約がmy-cr-group という名前のグループとしてグループ化されます。

aws resource-groups group-resources \ --group my-cr-group \ --resource-arns \ arn:aws:ec2:region:account-id:capacity-reservation/cr-1234567890abcdef1 \ arn:aws:ec2:region:account-id:capacity-reservation/cr-54321abcdef567890

以下に、応答の例を示します。

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

リソースグループの変更または削除については、「AWS Resource Groups API リファレンス」を参照してください。

ステップ 3: 起動テンプレートを作成する

Console
起動テンプレートを作成するには
  1. Amazon EC2 コンソール (https://console.aws.amazon.com/ec2/) を開きます。

  2. ナビゲーションペインで、[インスタンス] の [テンプレートの起動] を選択します。

  3. [起動テンプレートの作成] を選択します。名前を入力し、起動テンプレートの最初のバージョンの説明を加えます。

  4. [Auto Scaling ガイダンス] で、[チェックボックス] を選択します。

  5. 起動テンプレートを作成します。使用する予定のキャパシティ予約と一致する AMI とインスタンスタイプを選択し、オプションでキーペア、1 つ以上のセキュリティグループ、インスタンス用の追加の EBS ボリュームまたはインスタンスストアボリュームを選択します。

  6. [高度な設定]を展開し、以下の操作を行います。

    1. [キャパシティ予約]で、[グループ別のターゲット] を選択します。

    2. [キャパシティ予約 - グループ別のターゲット] で、前のセクションで作成したキャパシティ予約グループを選択し、[保存] を選択します。

  7. [起動テンプレートの作成] を選択します。

  8. 確認ページで、[Auto Scaling グループの作成] を選択します。

AWS CLI
起動テンプレートを作成するには

次のcreate-launch-templateコマンドを使用して、キャパシティ予約が特定のリソースグループをターゲットにすることを指定する起動テンプレートを作成します。--launch-template-name のサンプル値を置き換えます。c5.xlarge をキャパシティ予約で使用したインスタンス タイプに置き換え、ami-0123456789EXAMPLE を使用する AMI の ID に置き換えます。arn:aws:resource-groups:region:account-id:group/my-cr-group を、前のセクションのセクションで作成したリソースグループの ARN に置き換えます。

aws ec2 create-launch-template \ --launch-template-name my-launch-template \ --launch-template-data \ '{"InstanceType": "c5.xlarge", "ImageId": "ami-0123456789EXAMPLE", "CapacityReservationSpecification": {"CapacityReservationTarget": { "CapacityReservationResourceGroupArn": "arn:aws:resource-groups:region:account-id:group/my-cr-group" } } }'

以下に、応答の例を示します。

{ "LaunchTemplate": { "LaunchTemplateId": "lt-0dd77bd41dEXAMPLE", "LaunchTemplateName": "my-launch-template", "CreateTime": "2023-07-26T21:42:48+00:00", "CreatedBy": "arn:aws:iam::123456789012:user/Bob", "DefaultVersionNumber": 1, "LatestVersionNumber": 1 } }

ステップ 4: Auto Scaling グループを作成する

Console

通常どおり Auto Scaling グループを作成しますが、VPC サブネットを選択するときは、作成した targeted のキャパシティ予約に一致する各アベイラビリティーゾーンからサブネットを選択します。その後、Auto Scaling グループがこれらのアベイラビリティーゾーンのいずれかでオンデマンドインスタンスを起動すると、そのインスタンスがそのアベイラビリティーゾーンのリザーブドキャパシティで実行されます。希望するキャパシティが満たされる前にリソースグループがキャパシティ予約を使い果たした場合、リザーブドキャパシティを超えるものは通常のオンデマンドキャパシティとして起動されます。

Auto Scaling グループを作成するには
  1. https://console.aws.amazon.com/ec2/ でAmazon EC2 コンソールを開き、ナビゲーションペインで [Auto Scaling グループ] を選択します。

  2. 画面上部のナビゲーションバーで、起動テンプレートの作成時に使用した AWS リージョン ものと同じ を選択します。

  3. [Auto Scaling グループの作成] を選択します。

  4. [起動テンプレートまたは起動設定を選択する] ページで [Auto Scaling グループ名] にAuto Scaling グループの名前を入力します。

  5. [起動テンプレート] で、既存の起動テンプレートを選択します。

  6. [起動テンプレートのバージョン] で、スケールアウト時に Auto Scaling グループで使用する起動テンプレートのバージョン (デフォルト、最新、または特定のバージョン) を選択します。

  7. [インスタンス起動オプションを選択] ページで、[インスタンスタイプの要件] セクションをスキップし、起動テンプレートで指定されている EC2 インスタンスタイプを使用します。

  8. [Network] (ネットワーク) の下にある [VPC] で、VPC を選択します。Auto Scaling グループは、起動テンプレートで指定したセキュリティグループと、同じ VPC 内に作成する必要があります。起動テンプレートにセキュリティグループを指定しなかった場合、キャパシティ予約と同じアベイラビリティーゾーンにサブネットがある任意の VPC を選択できます。

  9. [アベイラビリティーゾーンとサブネット]では、キャパシティ予約がどのアベイラビリティーゾーンにあるかに基づいて、含めたいサブネットを各アベイラビリティーゾーンから選択します。

  10. [次へ] を 2 回選択します。

  11. [グループサイズとスケーリングポリシーを設定] ページの [必要なキャパシティ] に、起動するインスタンスの初期数を入力します。この数値を最小キャパシティまたは最大キャパシティ制限の範囲外の値に変更する場合は、[最小キャパシティ] または [最大キャパシティ] の値を更新する必要があります。詳細については、「Auto Scaling グループのスケーリング制限を設定する」を参照してください。

  12. [Skip to review] を選択します。

  13. [Review (レビュー)]ページで、[Create Auto Scaling group (Auto Scaling グループを作成)] を選択します。

AWS CLI
Auto Scaling グループを作成するには

次のcreate-auto-scaling-groupコマンドを使用して、起動テンプレートの名前とバージョンを --launch-templateオプションの値として指定します。--auto-scaling-group-name--min-size--max-size、および --vpc-zone-identifier のサンプルの値を置き換えます。

--availability-zones オプションには、キャパシティ予約を作成したアベイラビリティーゾーンを指定します。例えば、キャパシティ予約で us-east-1a と us-east-1b のアベイラビリティーゾーンの場合は、同じゾーンに Auto Scaling グループを作成する必要があります。その後、Auto Scaling グループがこれらのアベイラビリティーゾーンのいずれかでオンデマンドインスタンスを起動すると、そのインスタンスがそのアベイラビリティーゾーンのリザーブドキャパシティで実行されます。希望するキャパシティが満たされる前にリソースグループがキャパシティ予約を使い果たした場合、リザーブドキャパシティを超えるものは通常のオンデマンドキャパシティとして起動されます。

aws autoscaling create-auto-scaling-group \ --auto-scaling-group-name my-asg \ --launch-template LaunchTemplateName=my-launch-template,Version='1' \ --min-size 6 \ --max-size 6 \ --vpc-zone-identifier "subnet-5f46ec3b,subnet-0ecac448" \ --availability-zones us-east-1a us-east-1b

実装例については、次の AWS サンプル GitHub リポジトリの AWS CloudFormation テンプレートを参照してください: https://github.com/aws-samples/aws-auto-scaling-backed-by-on-demand-capacity-reservations/

キャパシティ予約の詳細について調べる際は、以下の関連トピックが役に立ちます。