Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
SendGridのEvent Webhookをサーバーレスアーキテクチャで構築した話
Search
Minoru Noda
August 31, 2023
Programming
1
590
SendGridのEvent Webhookをサーバーレスアーキテクチャで構築した話
Minoru Noda
August 31, 2023
Tweet
Share
Other Decks in Programming
See All in Programming
競技プログラミングへのお誘い@阪大BOOSTセミナー
kotamanegi
0
350
開発者とQAの越境で自動テストが増える開発プロセスを実現する
92thunder
1
180
Scalaから始めるOpenFeature入門 / Scalaわいわい勉強会 #4
arthur1
1
300
14 Years of iOS: Lessons and Key Points
seyfoyun
1
770
Discord Bot with AI -for English learners-
xin9le
1
120
Symfony Mapper Component
soyuka
2
730
命名をリントする
chiroruxx
1
380
わたしの星のままで一番星になる ~ 出産を機にSIerからEC事業会社に転職した話 ~
kimura_m_29
0
180
今年一番支援させていただいたのは認証系サービスでした
satoshi256kbyte
1
250
これでLambdaが不要に?!Step FunctionsのJSONata対応について
iwatatomoya
2
3.6k
事業成長を爆速で進めてきたプロダクトエンジニアたちの成功談・失敗談
nealle
3
1.4k
Semantic Kernelのネイティブプラグインで知識拡張をしてみる
tomokusaba
0
180
Featured
See All Featured
Designing for Performance
lara
604
68k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
2
290
4 Signs Your Business is Dying
shpigford
181
21k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
665
120k
Fontdeck: Realign not Redesign
paulrobertlloyd
82
5.3k
The World Runs on Bad Software
bkeepers
PRO
65
11k
It's Worth the Effort
3n
183
28k
A designer walks into a library…
pauljervisheath
204
24k
Large-scale JavaScript Application Architecture
addyosmani
510
110k
The Cost Of JavaScript in 2023
addyosmani
45
7k
Fantastic passwords and where to find them - at NoRuKo
philnash
50
2.9k
Building Applications with DynamoDB
mza
91
6.1k
Transcript
SendGridのEvent Webhookを サーバーレスアーキテクチャで 構築した話 私たちのサーバーレスアーキテクチャはこれだ!Lunch LT 株式会社JMDC
© JMDC Inc. 2 自己紹介
© JMDC Inc. 3 自己紹介 株式会社JMDC • プロダクト開発部 • バックエンドエンジニア
野田 実 / Minoru NODA
© JMDC Inc. 4 アジェンダ
© JMDC Inc. 5 アジェンダ 1. 背景 2. 初期実装 Lambda
Functionの実装 3. 問題 503 SlowDown 4. 解決 Kinesis Data Firehoseでバッファリング 5. まとめ
© JMDC Inc. 6 背景
© JMDC Inc. 7 背景 システム特徴 • Ruby on Rails製のローンチ後、7年経過したプロダクト
• 発行ID数は約540万ID(2023年3月末時点) • インフラはAWS • サービスがスケールした段階で改めて他のメールサービスを見てみると、コストや安定性の面で SendGridが有利になったの で移行することに決定 • メールの送信数・開封数・クリック数を取得していて、施策の効果検証の指標として活用 SendGridへのメールサービス移行プロジェクト発足
© JMDC Inc. 8 背景 アーキテクチャ検討 • 元々使っていたメールサービスではメールの送信数、 開封数、クリック数をAPIで取得していた •
日次更新 • SendGridでは送信、開封、クリックなどといった イベントごとにEvent Webhookを飛ばすことができる • 大量のリクエストが発生する • Railsで受けるのは現実的でない • SendGridにもAPIはあるがEvent Webhookでデータ蓄積が推奨 • S3に蓄積してAthenaで送信数、開封数、クリック数を 取得するアーキテクチャにする方向で進めていくことに決定 • データストアとしてDynamoDBも検討したが、 Readの頻度が少ない、コストの優位性もないので不採用 SendGridへのメールサービス移行プロジェクト発足
© JMDC Inc. 9 背景 アーキテクチャ検討 • 元々使っていたメールサービスではメールの送信数、 開封数、クリック数をAPIで取得していた •
日次更新 • SendGridでは送信、開封、クリックなどといった イベントごとにEvent Webhookを飛ばすことができる • 大量のリクエストが発生する • Railsで受けるのは現実的でない • SendGridにもAPIはあるがEvent Webhookでデータ蓄積が推奨 • S3に蓄積してAthenaで送信数、開封数、クリック数を 取得するアーキテクチャにする方向で進めていくことに決定 • データストアとしてDynamoDBも検討したが、 Readの頻度が少ない、コストの優位性もないので不採用 SendGridへメールサービスを移行 今日はこの部分の話をします
© JMDC Inc. 10 初期実装 Lambda Functionの実装
© JMDC Inc. 11 Lambda Functionの実装 • API GatewayはHTTPで作成 •
S3にWebhook用のバケットを作成し、蓄積 • 一意なファイル名を生成 • API Gatewayのendpointを知ってるユーザーな ら任意の文字列をPOSTしS3へ保存できてしま う • (実際はyear/month/dayでprefixを切る、gzへ 圧縮しているが省略) 素朴な実装でまずはやってみる
© JMDC Inc. 12 Lambda Functionの実装 • Signed Event WebhookというSendGridの認証の機構を利用
• Signed Event Webhook Requestsを有効にすると公開鍵が 発行される • Event Webhookに X-Twilio-Email-Event-Webhook-Signature, X-Twilio-Email-Event-Webhook-Timestampヘッダーがつく ようになる • それらと Event Webhookのbodyで認証を行う • この実装でしばらく運用 認証を考えた実装
© JMDC Inc. 13 問題 503 Slow Down
© JMDC Inc. 14 • S3へ保存するときに503 Slow Downが発生 • 原因:
prefix ごとのリクエストが多すぎる • > you can send 3,500 PUT/COPY/POST/DELETE or 5,500 GET/HEAD requests per second per prefix in an S3 bucket. https://repost.aws/knowledge-center/http-5xx-errors-s3 • 送信、開封、クリックごとに POST -> POST 数が莫大 問題発生 503 Slow Downの発生
© JMDC Inc. 15 解決 Kinesis Data Firehoseでバッファリング
© JMDC Inc. 16 Kinesis Data Firehoseでのバッファリング • 1リクエスト-> 1
S3 postが原因 • バッファリングで解消を図る • Lambdaから直接 S3へpost するのではなく Kinesis Data Firehose でバッファリング • S3へのpost回数を減らす • prefixをyear/month/day/hourへ • アーキテクチャ変更により503 Slow Downは 発生しなくなった • 1年近く運用しているが、安定 中間層を設け解決
© JMDC Inc. 17 まとめ
© JMDC Inc. 18 まとめ • サーバーレスアーキテクチャで大量のリクエストを安定して捌くことができた • 問題が発生してもサーバーレスのサービスを組み合わせることで解消できた
• S3でSlow Downが発生することなどチームに知見が溜まった • サービスを組み合わせて課題解決、楽しい! サーバーレスを用いることで高スループットなアーキテクチャが実現できた
© JMDC Inc. 19 We are hiring! JMDCでは一緒にプロダクト開発を推進いただける方を積極採用中です! 今日のお話しを聞いていただき、少しでもご興味をお持ちいただけましたら ぜひまずはカジュアルにお話しできればと思います。
▲カジュアル面談 エントリーページ
None