EC2 オンデマンドキャパシティ予約の気になる挙動確認

2022.09.20

概要

今回はオンデマンドキャパシティ予約の挙動を確認していきます。
前回までの記事で EC2 インスタンスのオンデマンドキャパシティ予約の設定手順や、概要等を記載しました。

キャパシティ予約の設定手順は、以下ブログで記載しました。

キャパシティ予約の概要と対象方法は、以下ブログで記載しました。

検証結果

先に検証結果を記載します。

キャパシティ予約のインスタンスの適格性を [オープン] と [対象] それぞれを設定した際の挙動を確認しました。(2022年9月時点の挙動)

  • キャパシティ予約 インスタンスの適格性が [オープン]
    かつ、インスタンスのキャパシティ予約の設定は [オープン (開く)] の設定

    1. インスタンス起動状態 (適応無し)
    2. キャパシティ予約作成
    3. インスタンス起動状態 (自動でキャパシティ予約が適応) ※1
    4. インスタンス停止 (キャパシティ予約の関連付け解除)
    5. インスタンス起動 (自動でキャパシティ予約から起動) ※2

    ※1 即時でキャパシティ予約が適応される。利用可能数が消費される。
    ※2 キャパシティ予約の利用可能数が0の場合適応されない

  • キャパシティ予約 インスタンスの適格性が [対象]
    かつ、インスタンスのキャパシティ予約の設定は [オープン (開く)] の設定

    1. インスタンス起動状態 (適応無し)
    2. キャパシティ予約作成
    3. インスタンス起動状態 (適応無し)
    4. インスタンス停止 (適応無し)
    5. インスタンスのキャパシティ予約設定を [キャパシティの予約の指定] に設定変更
    6. インスタンス起動 (設定したキャパシティ予約から起動)
    7. インスタンス再停止 (キャパシティ予約の関連付けは解除されない)
    8. インスタンス起動 (設定したキャパシティ予約から起動)

キャパシティ予約の作成画面

インスタンスのキャパシティ予約の設定画面

実際の手順や確認箇所が気になる方は、以降の記載を確認してください。

インスタンスタイプ変更を伴う場合の挙動は以下ブログを参照ください。

キャパシティ予約 インスタンスの適格性が [オープン]

1. インスタンス起動状態 (適応無し)

インスタンスタイプ t3.micro のインスタンスが起動状態。
EC2 インスタンスのキャパシティ予約設定は [オープン (開く)] の設定。
(EC2 キャパシティ予約の設定はデフォルトでオープンの設定)

2. キャパシティ予約作成

[インスタンスの詳細] で、キャパシティ予約を関連付けたいインスタンスと同じ値を指定。
[インスタンスの適格性] は [オープン] で指定。

キャパシティ予約の作成完了。

3. インスタンス起動状態 (自動でキャパシティ予約が適応)

インスタンスに即時でキャパシティ予約が適応される。
キャパシティ予約の利用可能な数量が消費される。

aws cli でもキャパシティ予約の詳細を確認。
コンソール上でも利用可能な数量 AvailableInstanceCount は即時で反映される。

$ aws ec2 describe-capacity-reservations
{
    "CapacityReservations": [
        {
            "CapacityReservationId": "cr-XXXX",
            "OwnerId": "XXXX",
            "CapacityReservationArn": "arn:aws:ec2:ap-northeast-1:XXXX:capacity-reservation/cr-XXXX",
            "AvailabilityZoneId": "apne1-az4",
            "InstanceType": "t3.micro",
            "InstancePlatform": "Linux/UNIX",
            "AvailabilityZone": "ap-northeast-1a",
            "Tenancy": "default",
            "TotalInstanceCount": 1,
            "AvailableInstanceCount": 0,
            "EbsOptimized": true,
            "EphemeralStorage": false,
            "State": "active",
            "StartDate": "2022-09-16T03:22:53+00:00",
            "EndDateType": "unlimited",
            "InstanceMatchCriteria": "open",
            "CreateDate": "2022-09-16T03:22:53+00:00",
            "Tags": []
        }
    ]
}

4. インスタンス停止 (キャパシティ予約の関連付け解除)

インスタンスを停止。

インスタンスを停止後、キャパシティ予約の関連付けが解除される。

5. インスタンス起動 (自動でキャパシティ予約から起動)

インスタンスを起動。

インスタンスを起動後、自動でキャパシティ予約が関連付けされる。

おまけ

利用できるキャパシティ予約が 0 の時に、インスタンスを起動。

同じ設定のインスタンスを起動。
キャパシティ予約が適応されずに起動する。

キャパシティ予約 インスタンスの適格性が [対象]

1. インスタンス起動状態 (適応無し)

インスタンスタイプ t3.micro のインスタンスが起動状態。
EC2 インスタンスのキャパシティ予約設定は [オープン (開く)] の設定。
(EC2 キャパシティ予約の設定はデフォルトでオープンの設定)

2. キャパシティ予約作成

[インスタンスの詳細] で、キャパシティ予約を関連付けたいインスタンスと同じ値を指定。
[インスタンスの適格性] は [対象] で指定。

キャパシティ予約の作成完了。

3. インスタンス起動状態 (適応無し)

インスタンスにキャパシティ予約は適応されていない。
キャパシティ予約の利用可能な数量の変動無し。

aws cli でもキャパシティ予約の詳細を確認。

$ aws ec2 describe-capacity-reservations
{
    "CapacityReservations": [
        {
            "CapacityReservationId": "cr-XXXX",
            "OwnerId": "XXXX",
            "CapacityReservationArn": "arn:aws:ec2:ap-northeast-1:XXXX:capacity-reservation/cr-XXXX",
            "AvailabilityZoneId": "apne1-az4",
            "InstanceType": "t3.micro",
            "InstancePlatform": "Linux/UNIX",
            "AvailabilityZone": "ap-northeast-1a",
            "Tenancy": "default",
            "TotalInstanceCount": 1,
            "AvailableInstanceCount": 1,
            "EbsOptimized": true,
            "EphemeralStorage": false,
            "State": "active",
            "StartDate": "2022-09-16T06:38:47+00:00",
            "EndDateType": "unlimited",
            "InstanceMatchCriteria": "targeted",
            "CreateDate": "2022-09-16T06:38:47+00:00",
            "Tags": []
        }
    ]
}

4. インスタンス停止 (適応無し)

インスタンスを停止。

5. インスタンスのキャパシティ予約設定を [キャパシティの予約の指定] に変更

インスタンスにキャパシティ予約を関連付ける。

キャパシティ予約の利用可能な数量の変動無し。

6. インスタンス起動 (設定したキャパシティ予約から起動)

インスタンスを起動。

インスタンスが指定したキャパシティ予約から起動している状況。

7. インスタンス再停止 (キャパシティ予約の関連付けは解除されない)

インスタンスを停止。

インスタンスのキャパシティ予約の関連付けは解除されない。

キャパシティ予約の利用可能な数量が 1 に変動する。

8. インスタンス起動 (設定したキャパシティ予約から起動)

インスタンスを起動。

インスタンスが指定したキャパシティ予約から起動している状況。

おまけ

キャパシティ予約が [対象]、利用可能な数量が 1/1 の時、
既にインスタンス 1 台がキャパシティが関連付いてる状態で、

別のインスタンスもキャパシティ予約を関連付けできる。

先にインスタンス 1 台が起動して、
キャパシティ予約の利用可能な数量が 0/1 の時、

別のインスタンスが起動するとエラーが出力されてインスタンスの起動に失敗する。

The requested reservation does not have sufficient compatible and available capacity for this request.

対象のキャパシティ予約をクリックし、編集で数量を変更できる。
(キャパシティ予約作成後、インスタンスの適格性は変更できない模様)

数量を 2 に変更して、無事 2 台とも起動。

まとめ

キャパシティ予約は様々な条件でインスタンスに関連付くことが分かりました。
検証結果を纏めると、「インスタンスの適格性」は以下の様な用途によって設定を使い分けることができます。

  • インスタンスの適格性 [オープン]
    • 特定の AZ 等で指定した数のインスタンスの起動を確保する必要がある。
    • Auto Scaling Group 等、キャパシティ予約に関連付けるインスタンスを固定する必要が無い。
  • インスタンスの適格性 [対象]
    • 特定のインスタンスでキャパシティーの予約を関連付けた状態で、インスタンスを起動し続ける要件がある。
    • 他のインスタンスがキャパシティーの予約を利用し、対象のインスタンスが起動する際にキャパシティ予約の「利用可能な数量」が0になる恐れがある。

参考

アノテーション株式会社について

アノテーション株式会社は、クラスメソッド社のグループ企業として「オペレーション・エクセレンス」を担える企業を目指してチャレンジを続けています。「らしく働く、らしく生きる」のスローガンを掲げ、さまざまな背景をもつ多様なメンバーが自由度の高い働き方を通してお客様へサービスを提供し続けてきました。現在当社では一緒に会社を盛り上げていただけるメンバーを募集中です。少しでもご興味あれば、アノテーション株式会社WEBサイトをご覧ください。