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

成長を続けるSaaSのAWSコスト管理において 開発者としてできること / AWS DevDay SaaS Cost

sasaki
June 22, 2023

成長を続けるSaaSのAWSコスト管理において 開発者としてできること / AWS DevDay SaaS Cost

sasaki

June 22, 2023
Tweet

More Decks by sasaki

Other Decks in Technology

Transcript

  1. 自己紹介 2 • 名前 ◦ 佐々木真也 • 所属 ◦ Chatwork株式会社

    ▪ 2020年6月〜 ▪ SRE部 マネージャー • Twitter ◦ @taishin • 趣味 ◦ サッカー観戦
  2. 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株式会社にて選定。
  3. 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株式会社にて選定
  4. ユニットメトリクスの増減によるアクション 12 • ユニットメトリクス増 ◦ 対策が必要 ▪ 構成の見直し ▪ コスト最適化

    • ユニットメトリクス減 ◦ 問題なし ▪ 運用負荷を軽減するような サービス導入の検討 • 定期的な見直しも必要
  5. チーム分割後のありがちな問題 19 • コストの変動があっても、おおまかな情報だと誰も心当たりがない サービス 1 サービス 2 サービス 3

    Amazon DynamoDBの費用が 上がってるんですが、 心当たりありませんか? ・・・ ・・・ ・・・ AWS担当
  6. チーム分割後のありがちな問題 20 • AWS Cost ExplorerやAmazon CloudWatchのメトリクスを使って調査 • リソースごとにメトリクスがあるAmazon DynamoDB等のサービスであれば

    分かりやすいが、Amazon Elastic Container Registry (Amazon ECR)等の メトリクスがリポジトリごとにない場合など調査に時間がかかる サービス 1 サービス 2 サービス 3 Amazon DynamoDBのxxxxという テーブルのRCUが増加して費用が上 がってるんですが、心当たりあり ませんか? はい! AWS担当
  7. Chatworkで実際にあった問題 21 Pull Pull • Amazon ECRの DataTransfer-Out-Bytes が急に増加 •

    原因は一部チームのCIをCircleCIからGithub Actionsに 変更したため ◦ CircleCIはAWS上に稼働しているので、リージョンを 揃えれば転送量はかからないが、Github Actionsは AWS外からのダウンロードになるので、 転送量が発生した • Amazon ECRはリポジトリごとのメトリクスが ないため、原因の調査に時間を要した
  8. コストチェック運用 28 • 定期的に自サービスのAWSコストをチェックする • ツール ◦ AWS Cost Explorer

    ◦ AWS Cost Anomaly Detection 自サービスのコスト、可視化されてますか?
  9. コスト配分タグ すすめ方 30 • 開発組織全体で統一したKeyを決める ◦ サービス名やチーム名 (両方でもOK) ▪ Chatworkでは、チーム名は変更があるかもしれないので

    サービス名を指定 ◦ Billingアカウントでコスト配分タグを指定する • 各リソースにKeyに対応する情報をValueに設定する 参考:AWS リソースのタグ管理 〜タグ付けと統制〜(前編) https://aws.amazon.com/jp/blogs/news/aws-tagging-and-governance-part1/
  10. コスト配分タグ タグの付け漏れを防ぐ 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
  11. (おまけ) AWS Systems Manager Application Manager 37 • Application Manager

    ◦ タグを指定し、コスト以外の情報も集約して表示させることが可能 https://aws.amazon.com/jp/blogs/news/new-aws-systems-manager-consolidates-application-management/
  12. 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
  13. 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%) ┃ ┗━━━━━━━┻━━━━━┻━━━━━┻━━━━━━━━━┛
  14. 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