Amazon RDS の新機能「キャパシティ予約」(On-Demand Capacity Reservations)をためしてみた

Amazon RDS の新機能「キャパシティ予約」(On-Demand Capacity Reservations)をためしてみた

RDS for MySQL で On-Demand Capacity Reservations を試しました。従来からキャパシティ予約が利用できた EC2 と同様に、予約すると費用は発生しますが、RDS や Aurora でもキャパシティ不足を回避できるようになりました。
2026.10.22

はじめに

2026年10月21日、Amazon Aurora と Amazon RDS で On-Demand Capacity Reservations(以下、キャパシティ予約)が使えるようになりました。

https://aws.amazon.com/about-aws/whats-new/2026/10/amazon-aurora-rds-on-demand-capacity-reservations/

AZ 単位でコンピュートの容量を確保しておき、DB インスタンスの作成・復元・スケール・起動が容量不足で失敗するのを防ぐ機能として発表されています。確保した容量を、以下では枠と呼びます。

この記事で試した予約は、種類が immediately(コンソールでは「今すぐ」)、台数が 1 台分です。環境は RDS for MySQL 8.4.11、db.t3.micro、東京リージョンの単一 AZ(ap-northeast-1a)です。予約は検証ごとに作成し、終了日時は作成の約 1 分後か 15 分後のどちらかにしました。

予約を作成し、ID を指定して DB インスタンスを作成する

予約は create-db-capacity-reservation で作成します。--end-date は UTC で指定します。例の値は実測時のものなので、実行時刻より後の日時に置き換えてください。

aws rds create-db-capacity-reservation \
  --db-capacity-reservation-name odcr-r1c \
  --db-instance-class db.t3.micro \
  --engine mysql \
  --capacity-per-availability-zone 1 \
  --availability-zones ap-northeast-1a \
  --end-date 2026-10-22T00:28:20Z
{
    "DBCapacityReservation": {
        "DBCapacityReservationName": "odcr-r1c",
        "DBInstanceClass": "db.t3.micro",
        "Engine": "mysql",
        "ReservedCapacityPerAvailabilityZone": 1,
        "AvailableCapacityPerAvailabilityZoneList": [
            {
                "AvailabilityZone": "ap-northeast-1a",
                "AvailableCapacity": 1
            }
        ],
        "EndDate": "2026-10-22T00:28:20+00:00",
        "CreateDate": "2026-10-22T00:27:21.292000+00:00",
        "State": "active",
        "DBCapacityReservationIdentifier": "dbcr-abc123example"
    }
}

作成の応答で State が active になっているので、待たずに ID を指定できます。

ドキュメントによると、予約は targeted で、予約を指定したインスタンスだけが枠を使います。応答の DBCapacityReservationIdentifier が予約の ID で、dbcr- で始まります。これを --db-capacity-reservation-identifier に渡して、インスタンス odcr-db1(以下、1 台目)を作成します。DB サブネットグループは自分の環境のものに置き換えてください。

aws rds create-db-instance \
  --db-instance-identifier odcr-db1 \
  --db-instance-class db.t3.micro \
  --engine mysql \
  --engine-version 8.4.11 \
  --master-username admin \
  --manage-master-user-password \
  --availability-zone ap-northeast-1a \
  --allocated-storage 20 \
  --db-subnet-group-name <自分の DB サブネットグループ> \
  --no-publicly-accessible \
  --db-capacity-reservation-identifier dbcr-abc123example

リクエストは受理され、create-db-instance の応答にも DBCapacityReservationIdentifier が入りました。予約の空きを describe-db-capacity-reservations の AvailableCapacity で確認すると、受理の前は 1、直後は 0 でした。同じ予約の ID を指定した 2 台目は、空きがないため拒否されました。

予約の名前を --db-capacity-reservation-identifier に渡すと、作成と起動のどちらも InvalidParameterValue で拒否されました。メッセージは Invalid DB capacity reservation identifier: <予約の名前> です。ドキュメントと各コマンドの help(AWS CLI 2.38.4)には名前でも指定できると書かれていますが、受理されたのは ID を渡した場合だけでした。

https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/capacity-reservations.using.html

作成が拒否されるケース

予約を指定した create-db-instance は、次の状況で拒否されました。

状況 エラーコード メッセージ(先頭)
存在しない ID InvalidParameterValue Invalid DB capacity reservation identifier: dbcr-doesnotexist
空きがない(同じ予約の 2 台目) InvalidParameterValue RDS can't use DBCapacityReservation dbcr-abc123example for this Single-AZ DB instance because the reservation doesn't have enough available capacity in Availability Zones.
終了日時の 13.5 秒後に指定した、失効済みの予約 InvalidDBCapacityReservationState DBCapacityReservation end date is already expired.
予約と別の AZ InvalidParameterCombination The Availability Zone (AZ) parameter must match the AZ of the DBCapacityReservation.
予約と別のクラス(db.t3.small) InvalidParameterCombination The DB instance class must match the instance class of the DBCapacityReservation.

存在しない ID と空きがない場合は、どちらも InvalidParameterValue なので、メッセージで見分けます。別の AZ と別のクラスは、予約に空きがある状態でも拒否されました。

終了日時を過ぎた予約と作成中のインスタンス

予約は終了日時を過ぎると expired になり、空きが 0 になります。5 秒間隔で状態を確認すると、終了日時の直前は active、直後は expired でした。

予約の ID を指定して作成した 1 台目は、予約の終了日時を過ぎても作成が続き、available になりました。その後、次節の検証で停止するまで、予約の ID を持ったまま稼働しました。

稼働中・停止中のインスタンスを予約に入れる

1 台目が失効した予約の ID を持ったまま稼働している状態で、同じクラス・AZ・エンジンの予約を新しく作成しました。新しい予約の空きは終了日時まで 1 のままで、1 台目の DBCapacityReservationIdentifier も失効した予約の ID のままでした。

ドキュメントによると、稼働中のインスタンスへ予約を指定する modify-db-instance は、インスタンスクラス、Multi-AZ、ライセンスモデルのいずれかの変更と同時でないと失敗します。

構成を変えずに既存のインスタンスを予約に入れる手順として、ドキュメントにはインスタンスを停止し、予約を指定して start-db-instance を実行する方法が示されています。

https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/capacity-reservations.stopstart.html

この手順を、予約の ID を持たない停止中のインスタンス 2 台で試しました。1 台は前節の 1 台目で、停止の途中で失効した予約の ID が外れていました。もう 1 台は、予約を指定せずに作成してから停止したインスタンスです。どちらも起動の直前に予約を新しく作成し、終了日時は 1 台目用を約 1 分後、もう 1 台用を 15 分後にしました。

dbcr- で始まる ID を渡した start-db-instance は受理されて starting になりましたが、予約の空きは 1 のままでした。確認した期間は、15 分の予約では起動が完了するまで、1 分の予約では起動の受理から予約の終了日時までの約 56 秒間です。available になっても、インスタンスに DBCapacityReservationIdentifier は付きませんでした。一方、予約の ID を指定した create-db-instance では、受理の直後に空きが 1 から 0 に減りました。

15 分の予約は、起動を確かめた後、終了日時の前に cancel-db-capacity-reservation でキャンセルしました。リクエストは受理され、応答の State は cancelled、空きは 0 でした。

料金と RI・Savings Plans との関係

この節の内容はドキュメントに基づきます。キャパシティ予約は AZ の容量を確保する仕組みで、割引は付きません。リザーブド DB インスタンス(RI)と Database Savings Plans は割引の仕組みで、容量は確保しません。キャパシティ予約とこれらを併用すると、予約の枠を使うインスタンスに割引が適用されます。

https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/capacity-reservations.getting-started.html

予約の料金は On-Demand と同じ単価で、キャンセルされるか終了日時を迎えるまで、秒単位(最小 60 秒)で課金されます。枠を使っているインスタンスの分はインスタンス料金として、使われていない枠は未使用の予約として請求されます。インスタンスを停止すると、その分の枠も未使用になります。予約の対象はコンピュートで、ストレージや I/O の料金はこれまでどおりです。

https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/capacity-reservations.pricing-billing.html

キャンセルの条件は予約の種類で異なります。immediately はコミットがなく、active の間はいつでもキャンセルできます。future-dated は 5〜120 日先に開始する予約です。各 AZ で 32 vCPU 以上が必要で、最低 14 日(X ファミリーは 12 週間)のコミットがあり、active になった後もコミット期間中はキャンセルできません。キャンセルした予約の枠を使っていたインスタンスは、On-Demand として動き続けます。

https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/capacity-reservations.canceling.html

まとめ

RDS と Aurora でも、EC2 と同様のキャパシティ予約を使えるようになりました。

各 AZ で 32 vCPU 以上、最低 14 日のコミットという条件のため、今回は検証を見送っていますが、将来の日付に開始する future-dated の予約(5〜120 日先)も発表されています。

移行やイベントの前に、特定のインスタンスクラスと AZ で DB インスタンスを確実に立ち上げたい場合は、キャパシティ予約を作成し、予約の ID を指定してインスタンスを作成してみてください。

この記事をシェアする

AWSのお困り事はクラスメソッドへ

関連記事