読まなきゃ損($∀$)リザーブドインスタンスのススメ -2019春-

読まなきゃ損($∀$)リザーブドインスタンスのススメ -2019春-
111件のシェア(ちょっぴり話題の記事)

こんにちは。池田です。今までにもリザーブドインスタンス(RI)に関する記事をいくつか書いていますが、新年度が近づいていることもあるためか各方面から RI に関する質問や相談をいただくことが増えてきています。
そこで今回は今までに書いた内容も含めますが、2019年3月時点での最新情報を踏まえて RI に関する基本的かつ大切な事項をご紹介したいと思います。
* 3/14 池田ならこう買うと思いますを追記しました。

もくじ

  • そもそも RI とは何? - RI 全般の基礎知識 -
  • EC2 RI について
  • RDS RI について
  • Redshift RI について
  • ElastiCache RI について
  • DynamoDB RI について
  • Elasticsearch Service RI について
  • RI の料金を調べる方法
  • 損益分岐点の計算について
  • 購入時のエラーについて
  • 池田ならこう買うと思います
  • おわりに
  • そもそも RI とは何? - RI 全般の基礎知識 -

    AWS の各種サービスに対して1年または3年という長期利用を予約することで、オンデマンドインスタンス料金に比べ利用料金が大幅に割引(最大 75%)される、定期券やシーズン券のような仕組みです。1年よりも3年の方が割引率が高く設定されています。
    サービスやリソースによって多少の例外はありますが、基本的に「全前払い」「一部前払い」「前払いなし」という3種類の支払い方法が存在し、それぞれはクレジットカードを使った買い物で言う「一括前払い」「頭金ありの均等分割払い」「頭金なしの均等分割払い」とほぼ同等の支払い体系となります。原則、購入後に支払い方法を変更することはできませんのでご注意ください(EC2 コンバーティブルのみ可能です)。
    どのサービスにおいても RI 購入後にインスタンスの再起動をする必要はありません。RI は特定のインスタンスに紐づける仕組みではなく、所有する RI の適用対象となるオンデマンドインスタンスが稼働していれば AWS によって自動的に割引の適用が開始されます。また、購入に際して見積書や発注書などのやり取りは必要なく、各サービスのマネジメントコンソールにて任意のタイミングで必要なものを自由に購入することが可能です。
    ただし、長期利用を前提として料金の割引が提供されるため、購入後のキャンセルは認められません。購入対象の選定や、購入時の操作は慎重に行う必要があります。

    AWS FAQ

    Q. リザーブドインスタンスをキャンセルすることは可能ですか?
    A. リザーブドインスタンスのキャンセルおよび前払い分の返金はできません。予めご了承ください。

    EC2 の RI では「スタンダード」と「コンバーティブル」という2つのクラスが提供されていますが、これについては後述します。

    RI は EC2 のほか下記のサービスで提供されていますが、それぞれ「1ヶ月間で購入可能な上限数」が設定されています(AWS サービスの制限)。初めて購入する場合や、従来よりも多く購入する場合には EC2 ダッシュボードの「制限」ページや Trusted Advisor で事前に確認し必要に応じて上限緩和申請を実施しておきましょう。

    • RDS
    • Redshift
    • ElastiCache
    • DynamoDB
    • Elasticsearch Service

    また、購入から1年または3年が経過し、有効期間を終えた RI はステータスが retired と表示され割引の適用が終了します。RI には「自動更新」という機能以前に「更新」という考え方がないため、継続して RI を利用したい場合は「新たに買い直す」必要があります。
    この買い直しのタイミングとシステムの改修、更新時期を揃えると、最新のインスタンスファミリーへの移行やスペック変更によって発生するオンデマンド料金を削減しやすくなるかと思います(後述する EC2 および RDS の「インスタンスサイズの柔軟性」もぜひ活用してください)。

    インスタンスタイプ等を変更する事なく RI の利用を継続したい場合、買い直すタイミングはどうするのがよいでしょうか。有効期間内に買い直すか、有効期間を終えるタイミングに合わせるか、有効期間を終えてから購入するかの3パターンあると思いますが、2番目の「タイミングを合わせる」のはなかなかハードルが高いように感じます。
    実際問題として秒単位まできっちり揃えての購入は困難だと思われますので、現実的には「有効期間内に買い直す」または「有効期間を終えてから買い直す」になるでしょう。それぞれ「有効期間が一部重複してもったいない」「オンデマンド料金が発生して年間計画の予算と差異が生じる」などの懸念があると思います。何れにしても所有している RI の有効期間はダッシュボードで確認しておきましょう。
    買い直しのタイミングについて、どちらを選ぶかは主に予算的な視点に立つ必要があるかと思います。

    • $1.00 でも絶対に予算超過をしたくない場合
      • 有効期間内に買い直しましょう
    • 多少のオンデマンド料金が追加で発生しても問題ない場合
      • 追加で発生する費用の許容範囲によります

    購入した RI の内訳やその数量、有効期間や時間単価などは買い直しのほか次年度の予算計画などといった場面でも重要になると思いますので、可能な限り把握しておくようにすることをお勧めします。

    EC2 RI について

    Amazon Elastic Compute Cloud (EC2)のオンデマンド料金を割り引いてくれる仕組みです。
    利用状況の安定したサービスや社内システム用途など、長期に渡り稼働させることがわかっているのならぜひとも RI の利用をご検討ください。逆に、動作検証などで頻繁にインスタンスサイズやインスタンスタイプ、プラットフォームを変更する場合や短期間だけの利用であるなら RI ではなく、スポットインスタンスの利用を検討する方が良いでしょう。
    (* スポットインスタンスも RI 同様にオンデマンド料金より安く利用できる仕組みですが、これらを併用することはできません。)
    2019年3月時点で提供されているプラットフォーム(OS)は以下です。

    • Linux/UNIX (Amazon Linux や CentOS、Ubuntu など)
    • Linux with SQL Web
    • Linux with SQL Enterprise
    • Linux with SQL Standard
    • SUSE Linux(SLES)
    • Red Hat Enterprise Linux
    • Windows
    • Windows with SQL Server Standard
    • Windows with SQL Server Web
    • Windows with SQL Server Enterprise

    先に記載した通り EC2 の RI には「スタンダード」と「コンバーティブル」という2つのクラスが提供されています。両者の違いおよび共通点は以下となります。

    • 「スタンダード」の方が「コンバーティブル」より割引率が高い
    • 「スタンダード」は、購入時に指定したインスタンスサイズ(large や medium など)やインスタンスファミリー(t2 や c5 など)の「変更」はできないが、複数の RI を「結合」して1つの RI にしたり、1つの RI を複数の RI に「分割」することは可能(* Linux/UNIX に限る)。
      • t2.medium 4つを t2.large 2つや t2.xlarge 1つへすることができる(結合)。その逆も可能(分割)。(* インスタンスサイズの変更)。
      • 異なるプラットフォーム(OS)の RI へ「変更」することはできない。
    • 「コンバーティブル」は、差額費用の支払いをすることで t2 を t3 などの「異なるインスタンスファミリーとの交換」や large から 2xlarge など「異なるインスタンスサイズとの交換」と、デフォルト(共有タイプ)かハードウェア占有タイプといった「異なるテナンシーとの交換」および Linux/UNIX から Windows など「異なるプラットフォームとの交換」が可能。
    • 「コンバーティブル」は、「支払いオプションが異なるものと交換」が可能(*一部制限があります)。
    • 「スタンダード」と「コンバーティブル」共に AZ 指定(キャパシティ予約あり)またはリージョン指定(インスタンスサイズの柔軟性あり *Linux/UNIX のみ)という「スコープの変更」が可能(購入画面デフォルトはリージョン指定です)。
    • 「スタンダード」と「コンバーティブル」共に購入後は 1年から3年や 3年から1年といった「予約期間の変更」はできない。

    RI の変更、交換、インスタンスサイズの柔軟性については下記 AWS ドキュメントで詳細をご確認ください。

    *コンバーティブルの支払いオプション変更の制限

    全額前払いまたは一部前払い コンバーティブルリザーブドインスタンス を前払いなし コンバーティブルリザーブドインスタンス に交換することはできません。

    *「変更」と「交換」については、それぞれ「modifying」と「exchange」とのことです。日本語的にはどちらも取り替えることとして受け取れるので混乱しそうですが「修正」と「交換」という意味だと考えれば区別しやすいですね。

    RI の「交換」画面スクリーンショット

    RI の「交換」画面


    RI の「変更」画面スクリーンショット

    RI の「変更」画面

    インスタンスサイズの柔軟性についての弊社ブログ記事もご紹介しておきます。

    知らなかった。RIが小さいインスタンスタイプから順に適用されることを

    また、EC2 のキャパシティ予約については、下記ブログ記事でご紹介しているように、RI を購入せずとも任意の期間でのオンデマンドキャパシティ予約も可能です。

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

    RDS RI について

    Amazon Relational Database Service (Amazon RDS)のオンデマンド料金を割り引いてくれる仕組みです。
    以下の DB エンジンがサポート(提供)されています。

    • Amazon Aurora
    • MySQL
    • MariaDB
    • Oracle
    • SQL Server
    • PostgreSQL

    また、ライセンスが必要となる Oracle および SQL Server においては「ライセンス込みインスタンス(license included : li)」と「自分のライセンスを使用 (bring your own license : BYOL)」が提供されています。
    RDS の RI には、EC2 のような「テナンシー」「スコープ」「コンバーティブル 」というオプションはありませんが、インスタンスサイズの柔軟性は提供されています。
    Amazon RDS リザーブドインスタンス

    MySQL、MariaDB、PostgreSQL、Amazon Aurora のデータベースエンジン、および Oracle データベースエンジンの「自分のライセンスを使用」 (BYOL) エディションでは、インスタンスサイズの柔軟性が提供されます。

    Aurora はその仕組み上、提供がありませんが他の DB エンジンではシングル AZ と、マルチ AZ の RI が提供されています。

    Redshift RI について

    Amazon Redshift RI は別名「リザーブドノード」とも呼ばれていますが、EC2 や RDS の RI と同様、1年または3年の長期利用を予約することでオンデマンド料金に対して大幅な割引を受けることができる仕組みです(最大75%)。
    旧世代となっている dc1 ファミリーから、現行世代の dc2 ファミリーへのアップグレードは無料で行えますし、性能面でのメリットも得ることができますのでご検討ください。

    [お知らせ]Amazon Redshift、DC1のリザーブドインスタンスをDC2への無料アップグレードを発表しました

    ElastiCache RI について

    ElastiCache の RI は「リザーブドキャッシュノード」と呼ばれています。支払いオプションが他の RI と比べると少し戸惑うかもしれません。現行世代と旧世代のリザーブドキャッシュノードで異なる支払いオプションが用意されているからです。

    • 現行世代のリザーブドキャッシュノードの支払いオプション
      • 「全前払い」「一部前払い」「前払いなし」の3種類
    • 旧世代のリザーブドキャッシュノードの支払いオプション
      • ノードタイプにより「軽度」「中度」「重度使用」の3種類または何れか1種類以上

    提供されているキャッシュエンジンは Redis および Memcached です。

    DynamoDB RI について

    DynamoDB における RI は「リザーブドキャパシティーユニット」を指しており、100ユニット単位での購入となりますが「プロビジョニングされたキャパシティー」と比較して割り引かれた料金で利用できます。
    2019年3月時点で DynamoDB の利用には「オンデマンド」「プロビジョニング」「リザーブドキャパシティ」の3種類の方法があり、どうするのが良いか悩むことがあると思います。オンデマンドでの利用とプロビジョニング、リザーブドキャパシティでの料金比較は、下記ブログ記事がわかりやすく解説していますのでご紹介します。ぜひご参照いただきコスト削減に役立ててください。

    DynamoDBのオンデマンドとプロビジョニングの料金を比較をしてみた #reinvent

    また、購入するユニット数の算出については下記ブログに紹介がありますのでご参照ください。

    DynamoDBの料金を最適化しよう【初級編】

    Elasticsearch Service RI について

    Elasticsearch Service の RI では購入時に「予約名(一意の名前)」を指定する必要がある点が他のサービスの RI と異なっています。
    料金ページでは「前払いなし」を「NURI(No Upfront Reserved Instance)「一部前払い」を「PURI(Partially Upfront Reserved Instance)」「全前払い」を「AURI(All Upfront Reserved Instance)」と記載しています。

    RI の料金を調べる方法

    まずは AWS の各サービスごとに用意されている料金ページが挙げられます。ただし、料金を知りたい対象が多い場合はページのスクロールなど大変な場面が多いと思いますので、簡易見積ツールの利用をお勧めします。

    AWS再入門2018 プロマネや営業のためのAWS Monthly Calculator入門編

    損益分岐点の計算について

    損益分岐点の計算方法をご紹介します。
    たとえば、EC2であればEC2 RI料金表に記載されている「オンデマンドと比較した費用節減」を参考に以下のように計算します。
    100 - (オンデマンドと比較した費用節減 %)= RI購入によってコストメリットが得られるようになるインスタンスの稼働時間/月
    例: EC2 m5.4xlarge スタンダードRIを東京リージョンで全前払いにて購入する場合は「オンデマンドと比較した費用節減」が35%なので、1ヶ月あたり65%(474.5時間)以上稼働させるならRIを購入した方が良いということになります。
    ※ 365(日) ÷ 12(月) × 24(時間)= 730(時間)に対する65%

    購入時のエラーについて

    稀にエラーが発生して購入手続きが完了できないことがあります。以下の2種類が多いようです。

    • ステータスコード400
      • 購入可能数の上限に達していて、それ以上を購入しようとした時に発生します。EC2ならダッシュボードの「制限」ページ、RDSならTrusted Advisorで確認ができます。他のサービスはサポートに問い合わせる必要があるようです。上限値に達していた場合は上限緩和申請を行う必要があります。
    • ステータスコード500
      • Insufficient capacityエラーは購入しようとしたRIの在庫がない場合に発生します。時間をおいて試してください。

    池田ならこう買うと思います

    RI といえばコストメリットが大きい分、関心が価格に向きがちですが、特定のインスタンスを特定 AZ で長期運用したい場合などは AZ 指定によるキャパシティ予約(確保)を利用することも可能です。以下に筆者が思いついた3つのシーンにおいて現時点で RI を新規購入する場合「池田ならこう買うと思います」を挙げてみます。

    検証環境やサービス開始初期

    どのインスタンスタイプ、インスタンスサイズで運用していくかが確定していない状況だと思います。こういった場面では無理に RI を購入しない方が良いかもしれません。一方で多くのオンデマンドインスタンスを利用しており、他の案件やシステムでも同じインスタンスファミリーを利用しているような場合であれば「リージョン指定(デフォルト)のコンバーティブルを 1年」で買うのが良いかなぁと考えます。
    理由としてはコンバーティブルであれば、プラットフォーム(OS)やインスタンスファミリーを変更(交換)することも可能ですので、例えば検証環境では m3 ファミリーで問題ないと構築したサービスがリリース後に想定以上の利用があり(うれしい悲鳴)急遽、m5 ファミリーに変更し、更にサイズアップもする。といったことがあっても対応が可能ですし、特に変更せずともインスタンスサイズの柔軟性の恩恵を得られるからです。

    基幹業務向けシステムや安定したサービス

    1年以上の長期間継続運用が確定している業務系システムや、既に安定しているサービスなどであれば「AZ 指定のスタンダードを 3年」かなぁと考えます。
    これはスタンダードで 3年というのは基本的に最も割引率が高くなっている点と、キャパシティ予約とすることで万が一 AWS 側でリソース不足となった場合であっても確実に起動できるからです(一部インスタンスでは前払いなしタイプは提供されておらず、一部前払いか全前払いのみとなる点に注意が必要です)。

    システムの停止が重大な影響を与える場合

    自身のビジネスであれば 1年や 3年といったスパンでの事業計画はあるでしょうから、それをベースにインスタンスの利用費など予算計画も立てられると思いますが、利用したいインスタンスがキャパシティ不足で起動できないタイミングというのは推測ができません。ですので、インスタンス停止が重大な影響をもたらすことがはっきりしていて、負荷状況や利用者の増減などによってインスタンスタイプの変更も検討している場合は「AZ 指定のコンバーティブルを 1年または 3年」で買うことになるのかなぁと考えます。
    これは通常利用であっても利用者数の単純な増加などによる処理能力不足が生じてきた際のスペックアップやファミリーの変更にも対応しつつ、キャパシティ予約をするためです。

    おわりに

    具体的にどれくらいのコストメリットがあるのか例を挙げてみます。一年間 EC2 c4.large のみを10台稼働し続けた場合、オンデマンド料金では1台あたり $0.126/毎時 の費用が発生します。
    $0.126 x 24(時間)x 365(日)= $1,103.76(年)
    $1,103.76 x 10(台) = $11,037.6(年)
    これを全て一年、全前払いのスタンダード RI で賄うとどうなるでしょうか。
    $738.00 x 10(台) = $7,380.00(年)となり、年間で $3,657.60 の削減になります。
    * 実際にはネットワーク転送料やストレージ利用料などの関連費用および消費税が発生しますが、上記では単純にオンデマンド料金と RI の割引についてをお伝えするために省略しています。ご了承ください。

    さらに、クラスメソッドメンバーズでは毎月の AWS の全サービス全リージョンの利用費が「5% OFF」と、ますますお得になります(上記の例だと年間費用は税抜きで $7,011 と、$4,026.60 もお得になります)!

    RI に関する用語などはなかなか日本語に訳した際に本来のニュアンスとは異なった印象を受けてしまうものもあると思います。また、AWS 公式ドキュメントは非常に詳しく解説されていますが、その情報量の多さからページが分かれていたりもしていますので、うっかり見落としてしまう項目もあるかと思います(自分がそうですので...)。それら用語の整理や注意点などを改めてひとつの記事にまとめてみました。RI は長期に渡り AWS リソースを利用していく上で活用しない手はないサービスだと言えますので、その活用にあたりこの記事が少しでもお役に立てれば幸いです。
    最後に、本記事では触れなかった購入手順などのブログ記事をご紹介して本記事をおわりにしたいと思います。

    あの日リリースされたインスタンスタイプを君は憶えていますか?

    AWS再入門2018 リザーブドインスタンス購入編

    AWS再入門2018 リザーブドインスタンス購入編 その2

    Amazon Elasticsearch Service でもリザーブドインスタンスの提供が開始されました。

    DynamoDBのリザーブドキャパシティを購入してみた

    ElastiCache にスタンダードリザーブドノードとして r5 , m5 ファミリーが追加されました