AWSのリザーブドインスタンスのススメ

みなさんAWSのEC2を使ってますか?
最近、AWSばかり触っている気がしないでもない東京Kです。

いろいろとAWSでのネタの種はあるのですが、今日のお話は・・・

「EC2を使っていてリザーブドインスタンスを使ってない人は今すぐ使うことを検討しましょう。」

以上です。

リザーブドインスタンス(RI)って?

EC2は通常はオンデマンド(=電源が入っている時間×単価)の契約ですが
リザーブドインスタンスとはEC2を年間契約する仕組みです。

年間契約なので値段が安くなります。

契約方法は、例えば既に、t3.largeのEC2インスタンスが東京リージョンにあった場合、「t3.largeの1年契約をする」といった操作をAWSの管理コンソールで行うだけでOKです。

通常のEC2インスタンスのt3.largeは、電源オンの時に限って0.1088USD/時の料金が発生します。

t3.largeのRIが1つ購入されると、購入された瞬間からRIの料金である0.069USD/時が電源などの概念関係なく常に発生するようになります。その代わりに、t3.largeのEC2インスタンスの1台分がRIの契約中は無料になります。(つまりRIの金額だけ課金されるようになる)

これがRIの仕組みです。

実際にはRIの契約体系は様々な条件がありますが、上記は、スタンダードで、前払い無しの1年契約で、東京リージョンの場合の想定です。また、金額やここに書かれている情報は執筆時点での情報となります。

リザーブドインスタンスの適用のされ方

ところで、RIでt3.largeを購入したにもかかわらず、EC2インスタンスがt3.mediumに下がった場合はどうなるでしょう?
この場合、RIの金額のみで、t3.mediumの請求は発生しません。

では、EC2インスタンスがt3.xlargeに上がった場合はどうなるでしょう?
この場合、RIの金額に加えて、t3.xlargeの請求が半額発生します。

詳しくは以下を読むと手っ取り早いです:
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/apply_ri.html

その上で、わかりやすく説明すると、RIで買っているものは「無料枠を格安で買っている」と考えれば良いです。

「RIでt3.largeを購入」は「1時間あたり、t3.small相当の4時間分の無料枠を購入」と考えます。

突然出てきた4という数字ですが、これは、「正規化係数」といって「AWSのインスタンスサイズが、smallに比べて何倍と見なすか?」という係数です。
上記のURLに表があります。

余談ですが、AWSの料金表を注意深く見てみると、smallの料金×正規化係数で各インスタンスサイズの料金が決まっていることも分かります。
例)t3.smallは0.272USDで、正規化係数2のt3.mediumは2倍の0.272×2=0.544USD等

その上で

EC2インスタンスがt3.mediumに下がった場合はどうなるでしょう?

この件ですが、まずは、t3.mediumは正規化係数を見ると2ですので、1時間動かすとsmall2時間分の課金が発生すると考えます。
一方で、購入したt3.largeのRIは1時間あたりsmall4時間分の無料枠です。この結果、t3.mediumは無料で利用できるというわけです。
※もちろんRIの料金を払っているわけですので、トータルで無料という意味ではないです。RIの課金は続く代わりに、オンデマンド課金がされないという意味です。

EC2インスタンスがt3.xlargeに上がった場合はどうなるでしょう?

この場合も簡単ですね。
t3.xlargeは正規化係数を見ると8ですので、1時間動かすとsmall8時間分を消費します。
RIで購入済みなのはsmall4時間分の無料枠で、残りsmall4時間分がオンデマンド課金対象となります。
そのため、要するに1時間あたりt3.xlarge料金(0.2176USD)の半額(0.1088USD)がオンデマンド課金対象になります。
(あるいは、smallの料金は0.0272USDですので、その4倍の0.1088USDが課金されると考えても良いです。)

このように、RIで買った無料枠を、同一ファミリー内の異なるサイズのインスタンス間で、柔軟に融通する機能を「インスタンスサイズの柔軟性」という機能で、AWSでは自動的に適用されます。

「インスタンスサイズの柔軟性」は本当に柔軟です。
RI購入時にはどのインスタンスで利用するかは指定する必要がありません。そのため、t3.large(正規化係数4)を購入して、t3.micro(正規化係数0.5)を8台起動しても、RIが適用されます。

また、AWSの複数のアカウントを1つの親アカウントでまとめて支払う設定をしている場合、RIはアカウントを超えて自動適用されます。

なお、注意が必要なのはt2.medium等の異なるファミリーのEC2インスタンスを作った場合です。
インスタンスサイズの柔軟性は同一ファミリー内で適用されますが、t3とt2ですと、ファミリーが異なるため、t3.largeのRIを買ってもt2.mediumは別途料金がかかることになります。

というわけで、長期間EC2インスタンスを起動しっぱなしにすることがあるならば、RIは忘れずに導入しましょう・・・の巻きでした。