Slide 1

Slide 1 text

2023/09/02 Startup Day 2023 - AWS Startup Community AWS月額利用料を $137,000 → $87,000 に削減して 信頼性に投資した話 @rinchsan

Slide 2

Slide 2 text

今日はコスト削減ハンズオンもあるらしい ※ Startup Day 2023オフライン参加者限定

Slide 3

Slide 3 text

2023/09/02 AWS月額利用料を $137,000 → $87,000 に削減して 信頼性に投資した話 @rinchsan $146,000 Startup Day 2023 - AWS Startup Community

Slide 4

Slide 4 text

今日のキーワード

Slide 5

Slide 5 text

ボトルネックから潰す 「覚悟」を持つ 今日のキーワード

Slide 6

Slide 6 text

目次 プロダクトの急成長 1 コスト削減もボトルネックから 2 いろいろなコスト削減 3 信頼性やセキュリティへの投資 4

Slide 7

Slide 7 text

株式会社SODA ○ 2020年10月に入社 ○ Webエンジニア → VPoE & EM (2022年1月〜) ○ ミッション:エンジニアリングマネジメントをいい感じに ⇧⇧⇧ 株式会社サイバーエージェント ○ 2019年新卒入社 バックエンドエンジニア ○ Go / AWSでサービス開発 Masaya Hayashi - @rinchsan @rinchsan

Slide 8

Slide 8 text

誰かEMやりませんか?

Slide 9

Slide 9 text

プロダクトの急成長 1

Slide 10

Slide 10 text

国内 No.1 スニーカー・トレカフリマ HYPE DROP メディア コミュニティ マーケットプレイス

Slide 11

Slide 11 text

取り扱いカテゴリ拡充 BtoCの一次流通も混ざり合う 海外展開 スニーカー&トレカCtoCフリマに留まらない事業展開をしていく

Slide 12

Slide 12 text

そんなスニダンの急成長を見てみる

Slide 13

Slide 13 text

MAU リクエスト数 デプロイ頻度 AWS月額利用料 プロダクトの急成長

Slide 14

Slide 14 text

2年半で 100万人 → 500万人 MAU プロダクトの急成長

Slide 15

Slide 15 text

負荷スパイク(人気スニーカー発売など) 1万〜2万 rps リクエスト数 プロダクトの急成長

Slide 16

Slide 16 text

Monthlyで デプロイ 約100回 デプロイ頻度 D/D/D = 0.3 (Deployments / a Developer / a Day) デプロイ頻度 プロダクトの急成長

Slide 17

Slide 17 text

2年半で $43,000 → $146,000 AWS月額利用料 プロダクトの急成長

Slide 18

Slide 18 text

コスト削減もボトルネックから 2

Slide 19

Slide 19 text

パフォーマンスチューニングの鉄則は?

Slide 20

Slide 20 text

ボトルネックから潰す ボトルネックを放置したら効果ゼロ パフォーマンスチューニングの鉄則

Slide 21

Slide 21 text

“一カ所でも大きなボトル ネックが存在していると、 システム全体の性能が大き く上がることは決してあり ません。” ISUCON本

Slide 22

Slide 22 text

“実際に存在しているボトル ネックを解消せずに、他の 事例において効果的だった 手段だけをいくら積み重ね ても効果は薄いのです。” ISUCON本

Slide 23

Slide 23 text

支配的なコストから減らす 支配的な部分を放置したら効果ゼロ コスト削減も同じく ※ パフォーマンスの議論では計算量のオーダーが違うことが多いため、それと比べるとゼロというわけではない。

Slide 24

Slide 24 text

実際にどう削減されていったか

Slide 25

Slide 25 text

2022/08 - 2023/01 $146,000 → $87,000 半年で $60,000 削減

Slide 26

Slide 26 text

施策A:$40,000削減 施策B:$12,000削減 施策C:$2,700削減 ︙ 支配的なコストから削減

Slide 27

Slide 27 text

組織体制も軽くご紹介

Slide 28

Slide 28 text

直近2年半:2名→36名 コスト削減期間(2022/08-2023/01) :+11名 エンジニア組織の拡大

Slide 29

Slide 29 text

プロダクト開発組織の全体像

Slide 30

Slide 30 text

スペシャルサンクス:SREチーム @takehito @t-nagayama-soda @dangminhduc

Slide 31

Slide 31 text

あともう1つ重要なもの

Slide 32

Slide 32 text

覚悟

Slide 33

Slide 33 text

事業成長が大事 コストには目をつぶることも 後回しになりがち コスト削減には「覚悟」も必要

Slide 34

Slide 34 text

いろいろなコスト削減 3

Slide 35

Slide 35 text

まずはボトルネックを探す

Slide 36

Slide 36 text

削減金額予想が支配的なものを優先 ※ 構想段階のシートのため最終的な実施有無とは異なる部分があります。 ←サッと対応できるものもやる

Slide 37

Slide 37 text

VPC Endpoint導入:削減金額予想が最も大きいところから

Slide 38

Slide 38 text

まずは VPC Endpoint から!

Slide 39

Slide 39 text

スニダンはECS, Aurora, Elasticache, S3, ... などのオーソドックスな構成 ECS Aurora S3 Elasticache

Slide 40

Slide 40 text

VPC Endpoint導入の背景 ECS NAT Gateway ECR S3 Internet Private subnet 大量にNAT Gatewayを通っているのは主にECR/S3への通信のはず

Slide 41

Slide 41 text

数百MBytesなコンテナイメージのPullが大量に走る ECS Task起動数は35〜150個。デプロイは月に100回。1日に5回。

Slide 42

Slide 42 text

S3/ECRに対するVPC Endpointを作成 ECS VPC Endpoint ECR S3 Private subnet NAT Gatewayの料金が $50,000 削減される見込み Private接続

Slide 43

Slide 43 text

NAT Gatewayの通信料が一気に削減!

Slide 44

Slide 44 text

ここまでで $40,000 の削減 🎉

Slide 45

Slide 45 text

あれ、 $10,000 足りない…?

Slide 46

Slide 46 text

あ!! ECR Public からの Pull が!!

Slide 47

Slide 47 text

ECS Taskの中に、ECR PublicからPullするサイドカーコンテナが ECS VPC Endpoint ECR S3 Private subnet Private接続 NAT Gateway Internet ECR Public 試算すると、予想通り $10,000 に

Slide 48

Slide 48 text

ECR pull through cache の導入

Slide 49

Slide 49 text

ECR Public をキャッシュ Privateに自前で置かなくていい キャッシュ更新でイメージタグ更新 (自動でイメージタグが変わると困ることも多いので注意です) ECR pull through cache とは

Slide 50

Slide 50 text

ECR pull through cache の利用 Pull through cache ECR Public ECS VPC Endpoint ECR S3 Private subnet Private接続 Privateな ECR 上に ECR Public のイメージがキャッシュできるように 🎉

Slide 51

Slide 51 text

今度こそNAT Gatewayの通信量を大幅に削減!

Slide 52

Slide 52 text

ここまでで $52,000 の削減 🎉

Slide 53

Slide 53 text

次のボトルネックを探す

Slide 54

Slide 54 text

次のボトルネックを探す

Slide 55

Slide 55 text

WAFのログ配信先変更

Slide 56

Slide 56 text

WAFのログ配信先をCloudwatch LogsからS3へ Cloudwatch Logsに比べると分析・可視化は難しくなることに注意 ログ Cloudwatch Logs WAF ログ S3 WAF

Slide 57

Slide 57 text

ここまでで $54,700 の削減 🎉

Slide 58

Slide 58 text

次のボトルネック探しの旅へ...

Slide 59

Slide 59 text

不要リソースの削除 Gravitonインスタンスの利用 Auto-scaling policyの見直し 他にもいくつか細かいコスト削減を

Slide 60

Slide 60 text

不要リソースの削除 Gravitonインスタンスの利用 Auto-scaling policyの見直し 他にもいくつか細かいコスト削減を

Slide 61

Slide 61 text

アタッチされてないEIP削除 使われていない環境を削除 (EC2, ECS, Aurora, Elasticache…) 不要リソースの削除

Slide 62

Slide 62 text

不要リソースの削除 Gravitonインスタンスの利用 Auto-scaling policyの見直し 他にもいくつか細かいコスト削減を

Slide 63

Slide 63 text

Intelに比べてコスト効率20%向上 データストア系のみに適用 (ECSはARMで動くかの検証が必要でPendに) Gravitonインスタンスの利用

Slide 64

Slide 64 text

不要リソースの削除 Gravitonインスタンスの利用 Auto-scaling policyの見直し 他にもいくつか細かいコスト削減を

Slide 65

Slide 65 text

Step-scalingのしきい値調整 Target-tracking scalingの検証 Scheduled-scalingの設定調整 余分なECS/Auroraインスタンスが起動しないように

Slide 66

Slide 66 text

最終的に $60,000 の削減 🎉

Slide 67

Slide 67 text

信頼性やセキュリティへの投資 4

Slide 68

Slide 68 text

データストアのスケールアップ Security Hub導入 GuardDuty導入 信頼性やセキュリティへの投資

Slide 69

Slide 69 text

データストアのスケールアップ Security Hub導入 GuardDuty導入 信頼性やセキュリティへの投資

Slide 70

Slide 70 text

Aurora: db.r5 → db.r6g Elasticache(Memcached) : t3 → m6g Elasticache(Redis) : r5 → r6g データストアのスケールアップ

Slide 71

Slide 71 text

データストアのスケールアップ Security Hub導入 GuardDuty導入 信頼性やセキュリティへの投資

Slide 72

Slide 72 text

Security Hub:ある評価基準に従ってセキュリティスコアを算出 導入当初の44%からは向上しているが、57%は低いのでまだまだ精進が必要…!

Slide 73

Slide 73 text

Security Hub:評価基準は5種類から選択可能(導入当初は3種類だった) 現時点では、ある程度更新頻度の高いもののみ有効化

Slide 74

Slide 74 text

Security Hub:AWS Configから評価に必要な情報を取得 Aurora ECS Elasticache ︙ AWS Config Security Hub AWS Configは記録するリソース情報の量だけ課金される リソース情報を取得 リソース情報を取得して記録

Slide 75

Slide 75 text

Security Hub:AWS Configから評価に必要な情報を取得 Aurora ECS Elasticache ︙ AWS Config Security Hub AWS Configは記録するリソース情報の量だけ課金される リソース情報を取得 リソース情報を取得して記録 AWS AppConfigとはちがうよ

Slide 76

Slide 76 text

コスト削減 番外編

Slide 77

Slide 77 text

AWS Configの料金が高騰 大量のECS Taskの起動/停止の記録によって $15,000 まで跳ね上がった! Aurora ECS Elasticache ︙ AWS Config Security Hub リソース情報を取得 リソース情報を取得して記録

Slide 78

Slide 78 text

記録対象に不要なリソース “以外” を指定することで回避 除外しないほうが理想なので、スケール戦略の見直しは今後の課題

Slide 79

Slide 79 text

ちなみに、現在はリソースタイプごとに除外設定が可能 https://aws.amazon.com/jp/about-aws/whats-new/2023/06/aws-config-recording-exclusions-resource-type/

Slide 80

Slide 80 text

つまり、今後はこうできる excluded resource types に除外したいリソースタイプを指定

Slide 81

Slide 81 text

データストアのスケールアップ Security Hub導入 GuardDuty導入 信頼性やセキュリティへの投資

Slide 82

Slide 82 text

GuardDuty:とりあえず有効化! 有効化して以降、脅威を検知していないのは良いのか悪いのか…(多分良い)

Slide 83

Slide 83 text

まとめ

Slide 84

Slide 84 text

ボトルネックから潰す 「覚悟」を持つ コスト削減で重要なコト

Slide 85

Slide 85 text

ボトルネックを放置すると効果ゼロ まずは作戦を練るところから ボトルネックから潰す ※ パフォーマンスの議論では計算量のオーダーが違うことが多いため、それと比べるとゼロというわけではない。

Slide 86

Slide 86 text

コスト削減は後回しになりがち 削減しないと削減されない (あたりまえ) 「覚悟」を持つ

Slide 87

Slide 87 text

ボトルネックから潰す 「覚悟」を持つ コスト削減で重要なコト