プログラミング

【AWS】リザーブドインスタンスのすすめ

eyecatch-aws

AWSでサービスを運用していると、気になるのがその料金です。AWS自体はもう疑いようのない業界のスタンダードになっているため、使わないという選択肢はほとんどないと感じます。(機能によっては、GCPを部分的に使うという選択肢もあるかもしれない。)

サービスを開発・運営していくにあたり、開発時・リリース当初は需要の変化や機能追加・機能改修などで状況が大きく変わるため、AWSのリソースはオンデマンドで使用することになりますが、サービスがある程度落ち着いてきたり、必要なリソース量がある程度固定化してきたら、迷わずリザーブドインスタンスを検討することをおすすめします。

今回の記事では、リザーブドインスタンスを導入して半年経過したので、その経験も踏まえて学んだことをまとめてみます。

導入を検討する場合は、公式のドキュメントは必読、問合せすることもおすすめします。具体的な数値等もこの記事には参考として載せていますが、状況が変わることもあると思いますので、鵜呑みせずに最終的には公式サイトを必ず確認してください。
(参考URLは一番下にまとめました)

リザーブドインスタンスとは

リザーブドインスタンスとは、AWSが提供している料金プランのひとつです。その名の通り、インスタンス(サーバー)をリザーブ(予約)することにより、料金の割引を受けることが出来ます。

リザーブドインスタンス以外は、オンデマンド料金となり、利用時間 × 時間単価によって、AWSの料金が決まります。

リザーブドインスタンスを導入する場合は、例えば、「1年間」「r5.large」を「3台」使用する、と契約することになります。

オンデマンドでサーバーを稼働している状態では、どのインスタンスが何台どの程度の期間使用されるのか、AWS側は判断することが出来ませんが、リザーブドインスタンスにすると、どのインスタンスが何台どの期間使用されるのかを確定することが出来るため、その分時間単価を割り引くことが出来ます。(需要予測や在庫最適化のインプットになると思われる。)

ざっくりとではありますが、だいたいのケースで30-40%の割引になります。めちゃくちゃ大きいです。例えば、AWSに毎月50万円かかっているのであれば、30万-35万ぐらいになります。とても大きなインパクトだと思います。

EC2でのリザーブドインスタンス

特に料金プランを何も設定していない場合は、使用した時間分だけ費用がかかるオンデマンドプランとなります。例えば、r5.largeは時間単価が$0.152の費用なので、これを4台31日間使用すると以下のような費用になります。

$0.152(per hour) * 24(hours) * 31(days) * 4(cpu) ≒ $452

EC2は常時起動しているので、アクセスされようとなかろうと起動している時間分料金がかかります。(もちろん毎日数時間だけ稼働させるといった利用方法をとっているのであれば別です。)

常に起動している状態で運用するのであれば、リザーブドインスタンスを購入すると割引を受けることが出来ます。

リザーブドインスタンスの支払いオプション

リザーブドインスタンスには、「前払いなし」「一部前払い」「全額前払」の支払いオプションが3つあります。1年間と3年間でも割引料金が異なりますが、一旦1年間で考えてみます。さすがに3年間もたっていると状況が異なってくるケースが多いと思います。

「前払いなし」オプション

「前払いなし」オプションの場合は、時間単価が$0.152から$0.096に割引されます。(実質約37%割引)

これで計算すると月額料金が以下のように削減できます。

$0.096(per hour) * 24(hours) * 31(days) * 4(cpu) ≒ $286

もともとのオンデマンドプランと比較すると、$166の節約が可能。

「一部前払い」オプションと「全額前払」オプション

こちらも同様で、それぞれ実質割引率が40%50%

こちらのオプションを選択すると、一部もしくは全額を前払するので、月額費用が月により大きく異ることになるのがポイント。毎月のIT予算をある程度一定に保ちたいのであれば、「前払いなしオプション」で良さげ。特に一定に保つ必要もないという場合は、「全額前払い」で最大限の割引を受けると良いと思います。

1年間ではなく3年間契約とした場合は、実質割引率がそれぞれ57%60%62%となる。導入に際して、運営しているサービスの性質にもよるとは思いますので、期間は十分な検討が必要かと思います。環境の変化に柔軟に対応していくためには、とりあえず1年間とするのがお手軽。

Amazon EC2 リザーブドインスタンス料金表 | AWS

RDSでのリザーブドインスタンス

考え方はEC2と同じです。しかし、Auroraを使用しているのであれば、可用性等の観点から今後台数増加の可能性があるかを検討する必要があります。私個人のケースでは、開発環境1台・本番環境1台という構成だったので、今後本番環境を2台構成にするのかどうか、という点が一つ検討ポイントでした。

一般的な話で考えると、ある程度の規模のサービスであれば、2台構成(read writeをそれぞれ行うレプリケーション構成)が普通ではある。Auroraでは一つをmaster、もう一つをreadレプリカとすることができ、AWSとしてはこちらの使い方を推奨しているとのこと。

もしreadよりwriteが極端に多ければ、masterを書き込みのみ、もう一台をreadのみとするのも一つの案としてはあり。そうすれば、例えば現在現在使用しているRDSがr5.xlargeの1台という構成であったのであれば、例えばこれをr5.largeの2台構成という風にすることも考えられます。

さらに、RDS(Aurora)でリザーブドインスタンスを購入する場合、コンバーチブルというオプションもあり、それでr5.xlargeの1台を購入しておいて、後々r5.largeの2台とすることも出来る。

リザーブドインスタンスのコンバーチブルとは

次の検討ポイントとして、「コンバーチブルなリザーブドインスタンスにするか」「スタンダードなリザーブドインスタンスにするか」という点があります。

コンバーチブルのリザーブドインスタンスにすると、割引を維持したままでより柔軟に構成を変更することが可能になりますが、その分割引率は落ちる、というものです。例えば、最新のインスタンスタイプが出たらそちらに乗り換えたいといった場合や、同等価格以上のインスタンスへの乗り換え等が出来るようになります。

より柔軟に変更出来るようにしておきたい場合は「コンバーチブル」なリザーブドインスタンス、必要なリソースをある程度固定化出来ているのであればより割引率の高い「スタンダード」なリザーブドインスタンスとすると良いと判断しました。

ひとまず上記例のr5.xlarge1台の料金でのリザーブドインスタンス(スタンダードプラン)の割引を検討してみます。(コンバーチブルプランの割引率はドキュメントで見あたらなかった。。)

オンデマンド(普通のプラン)とリザーブドプランの比較

オンデマンドプランr5.xlargeの費用は$0.70(per hour)であり、1台として計算すると、以下の費用になります。

$0.70(per hour) * 24(hours) * 31(days) * 1(cpu) ≒ $520

これを1年間の(スタンダード)リザーブドプランで計算すると、以下のような費用となります。

$0.46(per hour) * 24(hours) * 31(days) * 1(cpu) ≒ $342

もともとのオンデマンドと比較すると、約$178の節約が可能となる。

私個人としては、大きく構成を変更する予定がなかったので、「スタンダード」なリザーブドインスタンスを選択しました。

EC2及びRDSでのリザーブドプラン料金比較のまとめ

上記例において、毎月どれほど割引出来るのかを計算してみました。

  • EC2: r5.large 4台 を(スタンダード)リザーブドインスタンスに切り替え
  • RDS: r5.xlarge 1台 を(スタンダード)リザーブドインスタンスに切り替え

計算すると、EC2約$166、RDS約$178、合計約$344も毎月節約することが可能。

ざっくりとではありますが、今後の必要リソースとして、EC2はスケールアウトで台数を増やす方向性で需要に対応、RDSは未定、という状態だったので、EC2のみをリザーブドインスタンスを導入することにし、毎月の割引を受けることが出来ています。

公式サイトにも、オンデマンドプランは、開発や技術検証のため、リザーブドプランはサービスをリリース・運用して一定のサーバー処理が必要な場合に最適との記述あり。

リザーブドインスタンスを導入する方法

AWSのコンソール上でボタンをぽちぽち押して購入するだけでとても簡単です。ただし、間違ってしまうといけないので、AWSの担当者に電話会議で画面を共有してもらいながら操作手順を詳細に説明を受けながら購入を進めました。ただ、そんなに難しいことはありません。

リザーブドインスタンスの利用状況の確認方法

購入したリザーブドインスタンスがちゃんと想定通り適応されているのか?が気になりますよね。私は気になります。確認方法としては私が認識しているのは2つあります。

Billingの請求書を直接確認する

Billingには詳細なAWSの利用料金が記載されています(プルダウン的に開くやつ)。ここに使用しているインスタンスの稼働時間とその時間単価が記載されています。この時間単価がリザーブドインスタンスの単価になっていれば問題ありません。(複数台利用していると、時間が莫大な数値になりますが、時間単価を確認して台数で割って上げれば確認出来るかと思います)

Billing -> 節約プラン -> 予約 -> カバレッジレポート を確認する

ここでグラフを用いて、予約しているインスタンスに対してどれだけ使用出来ているか カバレッジを確認することが出来ます。ちょくちょく確認するものでもないと思いますが、一応たまに見に行く程度です。

リザーブドインスタンス導入に際しての検討ポイント補足

補足1: リザーブドインスタンスのスタンダードプランとコンバーチブルプランの違い

一言で言えば、スタンダードプランよりもコンバーチブルプランのほうが構成を柔軟に変更出来る分、割引率が落ちます。スタンダードプランの割引率を30-50%と見た場合、コンバーチブルプランの割引率は20-40%程度の割引率。約10%ぐらいは割引率が下がってしまうというぐらいの模様。

コンバーチブルプランの場合は、OSやファミリータイプを変更することも可能。基本的にサーバー構成を変えないということであれば、より割引率の高いスタンダードプランを選ぶのが吉。

補足2: スケールアウトとスケールアップ

簡潔に説明すると、スケールアウトとは、サーバーの台数を増やすことで処理性能の向上を行うこと。スケールアップとは、サーバーそのものの性能を上げることで処理性能の向上を行うこと。

補足3: データ転送量

EC2・RDSの他に費用がかさんでいるのが「データ転送量」であり、これはAWSから外に向けてデータを送信する際のデータの合計量のこと。

一般的には、動画配信サービスや画像を多く使うサービスなどでは、大きな金額となってくる。

データ転送に関して割引が可能なのは、最低でも10TB以上使用している場合なので、動画や多くの画像を扱うサービスを運営しているわけではないので、これ以上検討の余地はなかった。一つ一つのAPIのやり取りでデータ量を少なくするようにしたり、API自体を呼ぶ数を減らしたり、といったことしか出来ない。

補足として、動画配信や画像を多く扱う場合は、AWSのCloudFrontを検討するのが良い。これは、一般的にはCDN(Contents Delivery Network)と呼ばれるもの。CloudFrontは年間契約のサービスがある。

補足4: その他補足

サーバーそれ自体の構成や設計に関して工夫することで費用を抑えられる可能性があるかもしれないとのこと。例えば、APIGateWayに全てを任せるなど。

設計・構成に関してはビジネスサポートもあり、日本人のエンジニアが担当出来るのでそこも検討頂ければとのこと。こちらに関しては$200のクレジットが付与されるので、最初の1ヶ月だけ無料でお試しすることも可能。(いざというときのために、まだ使っていない。)

参考URL

■AWS のコスト最適化/リザーブドインスタンス
https://d1.awsstatic.com/webinars/jp/pdf/services/20171110_AWS-BlackBelt_RI_update.pdf

・EC2リザーブドインスタンス料金表
https://aws.amazon.com/jp/ec2/pricing/reserved-instances/pricing/

・Aurora料金表
https://aws.amazon.com/jp/rds/aurora/pricing/

■Aurora PostgreSQLサービス資料
https://d1.awsstatic.com/webinars/jp/pdf/services/20190828_AWSBlackBelt2019_Aurora_PostgreSQL2.pdf

■APIGateWay
https://d1.awsstatic.com/webinars/jp/pdf/services/20190514_AWS-Blackbelt_APIGateway_rev.pdf