Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

● @mozamimy ● クックパッド 技術部 SRE グループ ● 2016 年 新卒入社 ○ 実は 2015 年に上京して半年はレシピサービスの バックエンドを開発 ● AWS コストをいい感じにしてきた ● サーバーレスアーキテクチャを導入しやすい基盤づくり ● ← うさぎ (ルカチャン) と暮らしてます 自己紹介 © 2022 Cookpad Inc. 2

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

© 2022 Cookpad Inc. 4 AWS コストを説明できるようにする #とは

Slide 5

Slide 5 text

● お金は大切です 💰 ○ 組織とそれを構成する人間が目的を達成するための原動力 ○ ムダを省いて必要なところに使いたい ● AWS コストはかけた分だけリターンがあるわけでは ... ない ● 気付いたら大きなムダが発生していた、になりがち ○ パブリッククラウド特有の問題 ○ API やコンソールからカジュアルにリソースを買えてしまう ○ 数千万円規模の RI を買うのもワンポチ ○ なるべく高い精度でコストを予測し、管理してムダづかいをなくしたい © 2022 Cookpad Inc. 5 なぜ AWS コストを最適化すべきなのか

Slide 6

Slide 6 text

● インフラチームのリーダーが管理していた ○ スプレッドシート ○ チームの変遷で知見が断絶 ... ● そろそろキチンと管理していきたいということでコスト最適化を任される ● 予算案の作成に苦労して何が足りていないのかを知る ○ AWS コスト関係のイベントを 1 年分まとめてふりかえるのは困難 ○ そもそも AWS コストが十分に分類できていない ○ コスト管理のプロセスが属人的になってしまっている ● とにかく予算案の作成に苦労しない環境を作ろう ! ● 組織的にも変わりつつある時代だった ○ 新規事業の立ち上げが加速 ○ コスト面でもレシピサービスだけを考えればいい時代が終わった © 2022 Cookpad Inc. 6 2019 年頃のクックパッド

Slide 7

Slide 7 text

● AWS コスト管理と向き合ってきてたどりついた答え ● 次年度の予算を立てる作業に収束する ○ AWS コストの実績について何にどの程度コストがかかっているのかがハッキリしている ○ 予算の内訳に根拠を与え、過不足ないことを裏付ける ● 開発チームが自律してコストをコントロールできる ○ デプロイによって想定外のパフォーマンスに問題が出たときに ... ■ 一旦お金で解決するか ■ キチンと実装やアーキテクチャを直すか ■ といった判断が自律的にできるようになる ● 想定外のコスト (アノマリ) をいち早く検知して対処する ○ 何も仕組みがないと、気付けずにムダなお金を払い続けることに ... © 2022 Cookpad Inc. 7 AWS コストを「説明」できるようにする #とは

Slide 8

Slide 8 text

© 2022 Cookpad Inc. 8 AWS コスト最適化の一般的な話

Slide 9

Slide 9 text

© 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 コスト最適化の一般的な話 それはそう (やりはじめると真顔になる )

Slide 10

Slide 10 text

● スポットインスタンスの扱いって難しいんだけど ...? ● RI / Savings Plans を買う量は...? どうやって管理するの ...? ● Cost Explorer を見ても AWS サービスごとぐらいの粒度 でしかわからないんだけど ...? © 2022 Cookpad Inc. 10 AWS コスト最適化の一般的な話...?

Slide 11

Slide 11 text

● スポットインスタンスの扱いって難しいんだけど ...? ○ デプロイ基盤に ECS を使うことで (ほぼ) 解決 ○ 詳細は Track B 13:30-14:15 「少人数でも運用できるインフラ作り」で ● RI / Savings Plans を買う量は...? どうやって管理するの ...? ○ 管理ツールを内製することで解決 ● Cost Explorer を見ても AWS サービスごとぐらいの粒度 でしかわからないんだけど ...? ○ コスト配分タグの整備・管理ツールの内製で解決 © 2022 Cookpad Inc. 11 AWS コスト最適化の一般的な話...?

Slide 12

Slide 12 text

© 2022 Cookpad Inc. 12 AWS コストの管理を支える技術

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

© 2022 Cookpad Inc. 15 RI / SP の管理: ダッシュボード & アラート (Burimuon)

Slide 16

Slide 16 text

● 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)

Slide 17

Slide 17 text

● コスト管理の業務フローの中心となる内製スタッフ向けウェブツール ● 最初は小さなスプレッドシートによるプロトタイピングから始まった ● 主な機能 ○ 予算・購入決裁管理 ○ コスト予測・月次レポートの半自動生成 ○ 今年の累計 AWS コスト ○ Project タグの管理機能 ○ コストのアノマリトラッカー © 2022 Cookpad Inc. 17 Costco (COST COnsole)

Slide 18

Slide 18 text

© 2022 Cookpad Inc. 18 Costco を中心としたコスト管理のフロー 2022 2023 月次 レポート ふりかえり 毎月のイテレーション 問題があれば対応 ・・・・ 予算に収まるように調整 予算 レ ふりかえり 毎

Slide 19

Slide 19 text

© 2022 Cookpad Inc. 19 Costco: 予算管理機能

Slide 20

Slide 20 text

© 2022 Cookpad Inc. 20 Costco: 予算管理機能 ● Cost Explorer のフィルタ (JSON) として 管理してるのがミソ! ● (ある意味) 動くコードとして定義して、 認識のブレがないようにする

Slide 21

Slide 21 text

© 2022 Cookpad Inc. 21 Costco: 購入決裁管理機能 Workday (ERP システム) からバッチでインポート (S3 経由) 購入決裁 (おさいふ) の残額 使途と使った額の一覧

Slide 22

Slide 22 text

© 2022 Cookpad Inc. 22 Costco: 今月のコスト予測

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

● 実際にどのようにコストを分類しているのか ● コスト配分タグ (cost allocation tag) で分類 ● 登録したキーのタグを使って ○ Cost Explorer の条件に含めてクエリできる ○ Cost and Usage Report のデータもタグで分類できる ● クックパッドでは ○ Project ○ Name ○ Role ○ Environment ○ Resource ○ Owner ● 主要な AWS サービスのリソースは Project タグを必須としている © 2022 Cookpad Inc. 26 Costco: Project タグの分類機能

Slide 27

Slide 27 text

● 規模が大きくなると管理が難しい ○ 設定する値の粒度が揃わない ○ システムやサービスの退役によって使われなくなったタグが区別できない ○ コンテキストが失われたタグが意味しているものが分からない ● メタ情報であるタグにメタ情報を付けて管理する ← コレスキ © 2022 Cookpad Inc. 27 Costco: Project タグの分類機能

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

© 2022 Cookpad Inc. 29 Costco: Project タグの分類機能

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

● 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 タグの強制

Slide 33

Slide 33 text

© 2022 Cookpad Inc. 33 Project タグの強制: terraform-linter

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

© 2022 Cookpad Inc. 35 Project タグの強制: YAML DE PROGURAMINGU (SSM Automation)

Slide 36

Slide 36 text

© 2022 Cookpad Inc. 36 Project タグの強制: 進め方 Cost Explorer でコスト割合の大きい サービスを調べる AWS Config rule or Tagcop に そのサービスのリソースのタグを 扱う実装を追加 違反しているリソースに ひたすらタグつけを頑張る

Slide 37

Slide 37 text

© 2022 Cookpad Inc. 37 Costco: アノマリトラッカー

Slide 38

Slide 38 text

© 2022 Cookpad Inc. 38 Costco: アノマリトラッカー Cost Anomaly Detection へのリンク 対応 GitHub issue へのリンク

Slide 39

Slide 39 text

© 2022 Cookpad Inc. 39 役に立った事例・社内に与えた影響

Slide 40

Slide 40 text

© 2022 Cookpad Inc. 40 ● 月次のふりかえりで MediaLive のコストが異様に増加していることに気付く ● 動画配信システムで作成された MediaLive リソースが削除されず残り続けてしまった ○ つまり無を配信し続けていた ... ● 開発チームで対応してもらうことで解決 事例: MediaLive の利用料金が勢いよく増えていて不穏です

Slide 41

Slide 41 text

© 2022 Cookpad Inc. 41 事例: セキュリティに属する Lambda の料金が 2020-08 から盛り上がっている

Slide 42

Slide 42 text

● 開発チーム主導でコストについて考えてもらえるようになってきた ● コストに関する議論をしやすくなった ○ スピードを重視して札束でなぐる、というような判断を 自信を持ってできるようになった ○ 開発チームを巻き込みやすくなった ● AWS コストに関する情報の透明性が上がった ○ バックオフィスや経営層もコストについて把握できている ● 予算案の作成が楽になり、その説得力も増した ● 属人性が下がった ○ 業務プロセスがコードとして存在している ○ 職人芸のようなものを減らせている © 2022 Cookpad Inc. 42 社内に与えた影響

Slide 43

Slide 43 text

© 2022 Cookpad Inc. 43 まとめ

Slide 44

Slide 44 text

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

Slide 45

Slide 45 text

© 2022 Cookpad Inc. 45

Slide 46

Slide 46 text

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

Slide 47

Slide 47 text

© 2022 Cookpad Inc. 47 ● これだけでひとつのトピックとして成立してしまうのでざっくり ● 原則: 動かしたいものを ECS に載せる ○ ECS クラスタをスポットインスタンスで構成 ○ 要件によっては Fargate Spot も ○ DB などは AWS のマネージドサービスを利用 ● 現在は EC2 の利用の大部分は ECS のスポットインスタンス ○ 一部オンデマンドも利用しているが Savings Plans でカバー ● ECS がなかった頃は Spotscaler というツールを利用していた ○ レシピサービス用の Rails が動く EC2 インスタンスを直接操作 スポットインスタンスの積極的な利用

Slide 48

Slide 48 text

● 内製ツール ● 開発者が自由に使えるサンドボックスアカウント ● リソースの消し忘れでコストが膨らみがち ● 主要 AWS リソースを全部消すバッチで毎日リソースを削除 ● 必要であれば削除を回避できる ○ Owner、ExpireDate、ReasonForKeeping タグをもれなくつける ○ 誰がどういう理由で残しているのかを明確にする © 2022 Cookpad Inc. 48 Lunala: 開発者用サンドボックス AWS アカウントのリソース管理