AWS月額利用料を$137,000→$87,000に削減して信頼性に投資した話
by
Masaya Hayashi
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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
ボトルネックから潰す 「覚悟」を持つ コスト削減で重要なコト