Upgrade to Pro — share decks privately, control downloads, hide ads and more …

AWS コストを可視化して「説明」 できるようにするための取り組み

A73cbd4500c4dbc97ad2fba6ad41ae67?s=47 mozamimy
March 11, 2022

AWS コストを可視化して「説明」 できるようにするための取り組み

技術部 SRE グループの mozamimy です。本セッションでは、クックパッドにおける、AWS のコストを可視化・管理し、最適化までカバーする取り組みについて話す予定です。AWS コストを、と銘打っていますが、その根本的な考え方や各テクニックの本質的な部分は GCP や Azure といった他のパブリッククラウドでも役に立つでしょう。

会社のミッションを達成するための原動力として、お金は有限のリソースであり適切に管理するべきです。サービスを提供するためのインフラはそれ自体が利益を生むことはできません。したがって、ユーザ向けに同じクオリティのサービスや、社内の開発者向けに同じ開発効率を提供できるのであれば、インフラコストを下げて、事業に直接関係する投資などの有意義なお金の使い方をするほうがよいでしょう。

AWS のコスト管理・最適化の枝葉のテクニックはいろいろありますが、「コストを説明できる」というところに集約できるとわたしは考えています。クックパッドではこの考え方をベースにして、年次の AWS の予算案の作成、月次の経営層をまじえてのコストの振り返り、週次の SRE 定例ミーティングなどを中心とした、コスト管理の業務プロセスを実践しています。

本セッションでは、まず「コストを説明できる」というのはどういうことかを説明したのち、過去 (2019 年頃) のクックパッドにおける AWS コスト管理の課題を振り返り、どのような流れで現在の業務プロセスになったのかを説明します。

次に、その業務プロセスを支える技術について、以下の仕組みについてそれぞれ説明します。

- RI / Savings Plans を管理するための仕組み
- コスト配分タグを管理と月次レポートの半自動生成機能を中心とした、スタッフ向けのウェブツール
- 開発向けサンドボックス AWS アカウントのリソースを定期的に掃除する仕組み

これらの仕組みは AWS のマネージドサービス (Cost Explorer や CloudWatch カスタムメトリクスなど) をうまく利用しつつ、足りない部分を内製で補うようになっています。

さいごに、これらの仕組みを整えたことによりメリットがあったと実感できた事例や、社内のプロダクト開発チームに与えた影響、これからの展望についても述べます。

A73cbd4500c4dbc97ad2fba6ad41ae67?s=128

mozamimy

March 11, 2022
Tweet

More Decks by mozamimy

Other Decks in Technology

Transcript

  1. © 2022 Cookpad Inc. 6社合同SRE勉強会 AWS コストを可視化して「説明」 できるようにするための取り組み mozamimy @

    Cookpad SRE チーム
  2. • @mozamimy • クックパッド 技術部 SRE グループ • 2016 年

    新卒入社 ◦ 実は 2015 年に上京して半年はレシピサービスの バックエンドを開発 • AWS コストをいい感じにしてきた • サーバーレスアーキテクチャを導入しやすい基盤づくり • ← うさぎ (ルカチャン) と暮らしてます 自己紹介 © 2022 Cookpad Inc. 2
  3. アウトライン • AWS コストを「説明」できるようにする #とは • AWS コスト最適化の一般的な話 • AWS

    コストの管理を支える技術 ◦ Reserved Instance (以下 RI) / Savings Plans (以下 SP) の管理 ◦ 社内向けコストコンソールアプリを中心としたコスト管理 • 役に立った事例・プロダクト開発チームに与えた影響 • まとめ © 2022 Cookpad Inc. 3
  4. © 2022 Cookpad Inc. 4 AWS コストを説明できるようにする #とは

  5. • お金は大切です 💰 ◦ 組織とそれを構成する人間が目的を達成するための原動力 ◦ ムダを省いて必要なところに使いたい • AWS コストはかけた分だけリターンがあるわけでは

    ... ない • 気付いたら大きなムダが発生していた、になりがち ◦ パブリッククラウド特有の問題 ◦ API やコンソールからカジュアルにリソースを買えてしまう ◦ 数千万円規模の RI を買うのもワンポチ ◦ なるべく高い精度でコストを予測し、管理してムダづかいをなくしたい © 2022 Cookpad Inc. 5 なぜ AWS コストを最適化すべきなのか
  6. • インフラチームのリーダーが管理していた ◦ スプレッドシート ◦ チームの変遷で知見が断絶 ... • そろそろキチンと管理していきたいということでコスト最適化を任される •

    予算案の作成に苦労して何が足りていないのかを知る ◦ AWS コスト関係のイベントを 1 年分まとめてふりかえるのは困難 ◦ そもそも AWS コストが十分に分類できていない ◦ コスト管理のプロセスが属人的になってしまっている • とにかく予算案の作成に苦労しない環境を作ろう ! • 組織的にも変わりつつある時代だった ◦ 新規事業の立ち上げが加速 ◦ コスト面でもレシピサービスだけを考えればいい時代が終わった © 2022 Cookpad Inc. 6 2019 年頃のクックパッド
  7. • AWS コスト管理と向き合ってきてたどりついた答え • 次年度の予算を立てる作業に収束する ◦ AWS コストの実績について何にどの程度コストがかかっているのかがハッキリしている ◦ 予算の内訳に根拠を与え、過不足ないことを裏付ける

    • 開発チームが自律してコストをコントロールできる ◦ デプロイによって想定外のパフォーマンスに問題が出たときに ... ▪ 一旦お金で解決するか ▪ キチンと実装やアーキテクチャを直すか ▪ といった判断が自律的にできるようになる • 想定外のコスト (アノマリ) をいち早く検知して対処する ◦ 何も仕組みがないと、気付けずにムダなお金を払い続けることに ... © 2022 Cookpad Inc. 7 AWS コストを「説明」できるようにする #とは
  8. © 2022 Cookpad Inc. 8 AWS コスト最適化の一般的な話

  9. © 2022 Cookpad Inc. 9 • https://aws.amazon.com/jp/aws-cost-management/aws-cost-optimization/ • 要約すると以下の 3

    点セット a. スポットインスタンスを積極的に利用する b. RI や SP を購入しオンデマンドインスタンス (EC2) やその他マネージドサービス (RDS, ElastiCache etc.) を割安で利用する c. Cost Explorer や Trusted Advisor を使ってムダを発見し、インスタンスサイズや数を適切に 保つ AWS コスト最適化の一般的な話 それはそう (やりはじめると真顔になる )
  10. • スポットインスタンスの扱いって難しいんだけど ...? • RI / Savings Plans を買う量は...? どうやって管理するの

    ...? • Cost Explorer を見ても AWS サービスごとぐらいの粒度 でしかわからないんだけど ...? © 2022 Cookpad Inc. 10 AWS コスト最適化の一般的な話...?
  11. • スポットインスタンスの扱いって難しいんだけど ...? ◦ デプロイ基盤に ECS を使うことで (ほぼ) 解決 ◦

    詳細は Track B 13:30-14:15 「少人数でも運用できるインフラ作り」で • RI / Savings Plans を買う量は...? どうやって管理するの ...? ◦ 管理ツールを内製することで解決 • Cost Explorer を見ても AWS サービスごとぐらいの粒度 でしかわからないんだけど ...? ◦ コスト配分タグの整備・管理ツールの内製で解決 © 2022 Cookpad Inc. 11 AWS コスト最適化の一般的な話...?
  12. © 2022 Cookpad Inc. 12 AWS コストの管理を支える技術

  13. • RI と SP について ◦ Reserved Instance / Savings

    Plans ◦ まとまった金額を先払いすることで割引を受けられるサービス ◦ サービスやインスタンスタイプによるが 20% 〜 50% 程度割引に • 考えないといけないところ ◦ 監視・ダッシュボード ▪ 期限が迫ってきたときのアラート ▪ RI の coverage / utilization が変化したときのアラート ◦ 購入量の方針 © 2022 Cookpad Inc. 13 RI / SP の管理
  14. © 2022 Cookpad Inc. 14 RI / SP の管理: ダッシュボード

  15. © 2022 Cookpad Inc. 15 RI / SP の管理: ダッシュボード

    & アラート (Burimuon)
  16. • Cost Based RI Utilization ◦ Cost Explorer から取得できる coverage

    はどのインスタンスタイプも重みが同じ ◦ 実際は t3.medium よりも r6g.xlarge が余るほうがダメージが大きい ◦ Burimuon で重みを付けてプロット • Cost Explorer 自体にアラート機能はあるが ... ◦ Grafana でまとめてメトリクスを眺めたい ◦ PagerDuty のアラートを自動で resolve したい ◦ しきい値を Terraform でコード管理したい © 2022 Cookpad Inc. 16 RI / SP の管理: ダッシュボード & アラート (Burimuon)
  17. • コスト管理の業務フローの中心となる内製スタッフ向けウェブツール • 最初は小さなスプレッドシートによるプロトタイピングから始まった • 主な機能 ◦ 予算・購入決裁管理 ◦ コスト予測・月次レポートの半自動生成

    ◦ 今年の累計 AWS コスト ◦ Project タグの管理機能 ◦ コストのアノマリトラッカー © 2022 Cookpad Inc. 17 Costco (COST COnsole)
  18. © 2022 Cookpad Inc. 18 Costco を中心としたコスト管理のフロー 2022 2023 月次

    レポート ふりかえり 毎月のイテレーション 問題があれば対応 ・・・・ 予算に収まるように調整 予算 レ ふりかえり 毎
  19. © 2022 Cookpad Inc. 19 Costco: 予算管理機能

  20. © 2022 Cookpad Inc. 20 Costco: 予算管理機能 • Cost Explorer

    のフィルタ (JSON) として 管理してるのがミソ! • (ある意味) 動くコードとして定義して、 認識のブレがないようにする
  21. © 2022 Cookpad Inc. 21 Costco: 購入決裁管理機能 Workday (ERP システム)

    からバッチでインポート (S3 経由) 購入決裁 (おさいふ) の残額 使途と使った額の一覧
  22. © 2022 Cookpad Inc. 22 Costco: 今月のコスト予測

  23. © 2022 Cookpad Inc. 23 Costco: 月次レポートの半自動生成 コストカテゴリ

  24. © 2022 Cookpad Inc. 24 Costco: 月次レポートの半自動生成

  25. © 2022 Cookpad Inc. 25 Costco: 今年の累計 AWS コスト

  26. • 実際にどのようにコストを分類しているのか • コスト配分タグ (cost allocation tag) で分類 • 登録したキーのタグを使って

    ◦ Cost Explorer の条件に含めてクエリできる ◦ Cost and Usage Report のデータもタグで分類できる • クックパッドでは ◦ Project ◦ Name ◦ Role ◦ Environment ◦ Resource ◦ Owner • 主要な AWS サービスのリソースは Project タグを必須としている © 2022 Cookpad Inc. 26 Costco: Project タグの分類機能
  27. • 規模が大きくなると管理が難しい ◦ 設定する値の粒度が揃わない ◦ システムやサービスの退役によって使われなくなったタグが区別できない ◦ コンテキストが失われたタグが意味しているものが分からない • メタ情報であるタグにメタ情報を付けて管理する

    ← コレスキ © 2022 Cookpad Inc. 27 Costco: Project タグの分類機能
  28. © 2022 Cookpad Inc. 28 Costco: Project タグの分類機能 Cost Explorer

    へのリンク Cost Anomaly Detection へのリンク Slack へのリンク
  29. © 2022 Cookpad Inc. 29 Costco: Project タグの分類機能

  30. © 2022 Cookpad Inc. 30 Project タグのホワイトリスト管理

  31. © 2022 Cookpad Inc. 31 Project タグのホワイトリスト管理

  32. • Terraform リポジトリの pull request 上でのチェック ◦ terraform-linter (内製ツール) •

    主要 AWS リソースの監視 ◦ EC2、RDS、ElastiCache など ◦ AWS Config Rules ◦ Tagcop (内製ツール) ▪ AWS Config Rule の required-tags が対応していないものを扱う ▪ e.g. ElastiCache cluster ▪ バッチ (ECS task) で定期的に見回りをしている © 2022 Cookpad Inc. 32 Project タグの強制
  33. © 2022 Cookpad Inc. 33 Project タグの強制: terraform-linter

  34. © 2022 Cookpad Inc. 34 Project タグの強制: AWS Config Rules

    アラートを上げるための remediation action 自動で EBS volume にタグを付与する remediation action
  35. © 2022 Cookpad Inc. 35 Project タグの強制: YAML DE PROGURAMINGU

    (SSM Automation)
  36. © 2022 Cookpad Inc. 36 Project タグの強制: 進め方 Cost Explorer

    でコスト割合の大きい サービスを調べる AWS Config rule or Tagcop に そのサービスのリソースのタグを 扱う実装を追加 違反しているリソースに ひたすらタグつけを頑張る
  37. © 2022 Cookpad Inc. 37 Costco: アノマリトラッカー

  38. © 2022 Cookpad Inc. 38 Costco: アノマリトラッカー Cost Anomaly Detection

    へのリンク 対応 GitHub issue へのリンク
  39. © 2022 Cookpad Inc. 39 役に立った事例・社内に与えた影響

  40. © 2022 Cookpad Inc. 40 • 月次のふりかえりで MediaLive のコストが異様に増加していることに気付く •

    動画配信システムで作成された MediaLive リソースが削除されず残り続けてしまった ◦ つまり無を配信し続けていた ... • 開発チームで対応してもらうことで解決 事例: MediaLive の利用料金が勢いよく増えていて不穏です
  41. © 2022 Cookpad Inc. 41 事例: セキュリティに属する Lambda の料金が 2020-08

    から盛り上がっている
  42. • 開発チーム主導でコストについて考えてもらえるようになってきた • コストに関する議論をしやすくなった ◦ スピードを重視して札束でなぐる、というような判断を 自信を持ってできるようになった ◦ 開発チームを巻き込みやすくなった •

    AWS コストに関する情報の透明性が上がった ◦ バックオフィスや経営層もコストについて把握できている • 予算案の作成が楽になり、その説得力も増した • 属人性が下がった ◦ 業務プロセスがコードとして存在している ◦ 職人芸のようなものを減らせている © 2022 Cookpad Inc. 42 社内に与えた影響
  43. © 2022 Cookpad Inc. 43 まとめ

  44. • 組織の拡大と変遷に合わせて AWS コスト管理の仕組みを整えてきた • Costco を中心としたコスト管理フローを整えた ◦ RI /

    SP の管理 ◦ 月次のふりかえり・異常があったときの対応 ◦ 予算案の作成時に 1 年通してのふりかえり • 組織の状況やステージに合わせて進めるのが Good ◦ スプレッドシートから始めてもいい ◦ AWS Budgets などのマネージドサービスも活用 ◦ やっていくぞ! となったときに思い出してもらえれば嬉しいです ! © 2022 Cookpad Inc. 44 まとめ
  45. © 2022 Cookpad Inc. 45

  46. © 2022 Cookpad Inc. 46 おまけ (時間の都合で省いたスライドなど)

  47. © 2022 Cookpad Inc. 47 • これだけでひとつのトピックとして成立してしまうのでざっくり • 原則: 動かしたいものを

    ECS に載せる ◦ ECS クラスタをスポットインスタンスで構成 ◦ 要件によっては Fargate Spot も ◦ DB などは AWS のマネージドサービスを利用 • 現在は EC2 の利用の大部分は ECS のスポットインスタンス ◦ 一部オンデマンドも利用しているが Savings Plans でカバー • ECS がなかった頃は Spotscaler というツールを利用していた ◦ レシピサービス用の Rails が動く EC2 インスタンスを直接操作 スポットインスタンスの積極的な利用
  48. • 内製ツール • 開発者が自由に使えるサンドボックスアカウント • リソースの消し忘れでコストが膨らみがち • 主要 AWS リソースを全部消すバッチで毎日リソースを削除

    • 必要であれば削除を回避できる ◦ Owner、ExpireDate、ReasonForKeeping タグをもれなくつける ◦ 誰がどういう理由で残しているのかを明確にする © 2022 Cookpad Inc. 48 Lunala: 開発者用サンドボックス AWS アカウントのリソース管理