AWS の利用方法を見直してコスト最適化してみよう ~ 後編

2023-05-02
ビジネス x クラウド

Author : 塚本 真理, 山澤 良介

皆さんこんにちは!ソリューションアーキテクトの塚本、山澤です。

前編の記事では、AWS のコスト構造を把握する方法と、コスト最適化のためのアクションとして、Amazon Elastic Compute Cloud (EC2) サービスのコスト最適化についてお伝えしました。今回は、データベース、ストレージといったサービスにおける最適なタイプ選択、割引プランの選択について、そしてコスト増加を発見するための設定についてご紹介します。ご利用中のアカウントのコスト構造をまだ把握していない場合には、ぜひ前編記事を先にご覧ください。

前編の記事はこちら »

ご注意

本記事で紹介する AWS サービスを起動する際には、料金がかかります。builders.flash メールメンバー特典の、クラウドレシピ向けクレジットコードプレゼントの入手をお勧めします。

*ハンズオン記事およびソースコードにおける免責事項 »


この記事ではコスト最適化に向けたアクションの続きとして、以下のサービスに関するコスト最適化と、想定外のコストの増加を発見するための設定についてお伝えします。

前編

  • Amazon Elastic Compute Cloud (Amazon EC2)

後編 (本記事で紹介)

  • Amazon Relational Database Service (Amazon RDS)
  • Amazon Elastic Block Store (Amazon EBS)
  • Amazon Simple Storage Service (Amazon S3)
  • その他コスト最適化のための割引が使えるサービス
    • AWS Fargate
    • AWS Lambda
    • Amazon SageMaker
    • Amazon OpenSearch Service
    • Amazon Redshift
    • Amazon ElastiCache
    • Amazon DynamoDB
    • Amazon CloudFront

1. Amazon RDS におけるコスト最適化

Amazon RDS のコスト最適化の方法は Amazon EC2 のコスト最適化と似た方法で、以下の 2 点を確認していきます。

  1. 適切なインスタンスタイプにする
  2. 不要なインスタンスを停止する
  3. 適切な購入オプションを選択する

これらも片方だけ検討するのではなく、両方合わせて検討していただくことで更にコスト削減効果が出るものになります。

1-1. 適切なインスタンスタイプにする

1-1-1. Amazon RDS のインスタンスタイプのおさらい

Amazon EC2 と同様に、 Amazon RDS でも利用するインスタンスのスペックを「インスタンスタイプ」で選ぶことができます。インスタンスタイプには「スタンダード」「メモリ最適」などのタイプが存在し、Amazon RDS のワークロードに合わせて選択が可能です。

インスタンスタイプの選択時には「m5.xlarge」などの名称がつけられたインスタンスタイプの中から選択していただくのですが、これは . (ピリオド) の前が「インスタンスファミリー」. (ピリオド) の後が「インスタンスサイズ」を表しています。

1-1-2. インスタンスタイプの見直し

Amazon RDS についても利用開始時に選んだインスタンスタイプを使い続けている、という方も多いのではないでしょうか ? 実際の運用状況に合わせて定期的にインスタンスタイプの見直しを行うことで、利用するワークロードに適したインスタンスを選択していただきたいと思います。

ただし、インスタンスタイプを変更する場合はパフォーマンスを落とさないように注意しながら選定を行う必要があります。
 
Amazon RDS で利用するインスタンスでは、データベースの特性上メモリの大部分が内部データベースのバッファに割り当てられており、メモリの使用率を基にインスタンスサイズを決められません。例えば、アイドル状態の Amazon RDS Oracle インスタンスでは、接続がない状態でも使用されているメモリ量が非常に高く表示される場合があります。これは、内部データベースのバッファが常に確保されているためです。

では、クラウド利用費用を優先してインスタンスサイズを小さくするとどうなるでしょうか。インスタンスメモリが小さくなるためバッファが少なくなり、それに伴いキャッシュも小さくなります。キャッシュが小さくなると、そ のぶんディスクの I/O が多くなってしまいます。ここでさらに注意が必要なの が、AWS の提供する各インスタンスはサイズによりディスクの I/O 性能が異なる点です。インスタンスサイズが小さくなるとディスクの I/O も少なくなる場合があり、結果的にクエリ時間が長くなる可能性があります。したがって、Amazon RDS のサイジングは CPU だけではなく、メモリ、ディスクの I/O を考慮し、アプリケーションの利用状況を評価することが肝要です。
Amazon RDS のインスタンスタイプについては上記のような運用上のパフォーマンスに与える影響を考慮しつつ変更する必要があります。Amazon RDS のパフォーマンスの分析に役立つのが Performance Insights です。
 
Performance Insights を利用すると、インスタンスの CPU 使用率やメモリの使用率だけでなく、データベースの中で生じた待機イベントも確認する事ができます。そこで得た情報から CPU サイズやメモリサイズ、ストレージタイプの検討につなげていただくことができます。
 
クリックすると拡大します

1-1-3. インスタンスタイプの変更方法

インスタンスタイプの変更の際には再起動が必要になりますが、メンテナンスウィンドウに合わせて実行することも可能です。
変更方法は以下を参考にしてください。
参考:Amazon RDS DB インスタンスを変更する

1-2. 不要なインスタンスを停止する

Amazon RDS についても、検証環境等で利用している場合夜間は誰からの利用もない場合があるかと思います。その場合にはインスタンスを停止することで、費用を抑えることができます。詳細については Amazon EC2 のコスト削減の説明内にあります。サーバーを利用しない時間帯は停止する をご確認ください。

1-3. 適切な購入オプション

 Amazon RDS においても長期利用をする場合はオンデマンドインスタンス(従量課金)から長期利用をコミットするリザーブドインスタンスに変更することで大幅にコスト削減することが可能です。

リザーブドインスタンスでは 1 年または 3 年の長期利用をコミットすることで、オンデマンドインスタンス (従量課金制) に比べて大幅な値引きが行われます。長期間利用する予定のあるインスタンスに対して、そのインスタンスタイプに適合したリザーブドインスタンスを購入することで割引を受けることができます。なお、インスタンスタイプを変更すると割引対象ではなくなってしまう場合があることにご注意ください。

1-3-1. Reserved Instance を利用する場合の見積もりと購入方法

AWS コンソール画面で「Cost Explorer」を検索します。

クリックすると拡大します

右側のサイドメニューの「Reservations」から「Overview」を選択します。 

クリックすると拡大します
Overview」の画面からは各サービスでリザーブドインスタンスを利用したときのコスト削減率を確認することができます。
クリックすると拡大します

実際の購入は各サービスの画面より行います。リザーブドインスタンスを利用する各サービスページを開き、左側サイドメニューより「リザーブドインスタンス」のメニューを選択します。

リザーブドインスタンスの購入」ボタンから購入するインスタンスタイプの選択を行います。

クリックすると拡大します

1 年、もしくは 3 年間利用するという性質上、購入内容のお間違いにご注意ください!


2. Amazon EBS におけるコスト最適化

Amazon EBS は Amazon EC2 インスタンスと合わせて利用するブロックストレージです。保持するデータ量が多くなるほどコストがかかり、なかなか削減するという思考になりづらい部分だと思いますがここでもいくつかコスト削減する方法があります。
Amazon EBS においては以下の方法でコスト削減していきます。

  1. gp2 から gp3 へのストレージタイプの変更 
  2. Compute Optimizer を使ったコスト削減効果の確認

2-1. Amazon EBS gp2 から gp3 へのストレージタイプの変更

2-1-1. Amazon EBS のストレージの種類のおさらい

 Amazon EBS には4つのストレージタイプがあり、用途によって使い分けることができます。

今回コスト最適化の対象とするのは汎用 SSD の gp2 ・ gp3 についてです。

クリックすると拡大します

汎用 SSD の gp2 と gp3 を比較すると、 gp3 のほうがスループットや IOPS 性能はよりよくなっていますがコストは安くなっています。

現在利用している Amazon EBS が gp2 なのであれば、 gp3 に変更することでコストを下げられる可能性がありますただし、一部の古いインスタンスタイプでは gp3 に対応していないものもあるのでご注意ください。

gp2 では IOPS とスループットは容量に応じて規定されています。一方 gp3 では IOPS、スループットのベースラインが決まっており、追加でプロビジョニングする IOPS、スループットをお客様側で規定することができます。gp3 における IOPS / スループットのプロビジョニングは以下の 3 パターンに分けることができます。

1. 170 GB 以下の容量:ベースラインを利用する
2. 170 GB 〜 1,000 GB 以下の容量:スループットを追加でプロビジョニング
3. 1,000 GB 超の容量:IOPS ならびにスループットを追加でプロビジョニング


1. 170 GB 以下の容量
まず、容量が 170 GB 以下の容量の例として、170 GBのストレージを使う場合を考えます。gp3 のスループットのデフォルト値は 125 MB/秒 、IOPS のベースラインは 3,000 となっています。これは gp2 の同じ容量と比較するとスループットについては同等、 IOPS  については gp2 が 510 であることから、gp3 の方が性能は高いといえます。gp2 と同一性能要件を実現するには gp3 を利用する際には IOPS ならびにスループットの追加のプロビジョニングは不要でベースラインを利用します。


2. 170 GB 〜 1,000 GB 以下の容量
次に、容量が 170 GB 〜 1,000 GB の場合の一例として、1,000 GB のストレージ使う場合を考えます。どの容量でも変わらず、gp3 のスループットのデフォルト値は 125 MB/秒 、IOPS のベースラインは 3,000  です。一方、1000 GB の容量の gp2 ではスループットは 250 MB/ 秒、IOPS は 3,000 となっています。そのため、gp3 で gp2 と同等の性能を得るためには、スループットをベースラインに追加でプロビジョニングすることになります。単純に gp2 と同様の性能要件を満たしたい場合は、gp2 の最大スループットは 334 GB 以上では 250 MB/ 秒で頭打ちとなるため、gp3 では 125 MB/ 秒をベースラインに追加でプロビジョニングすれば要件を満たします。実際には単純に gp2 の性能要件と同等の性能を満たすより、どの程度プロビジョニングすればよいかを AWS Compute Optimizer での推奨を確認して最適な容量を利用することが効果的です。


3. 1,000 GB 超の容量
最後に、1,000 GB 超の場合を考えます。gp3 では他の容量でも記載の通りスループットのデフォルト値は 125 MB/秒 、IOPS のベースラインは 3,000 です。一方 1,000 GB 以上の容量の gp2 ではスループットは 250 MB/ 秒、IOPS は容量によって異なりますが 3,000 以上となります。そのため、gp2 と同様の性能要件を満たす場合には IOPS ならびにスループットを追加でプロビジョニングすることになりま す。プロビジョニングする値については AWS Compute Optimizer での推奨を確認するのが効果的です。


上記のどのパターンの場合も、スループットや IOPS をベースラインから追加することを考慮しても gp2 よりも低い価格で利用できる可能性が高くなります。以下の画像は gp2 と gp3 をスループットや IOPS を追加でプロビジョニングした場合のコストを容量ごとに比較をしたものです。価格は 2022 年 3 月時点での北部バージニアリージョンのものとなります。詳しい料金については
Amazon EBS の料金 をご確認ください。

2-1-2. ストレージタイプの変更

EBS ボリュームがアタッチされた EC2 インスタンスが Amazon EBS Elastic Volumes に対応している場合、ストレージタイプをオンラインで EC2 インスタンスを再起動することなく変更できます。変更時にパフォーマンスへの影響はありません。一部の古いインスタンスでは Amazon EBS Elastic Volumes に対応していないものがあり、その場合は再起動が必要です。

1 TiB のストレージのストレージタイプを変更すると通常 6 時間程度かかるようです。各 EBS ボリュームの詳細画面にある「変更」ボタンよりストレージタイプの変更が可能です。

クリックすると拡大します

2-2. Compute Optimizer でストレージコスト削減効果を確認する

Compute Optimizer は Amazon EC2 や Amazon EBS 、Lambda をどれくらいの料金使っているかを確認することができる機能です。ただコスト内訳を確認するだけでなく、コスト最適化の提案までしてくれるのが嬉しいところです。

ストレージが追加で必要になったときにすぐに入手できるのはクラウドのメリットです。今後のデータの増加を見越して運用当初から大きなサイズの EBS ボリュームを割り当てるより、必要になったときに EBS ボリュームを追加するほうが利用していない容量に対するコスト支払いをしなくて済みます。以下の Amazon EBS のページでは、現在プロビジョニングされている EBS ボリュームのサイズと実際の使用量を比較して本来最適なサイズを提案してくれます。 Amazon EBS ではボリュームサイズの拡張は AWS コンソール上での操作と OS 上でのボリューム拡張操作を行うことで変更することができます。一方、現行の EBS ボリュームサイズを縮小する場合には、新規に小さいサイズの EBS ボリュームを作成し、現行の EBS ボリュームから新規に作成した EBS ボリュームにデータを同期させ、同期の完了した EBS ボリュームを現行のストレージの代わりにアタッチする必要があります。

参考:EBS ボリュームへの変更のリクエスト »

クリックすると拡大します

2-2-1. Compute Optimizer 有効化

 Compute Optimizer を利用するためには機能の有効化を行う必要があります。Compute Optimizer は、基本的に追加の費用なしで利用いただけます。無料で利用する場合には、 過去14 日間の利用データからコスト最適化の推奨事項を分析をしてくれます。
これよりも長い期間をサンプリングして分析したい場合は、最大 3 か月 (93 日) の拡張インフラストラクチャメトリクスの機能が使えます (ただしこちらは追加料金がかかります)。まずは無料の利用の範囲で、追加の費用なしでご利用頂いても良いでしょう。

設定するにはまず、サービスから、「Compute Optimizer」と検索してメニューを開きます。

クリックすると拡大します

Recommendations per AWS resources Type」のメニューにある「EBS volumes」のメニューを選択します。

クリックすると拡大します

Organizations を有効化している場合は、子アカウントも含めて確認をするか選択できます。全てのメンバーアカウントを含める選択で、「Opt in」 をします。

Opt in を押してから、12 時間ほど経過すると Compute Optimizer で情報を確認することができるようになります。

クリックすると拡大します

Recommendations for EBS volume」の画面に表示されたリストからは、ストレージタイプやIOPS、容量についてのおすすめの設定が表示され、それらを実行した場合のコスト削減効果が確認できます。

クリックすると拡大します

3. Amazon S3 におけるコスト最適化

 Amazon S3 は低コストでデータを保管するオブジェクトストレージです。 Amazon S3 は大量のデータを安価に保管できるためログや画像の保管等で利用している方も多いかと思います。そのままでもある程度安価ではあるものの、保管するストレージクラスを見直すことで更なるコスト削減が見込めます。

3-1. ストレージクラスの変更

3-1-1. Amazon S3 ストレージタイプのおさらい

 Amazon S3 にはアクセス頻度や、データを分散保管する AZ の数に応じて料金形態の異なるストレージクラスが用意されており、適切なストレージクラスを選んでデータを保管することがコスト削減に繋がります。とはいえ、実際に各オブジェクトについてどのストレージクラスを利用するかを検討して振り分けるのは労力のかかることになると思います。そこでおすすめしたいのが Intelligent-Tiering です。 Intelligent-Tiering ではアクセス頻度に応じて保管する Tier を自動的に切り替えてくれるもので、低頻度アクセスの Tier になるほどコストも安くなります。

また、 Amazon S3 ではアーカイブデータ向けの Amazon S3 Glacier も用意されています。 S3 Glacier は保管にかかるコストは Standard の 1/5 以下になりますが、取り出しにコストがかかるため、取り出し頻度が少ないデータにおすすめです。 S3 Glacier の中にも 3 種類の Tier があり、取り出しにかかる時間がかかるものほど安いコストで利用できます。

3-1-2. Intelligent-Tiering

Intelligent-Tieringを使うとデータのアクセスパターンに応じて自動的に最適なストレージクラスにオブジェクトを移動してくれます。例えば、最初にオブジェクトが保存されてから 30 日間アクセスが無かった場合にはコストが少し安くある Infrequent Access Tier に、更に 90 日間アクセスされなかった場合はコストが更に安い Archive Instant Access Tier に移動するといった具合に自動的に保管する Tier を変更してくれます。その間にオブジェクトへのアクセスがあればアクセスからの応答の早い Frequent Access Tier に戻してくれるので、アクセスに応じた Tier を選択しつつ、コストも下げてくれるというメリットがあります。

3-2. Amazon S3 Storage Lens を使ったコスト可視化

 Amazon S3 Storage Lens は Amazon S3 の使用状況を確認できるダッシュボードで、リージョン別、ストレージクラス別、バケット別のレポートを見ることができます。

Organizations で利用すれば複数のアカウントの情報を一括で確認することも可能です。

クリックすると拡大します


4. その他コスト最適化のための割引が使えるサービス

前編の EC2 のコスト最適化 最適な購入オプションでは Savings Plans やリザーブドインスタンスといった最適な購入オプションを利用することで割引価格でのリソースの利用ができることを紹介しました。

Savings Plans やリザーブドインスタンスは Amazon EC2 以外のサービスでも利用可能なものがあります。また、その他にも類似の割引価格を用意しているサービスもあります。

4-1. Savings Plans が利用できるサービス

Savings Plans では1年または 3 年の長期利用をコミットすることで、オンデマンドインスタンス (従量課金制) に比べて大幅な値引きが行われます。 今後も長期間支払い続ける見込みのあるサービスの金額を見積もり、その金額をコミットすることで割引を受けられるというものです。

Savings Plans の中には 3 つのプランが存在し、そのうち Compute Savings Plans では Amazon EC2 だけでなく、AWS Fargate や AWS Lambda などのコンピューティングサービスも対象になっており、利用するインスタンスタイプやワークロードについての制限がないのが特徴です。利用金額に対するコミットなので、利用する EC2 のインスタンスタイプや台数の内訳が変わってもコミットした金額を下回らない限り割引をうけることができます。その他 Amazon EC2 の特定のインスタンスファミリーに限定する代わりに高い割引を受けられる Amazon EC2 Savings Plans や、SageMaker Studio Notebook、SageMaker Processing などの Machine Learning 向けに利用できる Amazon SageMaker Savings Plans があります。割引率は Savings Plans のタイプや支払い期間 (1 年 / 3 年)、支払い方法 (一部前払い / 全額前払い / 前払いなし) によっても異なります

対象サービス

  • Amazon EC2
  • AWS Fargate
  • AWS Lambda
  • Amazon SageMaker

4-2. Reserve Instance が利用できるサービス

リザーブドインスタンスでは Savings Plans 同様に 1 年または 3 年の長期利用をコミットすることで、オンデマンドインスタンス (従量課金制) に比べて大幅な値引きが行われます。

リザーブドインスタンスでは長期間利用する予定のあるインスタンスに対して、そのインスタンスタイプに適合したリザーブドインスタンスを購入することで割引を受けることができます。インスタンスタイプを変更すると割引対象ではなくなってしまう場合があることに注意が必要です。 

リザーブドインスタンス購入は、AWS コンソールの各サービスページの「リザーブドインスタンス」のメニューから行うことができます。詳細については以下の各サービスの解説をご確認ください。

その他、リザーブドインスタンスと類似した割引プランが用意されているサービスもあります。Amazon Redshift や Amazon ElastiCache では インスタンスではなくノードやキャッシュノードという名称がついていますが、前項で記述したリザーブドインスタンスとほぼ同様の割引形態となっております。

また、Amazon DynamoDB の場合はサーバーレスなサービスであるため「インスタンス」という概念ではありませんが、DynamoDB リザーブドキャパシティにより、事前に今後も継続的に利用する内容をコミットをすることで割引が受けることができます。Dynamo DB リザーブドキャパシティでは、データベースのスループットに応じて必要なキャパシティを見積もり、1 年または 3 年間で利用するキャパシティを予約しておくことで割引を受けることができます。

対象サービス

4-3. 類似の割引が利用できるサービス

Amazon CloudFront Security Savings Bundle では、1年間の利用をコミットしていただくことで、通常価格より最大 30 % の割引を受けることができ、更に AWS WAF に利用できるクレジットも付与されます。

対象サービス


5. 想定外のコストの増加を発見するための設定

「提出した稟議の金額内にコストを抑えたい!」「想定外のコスト増加で焦った...」という方には AWS Budgets を使った予算管理や、AWS コスト異常検出 を使った通常とは異なる利用の検出をご利用いただくことで予想外のコスト増加をすぐに検知し、無駄なコスト増加を最低限に抑えることができます。

5-1. AWS Budgets

AWS Budgets では「無料枠の料金を超えそうなとき」「月次コストが設定した金額を超えそうなとき」などの設定に応じてEメールでアラートを受け取るようにすることができます。

利用方法

AWS コンソール右上のアカウント ID をクリックし、「Biling Dashbord」を開きます。

クリックすると拡大します

左側のサイドメニューにある「Budgets」を開き、予算を作成します。AWS で用意されたテンプレートで月次のコスト上限の設定や、無料枠を超えた際のアラート等を設定することができる他、独自にカスタマイズした設定も可能です。

通知先の Email を選択して保存します。設定した Email に通知が送られていることを確認してください。

クリックすると拡大します

5-2. AWS コスト異常検出

コスト異常検出では機械学習を用いて平常時の利用とは異なるコストの変化を検知し、問題が検知された際にはアラートを受け取ることができます。長期間利用する中で周期的なコスト変化がある場合にはその変化も考慮して誤検知を減らしていきます。

利用方法

AWS コンソール画面で「Cost Explorer」を検索します。

クリックすると拡大します

左側サイドメニューから、「コスト異常検出」を選択します。

コスト異常検出のページの右上に表示される「ご利用開始にあたって」のボタンをクリックし、概要ページに移動します。

クリックすると拡大します

初回アクセス時にはツアーが表示されますので、ツアーをご確認いただき機能の概要を把握してください。

クリックすると拡大します

概要ページでは、コスト異常検出によって検出された異常な利用があれば表示されます。

検出があれば、検出履歴からアラートの詳細や、過去に検出された異常についても確認できます。

クリックすると拡大します

デフォルトではコスト全体に対して異常な増加等があった場合に検知が行われますが、コストモニターを作成するとサービス別などより細かい単位でのコストの増加を検知することができます。

クリックすると拡大します

設定できる項目としては、AWSのサービス単位、連結アカウント単位、コストカテゴリ単位、コスト配分タグ単位があります。

クリックすると拡大します


6. まとめ

ここまで前編、後編二回に分けてAWS のコストを下げる方法をご紹介してきました。

  • 前編
    • 事前にコスト構造を把握する : AWS Cost Explorer を使ってコストを可視化
    • コスト最適化のアクション
      • Amazon EC2 : 最適なインスタンスタイプの利用、最適なインスタンス数にする、最適な購入オプションの利用 
  • 後編
    • コスト最適化のアクション
      • Amazon RDS : 最適なインスタンスタイプの利用、最適な購入オプションの利用 
      • EBS volume : gp3 の利用 
      • Amazon S3  : 最適なストレージタイプの利用 
      • その他の割引が利用できるサービス :  Savings Plans やリザーブドインスタンスなどの割引 
  • 想定外のコスト増加を発見するための設定 : AWS Budgets / AWS コスト異常検出 の設定

コストの最適化を行うことで予算に余裕ができれば、今まで取り組めなかった新たな開発やセキュリティ対策を行う余裕もできてプロダクトの発展にもつながるのではないかと思います。
 
今回ご紹介した方法を使ってコスト最適化を実施してみていただければ幸いです。

builders.flash メールメンバーへ登録することで
AWS のベストプラクティスを毎月無料でお試しいただけます


筆者プロフィール

塚本真理
AWS サービスを利用することでインフラ運用が楽になることを実感し、AWS の魅力を広めるたいと思い2022年に AWS に入社。ソリューションアーキテクトとしお客様の役に立てる情報を提供できるように勉強中。家計のコスト削減に奔走している。

山澤 良介
ソリューションアーキテクトとして、業種業態を問わず様々なお客様を支援させて頂いています。
前職では主にネットワーク案件を担当していたため、好きなサービスは、AWS Direct Connect と AWS Transit Gatewayです。
休日はスノーボードが大好きなので、シーズン中は毎週スキー場に行っております。シーズン中は、道具や移動費などでお金がかかるため、コスト削減に奔走しています。

AWS のベストプラクティスを毎月無料でお試しいただけます

さらに最新記事・デベロッパー向けイベントを検索

下記の項目で絞り込む
1

AWS を無料でお試しいただけます

AWS 無料利用枠の詳細はこちら ≫
5 ステップでアカウント作成できます
無料サインアップ ≫
ご不明な点がおありですか?
日本担当チームへ相談する