大規模サービスを展開する国内ITベンダー6社による「6社合同SRE勉強会」が2022年3月12日に開催された。主催社の1社であるクックパッドは「AWSコストを可視化して『説明』できるようにするための取り組み」と題したセッションで、大規模にAWSを利用する際に避けて通れない「コストの管理、監視」を効果的に実施するための工夫を複数紹介した。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
LINE、メルカリ、クックパッド、ディー・エヌ・エー(DeNA)、サイバーエージェント、リクルートの6社は、2022年3月12日に「6社合同SRE勉強会」をオンラインで開催した。同勉強会では、各社でサービス運用に関わるエンジニアが、自社でのSRE(サイト信頼性エンジニアリング)に関連した取り組みを紹介すると同時に、他の企業のエンジニアとの質疑応答を通じて知見が共有された。
WebでITサービスを展開するいわゆるWeb系企業は、パブリッククラウドを標準的なITインフラとして、大規模に活用している。サービスを生みだすためのコンピューティングリソースを、必要な時に、必要な規模で、即時に調達できることがパブリッククラウドの大きなメリットだ。一方で、利用規模が大きくなるほど、組織全体でクラウドにどの程度のコストをかけているのかを把握したり、その増減を適切に管理したりすることの難易度は増していく。
クックパッドのSREチームに所属するmozamimy氏は「AWSコストを可視化して『説明』できるようにするための取り組み」と題したセッションで、自身が取り組んだAWSコスト適正化のための施策と、その実施を効率化するために内製したシステムを紹介した。
セッションのタイトルである「AWSコストを『説明』できるようにする」という表現は、「なるべく高い精度でコストを予測し、適切に管理してムダづかいをなくしていくことを目指す取り組み」を指しているという。
「お金は、組織やそれを構成する人間が、目標を達成するための原動力となるもの。できる限りムダをなくし、必要な部分へ適切に投入していきたい。クックパッドで主に利用しているAWS(Amazon Web Services)をはじめ、パブリッククラウドのコストは『かけた分だけリターンがある』という性質のものではない。気軽にリソースを調達できる一方で、気付いたら大きなムダが発生していたという事態も起こりがちになる。パブリッククラウドを効果的に活用するために、自社の状況に合わせたコスト管理、最適化の仕組み作りは大きなポイントだと考えている」(mozamimy氏)
mozamimy氏は、2019年前後から、クックパッドにおける全社規模でのAWSコストの可視化、最適化、管理手法の標準化に取り組んできた。この取り組み以前において、AWSのコストは、主にインフラチームのリーダーが中心となってスプレッドシートで管理しており、知見の属人化も課題になっていたという。
mozamimy氏は、コスト管理手法の標準化を進めるに当たって「予算案の作成に苦労しない環境づくり」を軸とした仕組みの構築を目指したという。
「新年度の予算案作成に当たっては、前年度の実績をベースに考えるのが一般的だ。だがAWSのコストに関係するイベントを、1年分まとめて振り返るのは難しい。コストの分類が十分に行われていなかったり、コスト管理のプロセスが属人的でチームの再編などをきっかけに知見が失われてしまったりという状況もあった。まずは、予算案を効率的に作成できる環境を目指し、足りない仕組みを整えていった」(mozamimy氏)
「どのような目的」に利用する「どのリソース」に「どの程度のコスト」がかかっているのかが可視化されれば、それは各プロジェクトで立てる予算の内訳を説明する根拠となる。その根拠は、予算案の内容に過不足がないことを裏付ける。
この仕組みがうまく機能すれば、開発チームが自律的にAWSコストをコントロールできるようになる。デプロイ後にパフォーマンスに問題が出た場合「コストをかけてリソースを追加することでしのぐ」か「実装やアーキテクチャを修正して問題を解決する」か、といった判断を、開発チームが予算の状況を見ながら、ある程度まで自ら判断できるわけだ。
また、定期的なコスト可視化を実現すれば、想定していないコスト(アノマリー)の発生を早期に検知して対応することも可能になる。これは「気付かないムダづかい」を減らすことにつながる。
AWSリソースのコスト最適化は、公式のドキュメントで多くの情報が出されている。「AWS Cloud Financial Management | Optimize and save your IT costs」というWebサイトには、要約すると以下のようなアドバイスが書かれているという。
これらは、AWSリソースのコスト管理における「基本」となる一方、実際にやろうとすると、決して簡単ではないという。運用管理においては「スポットインスタンスの使いどころが難しい」「RIやSPの購入をどう管理すべきかが分からない」「Cost Explorerを見てもAWSサービスごとの粒度でしかコストが分からない」といった問題に直面する。
クックパッドでは、デプロイ基盤として「Amazon ECS」(Elastic Container Service)を使うことで、スポットインスタンスにまつわる課題を解決し、「RI/SPの購入管理」「Cost Explorerの粒度問題」は、独自の内製ツールと運用ルールを作ることで解決を図っているという。
AWSのRIやSPは、いずれも事前にまとまった金額を先払いすることで、リソースの利用料金が20〜50%程度割引されるという、AWSコストの節約に当たって活用が必須のプランだ。これらを管理するには、購入状況、利用状況の可視化と合わせて「利用期限が迫っている場合」や「RIのカバレッジやユーティライゼーションが変化した場合」などにアラートを出すような機能が必要になる。
クックパッドでは、これらを実現するために「RI/SP管理用ダッシュボード」を内製で開発した。Cost Explorerから取得したデータをバッチ処理で、CloudWatchカスタムメトリクスに転記。ダッシュボードはGrafanaで構築し、社員が閲覧できるようにしている。同時に「RI/SPの期限が迫った」「コストが何らかのしきい値を割った」際のアラート機能も用意している。
あえて、Cost Explorerをそのまま利用せずに内製した理由は「インスタンスタイプによるコストの重み付け」や「他のツールとの連携」といった、同社特有の仕様を付加したいと考えたためだ。
「Cost Explorerから取得できるカバレッジは、どのインスタンスタイプも同じ重みで表されているが、実際に使う立場になると、インスタンスタイプの『tx.medium』の購入分が余るよりも『tx.xlarge』が余る方がコスト面でのダメージが大きくなる。ダッシュボードでは、そうした点を考慮した『重み付け』を行ってプロットしたかった。Grafana上でメトリクスをまとめて眺めたり、PagerDutyで出すアラートを自動でリゾルブしたかったり、アラートを出すためのしきい値はTerraform上でコード管理したかったりといった独自のニーズもあり、これらに対応するため内製した」(mozamimy氏)
RI/SPを可視化して管理するダッシュボードに加えて、クックパッドでは、これらのコストを社内の各チームが業務フロー内でコントロールできるようにするためのアプリケーションも内製している。このアプリケーションは「COST COnsole」を略して、社内では「Costco(コストコ)」と呼ばれているそうだ。
主な機能としては「予算購入決済管理」「コスト予測、月次レポートの半自動生成」「今年度の累計AWSコスト確認」「Projectタグの管理」「アノマリートラッカー」などを備える。クックパッド社内では、このツールを中心にして「レポートに基づく振り返り」「予算に収めるような調整作業」「次期の予算作成」といったサイクルを回している。
「予算管理」機能においては、項目ごとに予算を入力できる。予算額や分類はCost ExplorerのフィルターとしてJSONベースで書かれている。これは「実際に動くコードとして定義することで、人による認識のブレが起こらないようにする」ことを意図しているという。予算が承認されると、各チームでAWSに利用できる予算分の「財布」がCostco上に用意される。これが「購入決済管理機能」であり、予算額は社内のERPからバッチでインポートされ、残高として反映される。
運用時は、Cost Explorerから取得した実績と連携し、予算額に対する「今月のコスト予測」が表示される。月次レポートは「固定費」「データ、ログ費」といった形であらかじめ“タグ”で定義されたカテゴリーごとにコストが集計される。この集計結果に、担当者によるコメントが付加されたレポートに対してレビューする。
Costcoのポイントとして挙げられるのは「コストのカテゴリー」を「Projectタグ」で分類できるようにしている点だ。登録したタグとCost Explorerの条件とを掛け合わせたクエリが利用できる。
タグ管理の方法も工夫したという。特に利用規模が大きい場合には「設定する値の粒度がそろわない」「使われなくなったタグの区別が難しい」といった問題が起こりがちだ。mozamimy氏は「メタ情報であるタグに、さらにメタ情報を付けて管理する」という方法で、これらの解決を図ったとする。
利用が推奨されるタグをホワイトリストとして管理するようにし、もしリスト上にないタグが発見された場合は、新たにリストに追加するか、あるいは「非推奨タグ」として指定するかといった判断を随時促す。ホワイトリストはGitHub上でテキストファイルとして管理されており、Terraform Linterを走らせることで、Projectに付けられたタグをチェックしている。AWS Config Rulesの「required-tags」が対応していないリソースは「Tagcop」と呼ばれる内製バッチにより、定期的に精査する。
こうした方法により、タグの付け忘れや不統一ができるだけ発生しないように運用しているという。Projectタグによる項目の分類とその実現のためにCOSTOCOに用意された機能は、AWSコスト管理の「標準化」に直結するため、非常に重要な役割になっているという。
ダッシュボードとCostcoによるAWSリソースのコスト管理は、成果を挙げている。例えば、動画配信システムで作成されたMediaLiveのリソースが、何らかの手違いで削除されずに残り続けてしまったケースでは、可視化されたダッシュボードで異常をいち早く検知することでコストの浪費を最小限に抑えることができたという。
またコスト管理に関する知見の属人性が下がり、透明性が増したことで、開発チーム全体のAWSコストに対する意識にも変化が起こっている。
「これらの仕組みを導入したことで、コストの議論が以前よりもしやすくなり、開発チーム主導でコストを考えてもらえるようになってきた。パフォーマンスの問題に対して、リソースを追加してスケールアップすべきかどうかという判断を、コストの状況を見ながら合理的に、自信を持ってできるようになった。可視化されたコスト情報はバックオフィスのスタッフや経営層も閲覧でき、その内容を把握している。予算案の作成が以前よりもラクになると同時に、提出する内容の説得力も以前より増している」(mozamimy氏)
クックパッドでは、組織の拡大や事業の変化に合わせる形で、AWSコスト管理の仕組みを整えた。mozamimy氏は、その仕組み作りに取り組んだ経験から「組織の状況やステージに合わせて、どのようなコスト管理の方法が最適かを見きわめながら進めていくのがよいのではないか」と提案した。
「Costcoの原型は、予算管理のためのGoogle スプレッドシートだった。そこに必要な機能、あったら便利な機能などを付け加えながら、アプリケーションとして進化させていった。シンプルなもので構わないので、まずはコスト管理の標準化や効率化の取り組みをスタートすることが大切だ。最近では『AWS Budgets』のような、アラートを備えたコスト管理のマネージドサービスもあるので、自社のニーズに合えば、そうしたものを活用することも勧めたい。クックパッドでの取り組みが、みなさんの組織でクラウドのコスト管理をはじめる際に、何らかの参考になればうれしい」(mozamimy氏)
「6社合同SRE勉強会」では、各担当者の発表後に「Ask the Speaker」として、発表者と他企業のSRE担当者による対談の時間が設けられ、発表中に視聴者から寄せられた質問に回答した。このセッションでは、DeNAの鳥越昇氏(システム本部 IT統括部 IT基盤部 部長)が、Ask the Speakerを担当した。
鳥越氏は、同勉強会の別セッションで、DeNAにおける「パブリッククラウドのコスト管理」に関する講演をしている。
その立場から「パブリッククラウドの活用において、コスト管理は肝になる部分。また、クックパッドでの取り組みの軸となった『予算案作成に苦労しない環境づくり』というモチベーションにも共感した」とセッションへの感想を述べた。
聴講者からは「ダッシュボードとアプリケーションの作り込みにかけたコストは、実際にどの程度、クラウドのコスト削減に貢献しているか。定量的な効果測定は行っているか」といった質問が寄せられた。mozamimy氏は「定量的な効果測定は、現時点ではできていない。ただ、アノマリーで浪費していた可能性があるコストと、この仕組みを作るための自分の稼働コストを比較しただけでも、十分に元は取れている」とした。
また、Costcoの言語やデプロイ方法、運用課題の有無に関する質問には「アプリケーション自体はRuby on Rails、フロントエンドはTypeScriptといった構成で、クックパッドの共通基盤にコンテナとしてデプロイしている。メンテナンスは、セッション中に触れた部分以外は、ほとんど発生していない」とした。
Copyright © ITmedia, Inc. All Rights Reserved.