リザーブドインスタンスを買うのと夜間休日停止するのどちらが安いか調べてみた


はじめに

リザーブドインスタンス(以下、RI)の購入は、AWSのコスト削減を考えた際に必ずといっていいほど選択肢の一つに入ると思います。
しかし、RIはインスタンスを停止していてもインスタンスに必要となる料金が変わらないため、24時間365日稼働するシステムではいざ知らず、開発環境のように稼働時間が限定されている環境下では使わない時は停止する運用をする方が安上がりになるのでは??と思い至り、AWSで代表的なサービスであるEC2、RDSについてそれぞれの料金を調べました。

RI購入時の考慮ポイント

まず始めにRIを購入する際の考慮ポイントを抑えておきます。
以下にあげるポイントは主にコスト削減効果とRI柔軟性に関連しています。

  • 考慮ポイント
    • RI適用期間(1年 or 3年)
    • AZの指定有無(キャパシティを予約可能)
    • 支払い方法(前払いなし、一部前払い、全前払い)
    • RIタイプ(スタンダード or コンパーチブル)

EC2にはRIタイプにスタンダード、コンパーチブルがありますが、これらについては変更可能な範囲に以下の違いがあります。
以下の条件を見てもらうと予想できると思いますが、スタンダードRIの方が割引率は高いです。
(一例としてt3.largeを全額前払いした際、スタンダード34%、コンバーチブルは24%の割引率)

  • スタンダードRI

    • RIの一部の属性の変更は可能
    • スコープ(Region/AZ)
    • AZ
    • インスタンスサイズ
  • コンバーチブルRI

    • 新しい属性の別のRIへの交換も可能
    • プラットフォーム(OS等)
    • インスタンスファミリー/サイズ
    • テナンシー(専有 or デフォルト)
    • 支払いオプション

コンバーチブルRIでは変更時の差額を支払うことで購入した条件からある程度変更可能となりますが、想定されるケースとして今の構成よりもリソースを増強したいケースが設定されているようです。言い換えると今よりコストを下げる方向への変更はできず、高くなる方向にしか変更はできません。
ex.)m5.large * 1 → t3.large * 1やt2.large * 1 → t3.large * 1などの変更は不可能。

夜間休日に停止した場合とRIを購入した場合の比較

本題のコスト比較に入ります。
リージョン、DBエディション等、環境により微妙な差異はあるかと思いますが、
概ね以下のようなコスト差になるかと思います。

EC2編

https://aws.amazon.com/jp/ec2/pricing/reserved-instances/pricing/
インスタンスタイプ:t3.small
リージョン:アイルランド

ケース 年間コスト($) 計算式 備考
オンデマンドで夜間土日停止して運用する場合 95.21 0.0228 * 261 * 16 1時間のインスタンス料金:0.0228
稼働日:261(365日 * 5日 / 7日)
1日の稼働時間:16(8:00 - 24:00)
オンデマンドで夜間土日祝停止して運用する場合 85.36 0.0228 * 261 * 16 1時間のインスタンス料金:0.0228
稼働日:234(365日 - 121日)
1日の稼働時間:16(8:00 - 24:00)
スタンダードRIを購入(前払いなし) 141.96 11.83 * 12 月額料金:11.83
スタンダードRIを購入(一部前払い) 135.44 67.44 + (11.83 * 12) 前払い料金:67.44
月額料金:11.83
スタンダードRIを購入(全額前払い) 133.00 - 前払い料金:133.00
コンバーチブルRIを購入(前払いなし 198.00 16.50 * 12 月額料金:11.83
コンバーチブルRIを購入(一部前払い) 188.56 94.00 + (7.88 * 12) 前払い料金:94.00
月額料金:7.88
コンバーチブルRIを購入(全額前払い) 185.00 - 前払い料金:133.00

RDS編

インスタンスタイプ:r4.large
DBエディション:PostgreSQL
リージョン:アイルランド

ケース 年間コスト($) 計算式 備考
オンデマンドで夜間土日停止して運用する場合 1503.36 0.32 * 261 * 18 1時間のインスタンス料金:0.32
稼働日:261(365日 * 5日 / 7日)
1日の稼働時間:16(7:00 - 25:00)
オンデマンドで夜間土日祝日停止して運用する場合 1347.84 0.32 * 234 * 18 1時間のインスタンス料金:0.32
稼働日:234(365日 - 121日)
1日の稼働時間:18(7:00 - 25:00)
スタンダードRIを購入(前払いなし) 1839.60 153.30 * 12 月額料金:153.30
スタンダードRIを購入(一部前払い) 1576.00 700.00 + (73.00 * 12) 前払い料金:700.00
月額料金:73.00
スタンダードRIを購入(全額前払い) 1544.00 - 前払い料金:1544.00

※今回の例では、DBはアプリケーションの停止起動の前後1時間ずつ余裕を持たせているため、1日の稼働時間が長くなっています。

まとめ

上記のようにRIを購入するよりも夜間、土日(祝)は停止する方がコストを抑える効果があることがわかります。
当該環境ではEC2、RDSは夜間と土日に停止しており、EC2はElasticBeanstalkで稼働しているためスケジュールスケーリングで、RDSはLambdaのイベント発火で任意の時間に停止起動するスクリプトで起動停止を制御しています。
RIは購入しさえすれば割引が適用されるメリットがありますが、インスタンスタイプのロックインや構成変更の柔軟性を損なう等、少なからずデメリットもあるのでよく考えて購入を検討したいです。