見出し画像

FinOps実践を通してAWSコスト最適化を目指そう

本ブログは、Japan AWS Ambassador Advent Calendar 2022の17日目の記事です。APN Ambassador って何?と言う方は、APN Ambassadorsってなんだ?2021年度版をご参照ください。

原油価格の高騰、新型コロナウィルスによる工場の稼働停止などの影響により、さまざまな業界でコスト増加に伴う値上げラッシュが続いています。さらに、今年は大幅な円安の影響でクラウドも例外ではなくなり、利用状況は変わらなくても、何も手を打たなければ昨年の3割近くクラウドの利用料が増加するという事態が発生しました。そのため、開発や検証に使っているAWS環境の断捨離に追われたエンジニアも多かったのではないでしょうか?

AWSをはじめ、クラウドの魅力は必要なときだけ使えて、使った分だけの請求が発生する「従量課金」であることです。しかし、この柔軟性ゆえに、コストの管理を難しくもしています。こういった背景もあり、クラウドのコストと品質・スピードのトレードオフにうまく対処しながら、ビジネス価値を最大化をはかる FinOps という運用モデルが注目を集めています。

FinOpsとは?

ファイナンス(財務)と DevOps を合わせた造語で、クラウドの支出に関わるステークホルダーが協力するための規律や文化に関する概念です。 Linux Foundation のもとで2020年8月に「FinOps Foundation (F2)」が設立され、メンバーの経験を通じて磨かれてきたベストプラクティスが FinOps Framework として公開されています。

出典:What is FinOps

FinOps Framework は「原則」「ペルソナ」「段階」「マチュリティ」「習熟度」「ドメイン」「ケイパビリティ」という要素で定義されています。
FinOpsの「原則」には以下の6つが示されています。

  • チーム間でコラボレーションすること

  • 全員がクラウドの利用に対してオーナーシップを持つこと

  • 集権的なチームが FinOps を先導すること

  • レポートはタイムリーにアクセス可能であること

  • クラウドのもたらすビジネス価値によって意思決定をおこなうこと

  • クラウドの変動コストモデルの利点を利用すること

注目したいのは、2つ目の原則 "全員がクラウドの利用に対してオーナーシップを持つこと" です。つまり、クラウドのコストについては事業部門や財務部門だけでなく、エンジニアや運用担当者に到るまで、全てのステークホルダーが責任を負うべきということです。正直なところ「お金の管理は専門家にお任せしたい」と思う気持ちも出てきますが、クラウドの場合、アーキテクチャや使用状況がコストに直結する以上、エンジニアが無関心ではコストの管理は実現し得ないと言えます。

AWSにおけるFinOps実践(コスト最適化)

FinOpsという言葉は登場しないものの、「コスト最適化」は AWS Well-architected Framework の6本ある柱の一つとして、従来より重要な設計原則として位置づけられてきました。AWS Well-architected Framework は、AWS とその利用者の長年の経験にもとづいてシステム設計・運用の"大局的な"考え方とベストプラクティスがまとめられたフレームワークです。

今年の re:Invent でも、FinOpsに関連するセッションが複数公開されており、クラウドのコスト最適化に取り組む企業の事例が紹介されています。ユーザー事例からは、クラウドのコスト管理は企業にとっても重要課題であることが分かります。

FinOps Framework に従うと、FinOpsを実践するためには「Inform(現状把握)」「Optimize(最適化計画)」「Operate(運用)」という3つのフェーズでサイクルを回すことになります。以降では、このサイクルを回すために活用できるAWSサービスを紹介します。

Inform(現状把握)

コストの利用状況を把握するには、AWS Cost Explorer が活用できます。また、AWS Budgets では、あらかじめ想定している予算を設定しておくことで、その上限を超過しそうな場合にアラート通知が可能です。さらに、AWS Cost Anomaly Detection を有効にしておけば、機械学習を使用して、コストと使用量を継続的にモニタリングし、異常な支出を検出することができます。より詳細に分析したい場合にはコストと使用状況レポート(CUR)のデータを使って高度な分析を行うことも可能です。

Optimize(最適化計画)

コストの最適化を行うにはいくつかのアプローチがあります。

ワークロードの特性にあった料金モデルを選択する

  • Savings Plan / Reserved Instance
    長期間利用(一定金額の支払い)を事前にコミットすることで、オンデマンド料金に比べて大幅な割引価格が適用されます。キャパシティ予測のしやすいワークロードに適している料金モデルです。

  • Spot Instance
    AWS内の余剰リソースを低価格で利用できるオークションのようなモデルです。リソースの使用状況によってインスタンスを強制終了されるリスクがあるため、中断可能なスケールするワークロードに適している料金モデルです。

ワークロードの特性にあったソリューションを選択する

AWSのサービスは"The Right Tool for the Right Job (その仕事に適したツールを使う)"という思想でさまざまな用途に合わせて提供されています。たとえば、ストレージにも「ブロックストレージ (EBS)」「ファイルストレージ (EFS/FSx)」「オブジェクトストレージ (S3)」がありますが、アクセス方法・アクセスパターン・アクセス頻度に応じて適したものを選択することがコスト最適化につながります。また、それぞれのサービスにコスト最適化のためのオプションが用意されています。たとえばS3を利用する場合、アーカイブ用のデータには Glacier を採用することで最大 80% 安くすることができます。

プロセッサーの選択

AWSのインスタンスには、Intel、AMDの他に、AWSが開発したARMベースの独自プロセッサである Graviton を搭載したものが提供されています。これを使うと Intel CPU のインスタンスを利用する場合に比べて最大 40% のコストパフォーマンスの向上が期待できます。JAWS DAYS でも、以下のセッションでGravitonに移行したことでコスト削減できたという事例が紹介されています。

キャパシティの自動調整

クラウドの伸縮自在な特性を活用して、必要な時間帯に必要な分のリソースだけ起動させるため、Auto Scaling によりリクエスト数の増加やCPU使用率に応じてキャパシティを調整します。

Operate(運用)

Trusted Advisor は、AWS環境がベストプラクティスに沿っているかを分析してくれるサービスです。有効にしておくと、例えば、アイドル状態の RDS DB インスタンス、活用されていない EBS ボリューム、関連付けられていない Elastic IP アドレスなどを特定してくれます。Compute Optimizer は、コンピューティングサービス(EC2、EBS、Lambda)に特化して、リソースの過剰プロビジョニングや過小プロビジョニングがないか、利用状況に応じて推奨事項を提示してくれます。

以上のように、コストと使用状況の可視化や運用しながら改善していくために推奨事項を提示してくれるサービスは複数用意されています。しかし、充実していて嬉しい反面、各ツールを行ったり来たりしながら把握するのも手間になってきました。そんなアナタのためにAWSが用意しているのが Cloud Intelligence Dashboard です。

出典:Cloud Intelligence Well Architect Labs

内部的にはAWSのデータ分析サービスである Athena、Glue、QuickSightを組み合わせて実現されており、AWSが公開している CloudFormation のテンプレートを使って自分の環境にダッシュボードを構築できます。Demo環境も用意されているので、そちらでどのようなデータが見れるかは実際に体験することができます。

FinOps実践の難しさ

さまざまなツールが用意されていても、FinOpsを実践していくことは簡単ではありません。
実際には、ダッシュボードでコストが急増したことを検知できても、開発者がその無駄に気づかないために行動に繋がっていないことがほとんどです。予算超過が発生して初めて、コストの詳細を分析し、削除可能なリソースの特定までに労力がかかっているのが現実だと思います。
また、実際に行動を起こそうとしても、Reserved Instance はどれくらい購入できるのか、高額になる場合、買ってしまったものを余らせてしまうリスクを考えると意思決定も難しいものになります。
こういった難しさには正解はないもので、私自身も組織の運営に合ったやり方を少しずつ模索している最中です。FinOps Framework にも成熟度という指標に Crawl (ハイハイ) → Walk (歩く) → Run (走る) というレベルが定義されている通り、時間がかかって当然のものと言えるでしょう。

とある友人が「利益率が10%とすると、コスト削減するということは、削減した金額の10倍の売上がある案件が取れたのと同じビジネスインパクトなんですよ!」ということを言っていて「なるほどな」と思ったことがあります。地道な活動ではありますが、FinOpsに取り組んで無駄なコストを最適化(≒利益を最大化)していくことは、着実にビジネスに貢献できる活動です。もし、ここで紹介したコスト関連サービスで知らないものがあったら、一度、実際に画面を開いて使ってみて、無駄なコストが発生していないかを確認してみましょう!



この記事が気に入ったらサポートをしてみませんか?