AWS Well-architected Frameworkから学ぶコスト最適化の進め方

記事タイトルとURLをコピーする

こんにちは!エンタープライズクラウド部クラウドコンサルティング課の日高です。

もし私のことを少しでも知りたいと思っていただけるなら、私の後輩が書いてくれた以下のブログを覗いてみてください。

sabawaku.serverworks.co.jp

今回はAWS Well-architected Frameworkに記載している内容と、私が経験してきた内容をもとに「AWSのコスト最適化の進め方」についてブログを記載していこうと思います。
※一部私なりの解釈が入る点にご留意ください。
※また、具体的なコスト最適化手法については記載せず、より大きな視点(抽象的な内容)にフォーカスして記載していきます。

はじめに

クラウドサービス(AWSに限らず)は、「必要な時に必要な分だけを利用し、使った分だけ料金を支払う」という従量課金制の性質を持っています。
これにより、初期投資が不要で、短期間の利用や検証目的でのスモールスタートが可能となる・需要の拡大や縮小に応じて容易にスケールアップ・ダウンできるなどの利点があります。

ただ当たり前ですが、クラウドの利活用が進んでいくと、コスト(クラウドの利用料)も増加する傾向があります。

この際に、本当に必要な箇所のみに課金されていれば問題ありませんが、必要のない箇所に課金されている場合、それは無駄でしかありません。

例としてイメージしやすいのは、Netflixを見ていない(使用していない)のにサブスクリプション契約だけし続けている状態です。

記載した例のように、個人レベルであれば契約しているサービス数も少ないので、すぐに気付けます。
しかし、クラウド利用が進むと、「本当に必要なところだけに課金されているか?」を追跡することが難しくなります。

特に、複数部門がクラウドを共用している場合や、複数のシステムをクラウド上で運用している場合には、どの部門がどのくらいのクラウドリソースを使用しているのか、どのシステムにどのくらいリソースを使用しているのかが分かりにくくなります。

「本当に必要なところだけに課金されているのか?」

この質問にYesと答えられるように、今回はAWS Well-Architected Frameworkのコスト最適化の柱の内容を元に、私なりの「AWSのコスト最適化(コスト削減)の進め方」についてブログを記載していこうと思います。


※一部私なりの解釈が入る点にご留意ください。
※また、具体的なコスト最適化手法については記載せず、より大きな視点(抽象的な内容)にフォーカスして記載していきます。

※AWS Well-Architected Frameworkのコスト最適化の柱については以下をご覧ください。

docs.aws.amazon.com

「コスト最適化の進め方」の全体像

「コスト最適化の進め方」の全体像が以下になります。

全てのステップに関わってくる1番重要なことが意識・体制だと考えています。(※あくまで個人の所感になります)

この意識・体制がある上で、「コストの可視化」→「コストの分析」→「コスト最適化」のサイクルを回し続けることで、「本当に必要なところだけに課金されている理想の姿」に近づいていくと考えています。

次章から、「コスト最適化の進め方」の各ステップについて解説していきます。

意識・体制

はじめに

この章ではコスト最適化を進める上で、私が最も重要だと考えている「意識・体制」について記載します。

説明に入る前に読書の方々に質問になります。
以下のAWS Well-architected Frameworkの質問(ドキュメントの内容を個人的に解釈しています)に回答することができますでしょうか。

  • 組織全体のコスト認識を確立し、維持する責任を持つチームがいるか?AWSのコスト管理に責任を持つ人はいるか?
  • AWSのコストと使用状況について、責任を持つチームとそうではないチームが定期的に議論する場はあるか?
  • 新しいサービス等がリリースされた段階で、現在利用しているリソースとコストパフォーマンスを比較等ができているか?
  • 定期的に、コストと使用状況を確認できているか?
  • 会社としてルール等を設けてコスト管理をしているかどうか?
  • どの単位(アカウント/システム/各環境ごと)でAWSのコストを管理していますか?

これらの質問に対して回答するために考えることは、以下の2つに集約されると思っています。

  1. コスト管理の組織体制について
  2. コストの分配方式について

もちろん上記記載の2つ以外にも重要な要素がありますが、「意識・体制」の章ではこの2点に注目して記載していきます。

コスト管理の組織体制について

概要

AWSのコスト管理に責任を持つチーム(もしくは個人)が明確になっていて、かつそれが組織内に文書化されていると以下のメリットがあると考えています。

  • 責任の明確化: 誰がコスト管理の責任を負うのかを明確にすることで、組織内での責任範囲が明確になり、コスト管理に対する意識が高まる
  • 継続的な最適化: コスト最適化の取り組みを継続的に行いやすくなる
  • 意思決定の迅速化: 所有権が明確であることから、AWSのコストに関する意思決定を迅速に行える

組織体制が確立されていると、この後の章で記載する「コストの可視化」→「コストの監視・分析」→「コスト最適化」のプロセスに取り組みやすくなるため、まずはAWSのコスト管理に責任を持つチーム(もしくは個人)を明確にするところから始めるといいと考えています。

組織体制の例

具体的には、以下のような体制や役割分担が例となります。

担当者 役割
Cloud Center of Excellence (CCoE) ・組織全体のコスト戦略を策定し、全社的なコスト削減目標を設定する。
・各部門のコストパフォーマンスをモニタリングし、報告を受ける。
・企業全体でのコスト最適化を推進するためのポリシーを制定する。
各部門リーダー ・特定の部門やプロジェクトのコスト管理を担当する。
・部門内の各プロジェクトのコスト使用状況を把握し、必要に応じて調整する。
・部門内のチームと連携して、コスト削減策を検討し実施する。
開発チームリーダー ・プロジェクトレベルでのコスト管理を行う。
・プロジェクトの予算を策定し、実際のコストと比較しながら進捗を管理する。
・開発環境やテスト環境でのリソース使用を最適化し、無駄なコストを削減する。
運用チームリーダー ・運用フェーズでのコスト管理を担当する。
・システムの運用コストを定期的にレビューし、無駄なリソースを削減する。
・運用に必要なリソースの効率的な使用と、コスト最適化を推進する。
財務管理担当者 ・コスト管理の統合とレポート作成を行う。
・各部門からのコストデータを集約し、経営層に対してレポートを提出する。
・財務データを分析し、コスト削減のための戦略的提案を行う。

組織体制を作る上で

上記のような役割や体制を作成するためには、組織的なアプローチが必要です。
これには、個人の裁量だけでは限界があり、全体の動きとして取り組む必要があります。

しかし、AWS Well-Architected Frameworkレビューやガイドライン設計といった施策を今いるチームでスモールスタートで実施することで、上記のような役割分担や体制を最終的に構築することが可能です。

AWS Well-Architected Frameworkレビューやガイドライン設計が自社だけでは不安ということがあれば、宣伝にはなってしまいますが、弊社のようなAWSパートナーをご利用いただくことをお勧めします!

※弊社にて、ガイドライン策定サービスやCCoE(クラウド・センター・オブ・エクセレンス)設立支援を提供しているので気になる方はご覧ください。

www.serverworks.co.jp

コストの分配方式について

概要

読者の方々の勤めている企業では、AWSのコストの内部での分配方式(AWS利用料にどこの部門がお財布を持つのか)について明文化されていますでしょうか。
例えば、AWSのコストは情報システム部門が全ての費用を持つといったものが該当します。

こちらのコストの分配方式が決まっていないと、この後の章に記載する「コストの可視化」をどのような単位で行なっていくかを決めるのが難しくなってしまいます。

コストの分配方式パターン

コストの分配方式としては、以下3つに分類できるかと思います。

  1. 1つの部署(組織)のみがAWSを利用していて、AWS利用料の支払いは全てその部署が支払う方式
  2. 複数部署がAWSを利用しているが、AWS利用料の支払いは全ての1つの部署(情報システム部など)が支払う方式
  3. 複数部署がAWSを利用していて、AWS利用料の支払いは利用している各部署で配分する方式

上記方式の「1」「2」は1つの部署が支払いの責任を持つので分かりやすいですし、これ以上コストの分配方式について考える必要はありません。
ただ、ここで問題になるのが、方式3です。

方式3の「複数部署がAWSを利用していて、AWS利用料の支払いは利用している各部署で配分する方式」の場合以下のような際に、コストの分配方式を考えることが難しくなります。

上記画像のように、「AWSで稼働しているシステム」を複数の部門が利用している場合や、以下画像のように複数のシステムが共同で利用しているAWSサービスがある場合だと、どのようにコストの分配をすればいいのでしょうか。

共同利用のシステム/リソースのコストの分配方式

共同利用のシステム/リソースのコストの分配方式の方法として思いついたものを以下の表にまとめました。

分配方式 特徴
固定比率分配 ・事前に決めた比率でコストを分配。
・利用量が不明でも公平に負担する。
各部門が50%、30%、20%の固定比率で共同利用リソースのコストを負担。
利用者数ベース分配 ・各部門のユーザー数に基づいてコストを分配。
・利用量が不明でもユーザー数で公平に分配可能。
各部門の従業員数に応じてコストを分配。
例:部門Aに100人、部門Bに50人なら部門Aが2倍の負担。
部門の規模ベース分配 ・部門の規模(従業員数や予算規模など)に基づいてコストを分配。
・大きな部門がより多くのコストを負担。
部門Aが全社の30%を占める場合、
部門Aが30%のコストを負担し、部門Bが20%、部門Cが50%を負担。
均等分配 ・各部門が均等にコストを負担。
・利用量が不明でも、全部門が同じ額を負担。
3つの部門がそれぞれ共同リソースのコストを1/3ずつ負担。
予算に基づく分配 ・各部門の予算に応じてコストを分配。
・予算が大きい部門が多くのコストを負担。
部門Aの予算が全社の40%、部門Bが30%、
部門Cが30%の場合、その割合に応じてコストを負担。
部門の収益貢献度ベース分配 ・各部門の収益への貢献度に基づいてコストを分配。
・収益が多い部門がより多くのコストを負担。
部門Aが会社全体の売上の50%を占める場合、
部門Aが50%、部門Bが30%、部門Cが20%を負担。

上記表を参考にコストの分配方式について決めていただけると幸いです。

コストの可視化

はじめに

この章では、「コストの可視化」について記載していきます。
利用しているコストを可視化することで、どのシステムやどのリソースにコストがかかっているかを把握しやすくなります。

コストの可視化を行うステップは以下の2ステップです。

  1. コスト配分タグの利用
  2. AWSサービスによるコスト可視化

コスト配分タグの利用

概要

AWS 利用料が発生するAWSリソースにタグを付与することで、AWS利用料を追跡できるようにします。これをコスト配分タグと呼びます。
コスト配分タグについては以下の弊社ブログに詳細な内容が記載されていますので是非ご覧ください。

blog.serverworks.co.jp

コスト配分タグ(タグキー)の実装例

以下に、コスト配分タグに付与するキーの例を記載します。

タグキー 説明
Environment AWSリソースが構築されている環境(本番/検証/開発/DR等)ごとにタグを付与して、AWS利用料を追跡できるようにする
Service AWSリソースが利用されているアプリケーションやシステムごとにタグを付与して、AWS利用料を追跡できるようにする
DivisionCode AWSリソースを所有・管理している部署ごとにタグを付与して、AWS利用料を追跡できるようにする
Company AWSリソースを所有・管理している企業ごとにタグを付与して、AWS利用料を追跡できるようにする

上記はあくまで例となり、実際に付与するキーは「意識・体制」に記載した「コスト管理の組織体制」「コストの分配方式パターン」に沿った形で設計すると分かりやすいです。
具体例を挙げると、AWSを利用している部門の部門コードをタグキーとして設定している事例等もあります。

可視化に利用できるAWSサービス

ここでは、コスト配分タグを設定した後どのようなAWSサービスでコストを可視化すればいいかについて簡潔に記載します。

AWS Cost Explorer

AWS Cost Explorerは、AWSリソース使用量とリソースごとの利用料等をグラフとして表示できるサービスです。
以下画像の画面右側にあるような項目のフィルタリングが可能になっているサービスです。

上記のように、コスト配分タグでフィルタリングすることができるのでどの部門がどれくらいAWSサービスを利用しているのか・コストがかかっているのかを簡単に分析することができます。

QuickSight

QuickSightやAtena等を利用してAWSリソースの可視化を行うことも可能です。
詳しくは以下のブログをご覧ください。

blog.serverworks.co.jp

コストの監視分析

はじめに

この章では、「コストの監視分析」について記載していきます。
可視化されてコストを分析したり、コストの異常検知等を実装することですぐにコスト最適化のアクションに移ることができます。

具体的には、この章の内容はAWS Well-architected Framework(ドキュメントの内容を個人的に解釈しています)の以下の質問に対応しています。

  • 予算を設定したり、AWSのワークロードの規模等からコストの予測を行い、それを元に調整できているか
  • クラウド予算を設定して、その予算と実働をモニタリングし、コストの異常検知等のメカニズムが導入できているか
  • 定期的に、コストと使用状況を確認できているか?それを見るための仕組み等を設定できているか?
  • ワークロードごとのコストに関連するメトリクスを定義しているか?

コストの監視分析のフェーズは以下の3ステップで対応します。

  1. 各システムごとにAWS利用料の予測を行う
  2. 各システムごとにコスト配分タグを付与し、実際の利用料を確認できるようにする
  3. コストの利用状況を監視できる仕組みを導入する

2ステップ目に関しては「コストの可視化」の箇所で記載済みなので、この章では1ステップ目と3ステップ目について記載をしていきます。

各システムごとにAWS利用料の予測を行う

前提として、AWSのコストは変動費となります。
とはいえ、AWS利用料の予測を行うことは可能になっており、クラウドリソースの予算を正確に設定し、将来のコストを予測することで、クラウド運用のコストを効果的に管理・最適化することができます。

では具体的にはどのようにシステムが利用するAWSのコストを見積もればいいのでしょうか。
一から見積もる方法(AWS Pricing Calculatorを利用)と、類似システムを利用する方法があると考えています。

AWS Pricing Calculator

AWS サービスを使用するためのコスト見積もりを作成するために使用できる無料のウェブベースの計画ツールになります。
Calculator(カリキュレーター/無料)を利用する事で、AWSのコストの試算を行う事が可能です。

calculator.aws

上記のサイトを用いて、AWSサービス名、使用するリージョン名、データ容量などのデータを入れていくことで月額いくらほど利用料がかかるかを算出することができます。

AWS Pricing Calculatorのサービス選択画面

必要なサービスを選択して、データを記入していただくことで以下の画面のようにAWS利用料の見積もりを算出することが可能になります。

AWS Pricing Calculatorの見積もり画面

類似システムを利用する方法

類似システムを利用する方法とは、既存のシステムやプロジェクトのコストデータを基にして、これから構築するシステムの予算を見積もる方法です。この方法は、以下のようなステップで進めます。

  1. 既存の類似システムの特定:自社または他社の同様のプロジェクトやアーキテクチャが類似したシステムを特定し、そのコストデータを収集します。
  2. データ収集:類似システムのAWS利用料に関する詳細なデータを収集します。具体的には、使用しているAWSサービスの種類、インスタンスタイプ、データ転送量、ストレージ使用量などの情報が必要です。
  3. データ分析と調整:収集したデータを分析し、自分のシステムの特性に合わせて調整します。例えば、利用するリージョンや使用量の違いを考慮して、コストを調整します。
  4. コスト予測の算出:調整後のデータを基に、予測コストを算出します。この際、予測される使用量や将来的なスケーリングプランも考慮して見積もりを行います。

コスト監視分析に利用できるAWSサービス

AWS Cost Explorer

コストデータの詳細な分析とレポート生成が可能なサービスです。
詳しくは「コストの可視化」に記載している内容をご覧ください。

AWS Budgets

予算設定と予算超過の通知を自動化できるサービスです。
AWSアカウント全体の管理だけでなく、例えば Amazon EC2の利用料金を毎月いくらまでに抑えたいといった際にも設定し管理が可能です。

管理するだけでなく、例えば設定予算に近づいた際などに管理者へアラートを通知する事も可能です。

また、AWS Budgets Actions を利用することで、AWS Budgets で設定した予算(Budget)の閾値を超えた場合に、AWS Budget の機能内で完結してアクションを実行することができます。

※詳しくは以下の弊社ブログをご覧ください。

blog.serverworks.co.jp

blog.serverworks.co.jp

Cost Anomaly Detection

機械学習を使用してコストをモニタリングし、普段発生しないような異常な支出を検出する機能です。
予算管理をする「AWS Budgets」や、利用料金のしきい値を設定しておいて超過したらアラート発報や自動アクションを起こす「CloudWatch請求アラート」とは別の機能になります。

※詳しくは以下の弊社ブログをご覧ください。

blog.serverworks.co.jp

blog.serverworks.co.jp

AWS Trusted Advisor

コスト最適化に関する推奨事項を提供し、改善点を提示してくれるサービスです。
以下画像の用に月額料金節約の可能性と、推奨されるアクション等を提示してくれます。

AWS Trusted Advisorのマネコン画面

コスト最適化

この章では、「コスト最適化」について記載していきます。
「コストの可視化」によりコストを分析、「コストの監視分析」により利用しているコストを分析し「コスト最適化」のアクションに移していきます。

コスト最適化のフェーズは以下の2ステップで対応します。

  1. コスト最適化を行う対象を決める
  2. コスト最適化手法を用いて実際にコスト最適化を行う

コスト最適化を行う対象を決める

すべてのAWSサービスに対してコスト最適化を行うのは正直かなりの手間ですし、リソース(人材や時間)の観点で考えても現実的ではありません。
そのためコスト最適化を行う際には、まずはコスト最適化を行う対象を決めましょう。

具体的な進め方について、例を挙げて紹介します。
特定のAWSアカウントのAWS利用料を最適化していくといった場合を例にしてみます。

まず、「コストの可視化」によりAWS利用料はタグ付けされていると思います。
それを元に各AWSサービスの利用料の比率を出します。

すると上記の場合、利用比率上位3つのサービス(EC2、EC2-Other、RDS)で、アカウント利用料の90%を占めていることがわかりました。
そのためこちらの3つのサービスに絞ってコスト最適化をしていけばいい事がわかりました。

このあとは、この3サービスに絞ってコスト最適化手法を用いて実際にコスト最適化を行います。

補足

先ほど例だとEC2-Otherが入っていますが、EC2-OtherはNATゲートウェイやEBS ボリューム、EBSスナップショットなどのサービスの利用料がまとめて入っています。

EC2-Otherのサービスの利用料を可視化したい場合は、以下のブログの手順に従って確認をしていただくことで可視化が可能になります。

blog.serverworks.co.jp

コスト最適化手法を用いて実際にコスト最適化を行う

コスト最適化手法に関しては、以下の弊社ブログに記載されているのでご確認いただけると幸いです。

※コスト最適化手法の全体像が記載されている弊社ブログ

blog.serverworks.co.jp

※コスト最適化手法を具体的に行う上でどんな行動を取ればいいかが記載されている弊社ブログ

blog.serverworks.co.jp

まとめ

AWS Well-architected Frameworkを確認していると、コスト最適化を進めていく上で必要なヒントがたくさん記載されていました。
その上で、Well-architected Frameworkに記載している内容と、私が経験してきた内容をもとに「AWSのコスト最適化の進め方」についてブログを記載させていただきました。

本記事がどなたかの助けになれば幸いです。

日高 僚太(執筆記事の一覧)

2024 Japan AWS Jr. Champions / 2024 Japan AWS All Certifications Engineers

EC部クラウドコンサルティング課所属。2022年IT未経験でSWXへ新卒入社。
記事に関するお問い合わせや修正依頼⇒ hidaka@serverworks.co.jp