RIを購入せずに任意の期間でEC2のキャパシティを確保可能になりました

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

大栗です。

任意の期間でEC2のキャパシティ確保ができるようになりました。今まではリザーブドインスタンスをAZ指定で購入するゾーンRIの場合にキャパシティ確保ができましたが1年か3年のコミットが必要となっていました。これが任意の期間でキャパシティの確保をできるようになります。

オンデマンドキャパシティ予約

キャパシティ予約は新しいEC2の購入オプションで、キャパシティの確保ができるもので任意の期間で設定可能です。以下の内容を指定してキャパシティを確保します。

  • インスタンスタイプ
  • インスタンスプラットフォーム
  • アベイラビリティゾーン
  • テナンシー
  • EBS最適化の有無

オンデマンドキャパシティ予約では、オンデマンドで開始でき任意のタイミングや指定した時刻に終了が可能です。

リザーブドインスタンスでは条件に一致したインスタンスの料金が自動で割り引かれますが、オンデマンドキャパシティ予約では個別のインスタンスに対してキャパシティが予約されます。そのため同じインスタンスタイプでWebサーバとバッチサーバがあった場合に、バッチサーバに対してキャパシティを予約できます。

料金

オンデマンドキャパシティ予約はEC2インスタンスの実行の有無にかかわらずオンデマンドの料金が発生します。ただしリージョンRIとの組み合わせが可能です。

リザーブドインスタンスとの比較

キャパシティ予約 ゾーンRI リージョンRI
期間 コミットメント不要で、必要に応じて作成、キャンセルできる 1年か3年のコミットメントが必要 1年か3年のコミットメントが必要
キャパシティメリット 特定のAZのキャパシティを予約する 特定のAZのキャパシティを予約する AZにキャパシティを予約しない
請求割引 請求割引はない。通常のオンデマンドのレートで課金される。ただしリージョンRIを併用して請求割引を受けることはできる。 請求割引がある 請求割引がある
インスタンスの制限 リージョンごとのオンデマンドインスタンス制限がある AZごとに20台 AZごとに20台

注意

キャパシティ予約には以下の制限がありますのでご注意下さい。

  • アクティブとアンセットなキャパシティ予約はオンデマンドインスタンス制限にカウントされます
  • キャパシティ予約はAWSアカウント間で共有できません
  • キャパシティ予約は、あるAWSアカウントから別のAWSアカウントに譲渡できません
  • ゾーンRIの請求割引はキャパシティ予約には適用されません
  • キャパシティ予約はプレースメントグループで作成できません
  • キャパシティ予約はDedicated Hostでは使用できません

また、EC2インスタンスでのキャパシティ予約の設定変更はインスタンス起動中に行えません。そのため既存のインスタンスに適用するためには一度インスタンスを停止する必要がありますのでご注意下さい。

やってみた

キャパシティ予約の登録

EC2のコンソールを開くとCapacity Reservationsというメニューが増えています。ここでCreate Capacity Reservationをクリックします。

インスタンスの詳細で以下のように設定を行います。

項目 備考
インスタンスタイプ t3.small
EBS 最適化インスタンスを起動する チェック(固定) t3.smallはEBS最適化できない
起動時にインスタンスストアをアタッチ チェックなし t3.smallはインスタンスストアがない
プラットフォーム Linux/Unix
アベイラビリティーゾーン ap-northeast-1a
テナンシー デフォルト
数量 1

予約の詳細で以下のように設定を行い、リクエスト予約をクリックします。

項目 備考
予約終了 手動 自分で明示的に終了する必要がある
インスタンスの利用資格 open 条件が合えば個別の指定が不要
タグ Name:Reservations

予約に成功すると以下の注意メッセージが表示されます。

容量は明示的に保持され、デフォルトでオンデマンド料金で課金されます。この予約に対してインスタンスを起動すると、そのインスタンスの料金は、代わりに起動されたインスタンスの料金表モデルに基づいて計算されます。

予約が表示されます。まだ対象のインスタンスがないため起動されたインスタンスが0 of 1となっています。

インスタンスの適用

予約をしただけなので、次にインスタンスを起動します。

ここではAmazon Linux 2を起動します。

予約の設定と同様にインスタンスタイプはt3.smallを選択します。

予約の設定と同様にインスタンスタイプはt3.smallを選択します。他の設定は各環境に合わせて設定します。なおキャパシティ予約でインスタンスの利用資格をtargetedにしていた場合は明示的にCapacity Reservationを指定する必要があります。

項目 備考
インスタンス数 1
サブネット 任意のap-northewast-1aのサブネット
Capacity Reservation Open 条件に合う予約を自動適用する
EBS 最適化インスタンス チェック(固定) t3.smallはEBS最適化できない
テナンシー 共有

インスタンスを起動します。起動したインスタンスにCapacity ReservationCapacity Reservation Settingsという項目があります。Capacity Reservationは現在インスタンスが対象になっている予約IDを指し、Capacity Reservation Settingsはインスタンスで設定している予約IDとなります。Capacity Reservation Settingsで設定していても他のインスタンスで予約のキャパシティを使い切っている場合はCapacity Reservationが設定されません。

予約したキャパシティを使用しているため、起動されたインスタンスが1 of 1となっています。

条件に合わない場合

以降の起動エラーは条件が合わない予約を明示的に指定しているため発生しています。Capacity Reservationで"Open"を指定する場合はエラーは発生しません。

すでにキャパシティの空きがない状態ですが、ここでもう1台t3.smallを起動します。

ここではCapacity ReservationをOpenではなく予約IDで指定します。(0 available)と表示されておりキャパシティが無いことが分かります。この状態でインスタンスを起動します。

インスタンスの起動に失敗して、以下のメッセージが表示されます。キャパシティが足りないということですね。なおCapacity ReservationがOpenの場合はエラーにならずキャパシティ予約の対象外のインスタンスとして起動します。

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

同様にテナンシーが異なる場合は、以下のメッセージが表示されます。

Capacity Reservation's attribute does not match with requested instance parameter. Attribute: Tenancy, requested value: dedicated, expected value: default

EBS最適化がデフォルトでないインスタンス(旧世代のもの)でEBS最適化設定が異なる場合は以下のようなメッセージとなります。

Capacity Reservation's attribute does not match with requested instance parameter. Attribute: EbsOptimized, requested value: true, expected value: false

プラットフォームが異なる様にWindowsで起動しようとすると、以下のメッセージとなります。

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

さいごに

今まではリザーブドインスタンスの割引とキャパシティ確保は一体化していました。そのため短期的な容量の確保が難しく、短期的なキャンペーンなどでまれに起動が失敗することがありました。今回のキャパシティ予約で短期間のキャパシティの確保が可能になったので、対応できるユースケースに柔軟性が生まれました。

注意点としてリザーブドインスタンスの様に割引はないのでリージョンRIを組み合わせたり、短期的な一発勝負なテレビ放映などのイベントで利用すると良いと思われます。

上手くユースケースに合わせてリザーブドインスタンスと使い分けることが必要になりますので、利用場面をきちんと検討していきましょう。