Slide 1

Slide 1 text

       © Chatwork 成長を続けるSaaSのAWSコスト管理において 開発者としてできること 2023年6月22日 SRE部 佐々木真也 Chatwork株式会社 AWS Dev Day 2023 Tokyo

Slide 2

Slide 2 text

自己紹介 2 ● 名前 ○ 佐々木真也 ● 所属 ○ Chatwork株式会社 ■ 2020年6月〜 ■ SRE部 マネージャー ● Twitter ○ @taishin ● 趣味 ○ サッカー観戦

Slide 3

Slide 3 text

会社概要 3 会社名 Chatwork株式会社 代表取締役CEO 山本 正喜 グループ従業員数 379名(2023年3月末日時点) 所在地 東京、大阪 設立 2004年11月11日

Slide 4

Slide 4 text

Chatworkとは 4 効率的に情報共有できる グループチャット 仕事の見える化ができる タスク管理 見落としがなくなる ファイル管理 いつでも会議ができる ビデオ/音声通話 * BOXIL SaaS AWARD 2022「ランキング部門 コラボレーション部門賞」「ベスト評価賞 (初期設定の容易さNo.1、価格の満足度No.1)」を受賞 BOXIL「Chatwork」口コミ評価 * Nielsen NetView 及びNielsen Mobile NetView Customized Report 2022年5月度調べ月次利用者(MAU:Monthly Active User)調査。 * 調査対象はChatwork、Microsoft Teams、Slack、LINE WORKS、Skypeを含む47サービスをChatwork株式会社にて選定。

Slide 5

Slide 5 text

Chatworkは利用者数No.1*のビジネスチャット 5 3月 リリース 10万社 突破! 20万社 突破! 導入社数 39万7000社以上! (2023年3月末日時点) 30万社 突破! * Nielsen NetView 及びNielsen Mobile NetView Customized Report 2022年5月度調べ月次利用者(MAU:Monthly Active User)調査。 調査対象はChatwork、Microsoft Teams、Slack、LINE WORKS、Skypeを含む47サービスをChatwork株式会社にて選定

Slide 6

Slide 6 text

SaaSの成長とAmazon Web Servicesのコスト SaaSの成長と開発組織の変化 開発者もできるコスト管理 まとめ 1 2 3 4 AGENDA アジェンダ

Slide 7

Slide 7 text

SaaSの成長とAmazon Web Servicesのコスト SaaSの成長と開発組織の変化 開発者もできるコスト管理 まとめ 1 2 3 4 AGENDA アジェンダ

Slide 8

Slide 8 text

SaaSの成長 8 ● 事業継続に必要なビジネス指標が伸び続けている状態 ○ SaaSのビジネス指標の例 ■ 売上 ■ アクセス数 ■ 登録ユーザー数 ■ アクティブユーザー数 ■ 契約社数

Slide 9

Slide 9 text

SaaSにおけるAWSコストの妥当性 9 ● 現状のAWSコストは妥当なのか? ● SaaSは成長しているので、AWSコストも増加しているが、 増加率は妥当なのか?

Slide 10

Slide 10 text

SaaSにおけるAWSコストの妥当性 10 ● 現状のAWSコストは妥当なのか? ● SaaSは成長しているので、AWSコストも増加しているが、 増加率は妥当なのか? ユニットメトリクス(ユニットコスト)を算出し、 経営層含め合意できていることが重要

Slide 11

Slide 11 text

ユニットメトリクス 11 ● ビジネス指標に対するAWSコストの割合 ○ AWSコスト ÷ ビジネス指標 = ユニットメトリックス https://aws.amazon.com/jp/blogs/aws-cloud-financial-management/what-is-a-unit-metric/

Slide 12

Slide 12 text

ユニットメトリクスの増減によるアクション 12 ● ユニットメトリクス増 ○ 対策が必要 ■ 構成の見直し ■ コスト最適化 ● ユニットメトリクス減 ○ 問題なし ■ 運用負荷を軽減するような サービス導入の検討 ● 定期的な見直しも必要

Slide 13

Slide 13 text

Chatworkにおけるユニットメトリクス 13 ● MAU (1か月あたりのアクティブユーザー数) を重要視し、 AWSコストに対するビジネス指標としている ● 1MAUあたりのAWSコストをモニタリングしている AWSコスト月額 ÷ MAU = 1MAUあたりのAWSコスト

Slide 14

Slide 14 text

SaaSの成長とAWSコストで重要なこと 14 ● SaaSシステムのコストに対するビジネス指標が決められている ● ユニットメトリクスがモニタリングできるようになっている & 経営層含めて 合意が取れている ● ユニットメトリクスの増減によってコストに対するアクションが取れる

Slide 15

Slide 15 text

SaaSの成長とAmazon Web Servicesのコスト SaaSの成長と開発組織の変化 開発者もできるコスト管理 まとめ 1 2 3 4 AGENDA アジェンダ

Slide 16

Slide 16 text

立ち上げ期 16 ● 開発チームが分かれていない ○ 全員がデプロイ ○ 全員がリソースやコストについても把握 Deploy Cost Check

Slide 17

Slide 17 text

チーム分割期 17 ● 職能でチームを分割 ○ AWSリソースのデプロイはAWS担当(インフラチームやSREチーム)に依頼する ○ コストの確認はAWS担当が実施 ○ AWS担当がリソースは把握しているので、コストについてもAWS担当が 概ね把握している AWS担当 Cost Check 開発チーム1 開発チーム2 依頼 Deploy

Slide 18

Slide 18 text

マイクロサービス期 18 ● サービスごとにチームを分割 (逆コンウェイの法則) ○ 従来のやり方では、AWS担当の負荷が大きく、デプロイまでに時間がかかるため、 各チームでデプロイできる体制をとる ○ AWS担当では各リソースの把握はできなくなる ○ 全体のコストはAWS担当が確認しているが、サービス単位では把握できていない AWS担当 サービス3 Deploy サービス4 Deploy サービス1 Deploy サービス2 Deploy Cost Check

Slide 19

Slide 19 text

チーム分割後のありがちな問題 19 ● コストの変動があっても、おおまかな情報だと誰も心当たりがない サービス 1 サービス 2 サービス 3 Amazon DynamoDBの費用が 上がってるんですが、 心当たりありませんか? ・・・ ・・・ ・・・ AWS担当

Slide 20

Slide 20 text

チーム分割後のありがちな問題 20 ● AWS Cost ExplorerやAmazon CloudWatchのメトリクスを使って調査 ● リソースごとにメトリクスがあるAmazon DynamoDB等のサービスであれば 分かりやすいが、Amazon Elastic Container Registry (Amazon ECR)等の メトリクスがリポジトリごとにない場合など調査に時間がかかる サービス 1 サービス 2 サービス 3 Amazon DynamoDBのxxxxという テーブルのRCUが増加して費用が上 がってるんですが、心当たりあり ませんか? はい! AWS担当

Slide 21

Slide 21 text

Chatworkで実際にあった問題 21 Pull Pull ● Amazon ECRの DataTransfer-Out-Bytes が急に増加 ● 原因は一部チームのCIをCircleCIからGithub Actionsに 変更したため ○ CircleCIはAWS上に稼働しているので、リージョンを 揃えれば転送量はかからないが、Github Actionsは AWS外からのダウンロードになるので、 転送量が発生した ● Amazon ECRはリポジトリごとのメトリクスが ないため、原因の調査に時間を要した

Slide 22

Slide 22 text

問題点 22 ● 調査に時間がかかる ○ 問題に気づいて調査を始めた段階で実は大きな問題だったりする ● 1つのサービスがコスト増、1つのサービスがコスト減だった場合や、全体から 見ると割合の小さいサービスだった場合、表面化しにくい

Slide 23

Slide 23 text

問題点 23 ● 調査に時間がかかる ○ 問題に気づいて調査を始めた段階で実は大きな問題だったりする ● 1つのサービスがコスト増、1つのサービスがコスト減だった場合や、全体から 見ると割合の小さいサービスだった場合、表面化しにくい 開発者自身で自サービスのコスト管理を行い、 ユニットメトリクスを把握する

Slide 24

Slide 24 text

SaaSの成長とAmazon Web Servicesのコスト SaaSの成長と開発組織の変化 開発者もできるコスト管理 まとめ 1 2 3 4 AGENDA アジェンダ

Slide 25

Slide 25 text

開発者もできるコスト管理 25 自サービスのコストを把握する 1. コストチェック運用 2. リソース作成時のコスト見積もり 開発者自身で自サービスのコスト管理を行い、 ユニットメトリクスを把握する

Slide 26

Slide 26 text

1. コストチェック運用

Slide 27

Slide 27 text

コストチェック運用 27 ● 定期的に自サービスのAWSコストをチェックする ● ツール ○ AWS Cost Explorer ○ AWS Cost Anomaly Detection

Slide 28

Slide 28 text

コストチェック運用 28 ● 定期的に自サービスのAWSコストをチェックする ● ツール ○ AWS Cost Explorer ○ AWS Cost Anomaly Detection 自サービスのコスト、可視化されてますか?

Slide 29

Slide 29 text

コスト情報の可視化方法 29 ● リソースにコスト情報識別用のタグ(コスト配分タグ)をつける 参考:AWS コスト配分タグの使用 https://docs.aws.amazon.com/ja_jp/awsaccountbilling/latest/aboutv2/cost-alloc-tags.html

Slide 30

Slide 30 text

コスト配分タグ すすめ方 30 ● 開発組織全体で統一したKeyを決める ○ サービス名やチーム名 (両方でもOK) ■ Chatworkでは、チーム名は変更があるかもしれないので サービス名を指定 ○ Billingアカウントでコスト配分タグを指定する ● 各リソースにKeyに対応する情報をValueに設定する 参考:AWS リソースのタグ管理 〜タグ付けと統制〜(前編) https://aws.amazon.com/jp/blogs/news/aws-tagging-and-governance-part1/

Slide 31

Slide 31 text

コスト配分タグ タグの一括付与の方法 31 ● タグエディタ ○ 既存のリソースの検索結果に一括してタグを付与

Slide 32

Slide 32 text

コスト配分タグ タグの一括付与の方法 32 ● Terraform ○ default_tags を指定すれば、 全部のリソースにタグが 付与される https://www.hashicorp.com/blog/default-tags-in-the-terraform-aws-provider

Slide 33

Slide 33 text

コスト配分タグ タグの付け漏れを防ぐ 33 ● AWS Config Rules ○ AWS CloudFormation Guardを使って簡単にカスタムポリシールールが作成できる ● AWSマネージドルール required-tags はチェックできるリソースが限定される ○ Amazon Simple Queue Service (SQS)やAmazon ECRのチェックはできない (2023/6現在) ■ https://docs.aws.amazon.com/ja_jp/config/latest/developerguide/required-tags.html

Slide 34

Slide 34 text

コスト配分タグ タグの付け漏れを防ぐ 34 ● IaCのCI/CDで作成時にブロック ○ ChatworkではAtlantis + Conftestを利用 ■ Plan結果をOpen Policy Agentでチェックし、タグがない場合は Applyをブロック

Slide 35

Slide 35 text

AWS Cost Explorer 35 ● コストの可視化 ○ コスト配分タグでフィルターすることによって、自サービスのコスト分析が可能 自サービスのみ表示し て分析が可能

Slide 36

Slide 36 text

AWS Cost Anomaly Detection 36 ● コストの異常を検出し、 通知してくれるサービス ● コスト配分タグを指定し、自サービスの コスト異常を通知することが可能

Slide 37

Slide 37 text

(おまけ) AWS Systems Manager Application Manager 37 ● Application Manager ○ タグを指定し、コスト以外の情報も集約して表示させることが可能 https://aws.amazon.com/jp/blogs/news/new-aws-systems-manager-consolidates-application-management/

Slide 38

Slide 38 text

2. リソース作成時のコスト見積もり

Slide 39

Slide 39 text

リソース作成時のコスト見積もり 39 ● AWSリソース作成時にコストを試算し、ユニットメトリクスへの影響を 把握する ● ツール ○ AWS Pricing Calculator ○ Infracost

Slide 40

Slide 40 text

AWS Pricing Calculator 40 ● サイズや利用料を指定して、試算 https://calculator.aws/

Slide 41

Slide 41 text

Infracost 41 ● Terraformの設定ファイルからコスト試算 https://www.infracost.io/

Slide 42

Slide 42 text

Infracost 42 ● tfファイルからコストを試算 $ cat dynamodb.tf provider "aws" { region = "ap-northeast-1" } resource "aws_dynamodb_table" "dynamodb-table" { name = "test_table" billing_mode = "PROVISIONED" read_capacity = 20 write_capacity = 20 $ infracost breakdown --path . Evaluating Terraform directory at . ✔ Downloading Terraform modules ✔ Evaluating Terraform directory ✔ Retrieving cloud prices to calculate costs Project: . Name Monthly Qty Unit Monthly Cost aws_dynamodb_table.dynamodb-table ├─ Write capacity unit (WCU) 20 WCU $10.83 ├─ Read capacity unit (RCU) 20 RCU $2.17 ├─ Data storage Monthly cost depends on usage: $0.29 per GB ├─ Point-In-Time Recovery (PITR) backup storage Monthly cost depends on usage: $0.23 per GB ├─ On-demand backup storage Monthly cost depends on usage: $0.11 per GB ├─ Table data restored Monthly cost depends on usage: $0.17 per GB └─ Streams read request unit (sRRU) Monthly cost depends on usage: $0.000000228 per sRRUs OVERALL TOTAL $13.00

Slide 43

Slide 43 text

Infracost 43 ● 変更の差分 $ cat dynamodb.tf provider "aws" { region = "ap-northeast-1" } resource "aws_dynamodb_table" "dynamodb-table" { name = "test_table" billing_mode = "PROVISIONED" read_capacity = 50 write_capacity = 100 $ iinfracost diff --path . --compare-to infracost-dynamodb.json Evaluating Terraform directory at . ✔ Downloading Terraform modules ✔ Evaluating Terraform directory ✔ Retrieving cloud prices to calculate costs ────────────────────────────────── Project: . ~ aws_dynamodb_table.dynamodb-table +$25 ($13 → $38) ~ Write capacity unit (WCU) +$16 ($11 → $27) ~ Read capacity unit (RCU) +$9 ($2 → $11) Monthly cost change for . Amount: +$25 ($13 → $38) Percent: +192% ────────────────────────────────── Key: ~ changed, + added, - removed ────────────────────────────────── Infracost estimate: monthly cost will increase by $25 (+192%) ↑ ┏━━━━━━━┳━━━━━┳━━━━━┳━━━━━━━━━┓ ┃ Project ┃ Previous ┃ New ┃ Diff ┃ ┣━━━━━━━╋━━━━━╋━━━━━╋━━━━━━━━━┫ ┃ . ┃ $13 ┃ $38 ┃ +$25 (+192%) ┃ ┗━━━━━━━┻━━━━━┻━━━━━┻━━━━━━━━━┛

Slide 44

Slide 44 text

Infracost 44 ● 想定使用量を指定して試算 $ cat vpc.tf provider "aws" { region = "ap-northeast-1" } module "vpc" { source = "terraform-aws-modules/vpc/aws" name = "my-vpc" cidr = "10.0.0.0/16" azs = ["ap-northeast-1a", "ap-northeast-1c", "ap-northeast-1d"] private_subnets = ["10.0.1.0/24", "10.0.2.0/24", "10.0.3.0/24"] public_subnets = ["10.0.101.0/24", "10.0.102.0/24", "10.0.103.0/24"] enable_nat_gateway = true } $ cat infracost-usage.yml version: 0.1 resource_type_default_usage: aws_nat_gateway: monthly_data_processed_gb: 1000 $ infracost breakdown --path . --usage-file infracost-usage.yml Evaluating Terraform directory at . ✔ Downloading Terraform modules ✔ Evaluating Terraform directory ✔ Retrieving cloud prices to calculate costs Project: . Name Monthly Qty Unit Monthly Cost module.vpc.aws_nat_gateway.this[0] ├─ NAT gateway 730 hours $45.26 └─ Data processed 1,000 GB $62.00 module.vpc.aws_nat_gateway.this[1] ├─ NAT gateway 730 hours $45.26 └─ Data processed 1,000 GB $62.00 module.vpc.aws_nat_gateway.this[2] ├─ NAT gateway 730 hours $45.26 └─ Data processed 1,000 GB $62.00 OVERALL TOTAL $321.78

Slide 45

Slide 45 text

Infracost 45 ● VS Code Extension ○ コードを書けば自動計算してくれる

Slide 46

Slide 46 text

Infracost 46 ● CI/CDとのインテグレーションにも対応

Slide 47

Slide 47 text

SaaSの成長とAmazon Web Servicesのコスト SaaSの成長と開発組織の変化 開発者もできるコスト管理 まとめ 1 2 3 4 AGENDA アジェンダ

Slide 48

Slide 48 text

まとめ 48 ● SaaSシステムのAWSコストは、ユニットメトリクスをモニタリングし、 妥当性の判断や意思決定を行う ● マイクロサービス時代の開発組織は、開発者自身で自サービスの コストを把握し、管理していく ● そのためには、サービスごとにコストを可視化し、運用していくことが 重要 ○ タグ付け重要

Slide 49

Slide 49 text

We are Hiring !!! 49 https://hrmos.co/pages/chatwork/jobs/1020019

Slide 50

Slide 50 text

働くをもっと楽しく、創造的に