[EC2] Reserved Instanceの更新予約機能について説明します

AWS運用自動化サービス「Cloud Automator」

CS課 佐竹です。
本日は2019年10月5日にひっそりとリリースされました、EC2 Reserved Instanceの更新予約機能(Renew/Queuing)について説明致します。

はじめに

この機能は正式名所があるのかないのか、少々呼び方が難しいのですがマネジメントコンソール上での表記は「Renew Reserved Instances」となっています。ドキュメントでは、「Queuing Reserved Instance」や「Queued Reserved Instance」と記載されています。ここではマネジメントコンソールの「Renew Reserved Instances」にフォーカスして説明致します。

どのような機能か

「Renew Reserved Instances」はEC2のReserved Instanceが期限切れしたタイミングで自動的に更新分を購入してくれるという予約機能です。アナウンスページは以下の通りです。

Queuing Purchases of EC2 RIs
https://forums.aws.amazon.com/ann.jspa?annID=7114

このアナウンスは2019年10月5日に出ましたが、数日前から機能的には「おもらし」リリースされていました。公式ドキュメントは以下に記載があります。

Queuing Your Purchase
https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ri-market-concepts-buying.html#ri-queued-purchase

なお公式のプレミアムサポートのナレッジセンターでは、以下の紹介があります。

EC2 リザーブドインスタンスを自動的に更新するようにスケジュールできますか?
https://aws.amazon.com/jp/premiumsupport/knowledge-center/renew-ri/

このページに「EC2 RI を自動的に更新するようにスケジュールすることはできません。」と記載があるのですが、2019年10月5日以後は可能になりました。早くこのページも修正されると良いですね。

メリット

期限切れ直後に購入が可能」というのが最大のメリットです。1分も漏らすことなくRIを適用し、EC2を利用することができます。
実際問題、いままでRIを期限切れ直後に購入するというオペレーションは難しかったのが実情です。理由は以下の通りです。

  • 次回更新日が土日にあたってしまい、更新を土日に実行する必要が出てしまう
  • 更新作業が土日に当たった場合はしょうがなく1日前に購入するか、週明けの営業日に購入するという妥協をしていた
  • RIは365日の期限なので、うるう年があると1日ズレが出てしまう

場合によってはAPIを実行するプログラムを組んでいる方もいらっしゃったかと思いますが、今後はこのような心配は不要です。ただ画面から「Renew」するだけで、期限切れと同時に新規に購入がされます。

制限

本 Renew Reserved Instancesの機能は、(なぜか)リージョナルRIのみが対象となっており、アベイラビリティゾーン指定のRIは対象外となります。ご注意ください。

実際にマネジメントコンソールから使ってみた

ちょうど、10月に期限切れを迎えるRIがあったのでこれ幸いと使ってみました。

EC2 のマネジメントコンソールのReserved Instanceの画面において、「Renew Reserved Instances」と「Delete Queued Reserved Instances」というボタンが増えています。

Renew Reserved Instances

Renew Reserved Instances を押下すると以下の画面が表示されます。

いきなりもう「Order」を押すだけで購入できる画面になります。この画面の注意点は、「Purchase More Like These」と同様に数量が「1」にされてしまうことです。元のRIが10台でも100台でも、数量が「1」になるのでここの修正は必須となります。お気をつけください。数量に問題がなければ「Order」ボタンを押下し、予約を行ってください。

Orderが正常に完了すると、上記画面が表示されます。

RIの一覧を確認すると、「State」が「queued」となっているRIができていました。この時点ですでにRI IDは付与されております。開始日時(Start)は未来日付となっており予約がされていることがわかります(※実際に購入を行ったのは10月9日です)。

また、更新元のRIの開始(Start)は「 October 16, 2018 at 7:49:12 PM UTC+9」、かつ有効期限(Expires)は「October 16, 2019 at 7:49:11 PM UTC+9」となっていました。これに対して購入予約したRIの開始が「October 16, 2019 at 7:49:11 PM UTC+9」となっていました。1秒重複しているため、更新されるRIの期限は「October 15, 2020 at 7:49:10 PM UTC+9」と1秒短くなってしまっていますが、このくらいは許容範囲でしょう。

RI Start Expires
予約されたRI October 16, 2019 at 7:49:11 PM October 15, 2020 at 7:49:10 PM
更新元のRI October 16, 2018 at 7:49:12 PM October 16, 2019 at 7:49:11 PM

補足しますと、上記「予約されたRI」側では期限が1日短くなっているようにみえますが、先に記載した通りRIの有効日数は365日間です。2020年の2月はうるう年のため、短くなったように見えいてます。

料金の発生タイミングと予約時の注意点について

「購入の予約」において前払い金などは不要です。そのため、支払いは実際に利用が開始されたタイミングで発生します。つまり実際の購入はStartの日時に行われますが、そのタイミングで「Limits(上限)」が確認されます。よって、もしQueuingしているRIが実際の更新タイミングでRIの購入数上限に抵触した場合、購入は失敗します
なお今後の機能追加により、QueuingしているRIが購入失敗してしまったタイミングで「失敗した」というメールが送信される機能が提供される予定だということでした。ただし現在でも「全額前払い」等の支払いが発生するRIの場合、購入タイミングで「Amazon Web Services Invoice Available」というメールがAWSから送られてきます。これが送られてきていない場合は失敗しているという判断も可能かと思われます。実際、今回Renew機能で予約をしたRIは「全額前払い」のRIでしたので、10月16日に「Amazon Web Services Invoice Available」メールが送られてきました。

Delete Queued Reserved Instances

「Delete Queued Reserved Instances」は「State」が「queued」となっているRIをキャンセルすることができる機能です。
使い方は「State」が「queued」となっているRIを選択し、メニューから「Delete Queued Reserved Instances」を実行しますと上記画面が表示されますので、「Yes, Delete」で削除します。

削除(キャンセル)された 「Queued Reserved Instance」は上図のように「queued-deleted」ステータスとなりRIの一覧に残存します。個人的には、TerminateしたEC2 Instanceのように完全に消えてほしいのですが残るのが少々気になりますね。

運用における注意点

先に「予約時の注意点」としてRIの購入数上限について記載しましたが、運用においてもう1つ気を付けるべき点があります。それは、Convertible RIとの兼ね合いです。
例えばConvertibleのRIを運用している状態で、ConvertibleのRIに対して「Renew Reserved Instances」を行った後に、予約元のConvertible RIを別のRIに交換したとします。このような場合でも、「Queued Reserved Instance」は交換前の元のRIのままです。もし予約されたRIも変更したいという場合は、一度「Delete Queued Reserved Instances」でキャンセルしてから再度「Renew Reserved Instances」を行ってください。

まとめ

RIの更新を予約できる「Renew Reserved Instances」と、予約をキャンセルできる「Delete Queued Reserved Instances」について説明させて頂きました。いままで何年もRIの購入オペレーションをこなしてきた身としては「やっとでてくれたかー!」という機能になっており、大変助かっています。是非皆様も有効活用ください。

余談ですが、こうなってくるとマネジメントコンソールから通常のRIの購入も予約できたらうれしいですよね。例えば「新規にRIを11月1日 0:00(JST)に購入してください」と依頼されてしまうと、そのタイミングで購入オペレーションをしないといけません。ですが、予約機能が単独で使えたらこのようなシーンでも生きてきます。是非マネジメントコンソールからも単独で予約機能が使えるようになれば嬉しいと思いながらこの記事を終えたいと思います。

※API では以下の通り、単独でRIを購入するときに未来日付を「PurchaseTime」に指定可能です

To queue a purchase for a future date and time, specify a purchase time. If you do not specify a purchase time, the default is the current time.
https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_PurchaseReservedInstancesOffering.html

AWS運用自動化サービス「Cloud Automator」