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
layerx-bakuraku-how-to-handle-incoming-webhooks...
Search
shnjtk
March 08, 2023
Technology
4k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
layerx-bakuraku-how-to-handle-incoming-webhooks-with-difference-specifications-in-unified-way
shnjtk
March 08, 2023
More Decks by shnjtk
See All by shnjtk
EMになってもProduct Engineerであり続けるには
shnjtk
0
500
バクラクビジネスカード 運用業務に対する技術的な取り組み
shnjtk
0
180
20250707-AI活用の個人差を埋めるチームづくり
shnjtk
6
5.4k
プロダクト開発におけるAI時代の開発生産性
shnjtk
2
600
爆速開発文化を支えるProduct Engineerの 開発生産性向上の取り組み
shnjtk
16
14k
layerx-0-to-1-product-development-in-compound-startups
shnjtk
1
2.2k
layerx-bakuraku-how-to-achieve-agility-and-security
shnjtk
1
630
layerx-invoice-practical-devops-20211029
shnjtk
6
17k
layerx-invoice-practical-aws-architecture
shnjtk
1
2.9k
Other Decks in Technology
See All in Technology
20260903 Tokyo Jazug Night #62 | Azure エンジニアよ、 その環境は本当にセキュアか?
olivia_0707
1
610
なぜSRE・セキュリティは評価されないのか?守りの組織を事業成長エンジンに変えた実践
cscengineer
PRO
2
2.1k
Redmine 7.0で私が開発した新機能の狙いと背景
vividtone
1
100
多層防御と最⼩権限で実現する、安全なAIエージェント設計パターン
lycorptech_jp
PRO
0
120
Autonomous AI Databaseサービス・アップデート(FY27)/ adb-service-update-jp-fy27
oracle4engineer
PRO
0
100
リージョンの壁を越える、 ちょっと変わったAWSサービスの話
falken
PRO
0
210
Claude Codeで開発以外の業務も爆速化しよう!
minorun365
PRO
12
9.6k
AI-DLCって実際どう? 〜聞きたいこと全部聞いてみる〜
news_it_enj
0
220
Does an AI Watermark Survive Translation?
machinetranslation
0
520
振り返りこそエンジニアの本領
negima
0
270
GuardDuty 検知対応を DevOps Agent で効率化しようとしている話 / GuardDuty Investigations with DevOps Agent
masahirokawahara
1
280
PfEingのアプローチで働こう
rindrics
0
160
Featured
See All Featured
Joys of Absence: A Defence of Solitary Play
codingconduct
1
470
A Modern Web Designer's Workflow
chriscoyier
698
190k
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.6k
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
6
1.2k
Building the Perfect Custom Keyboard
takai
2
860
Why You Should Never Use an ORM
jnunemaker
PRO
61
10k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
300
Navigating Weather and Climate Data
rabernat
0
510
Building a Scalable Design System with Sketch
lauravandoore
463
34k
Designing Powerful Visuals for Engaging Learning
tmiket
1
530
Optimising Largest Contentful Paint
csswizardry
37
3.9k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
310
Transcript
複数の外部接続環境で 仕様の異なるIncoming Webhookを 統一的に扱うためのアーキテクチャ 2023.3.9 @shnjtk 株式会社LayerX
© 2023 LayerX Inc. 2 自己紹介 高江 信次 LayerX バクラク事業部 バクラクビジネスカード
開発チーム EM兼TechLead 2019年12月にLayerXにジョイン バクラク事業の立ち上げ期からサービス全体のインフラ開発・運用を担当 現在はバクラクビジネスカードの開発・運用に従事 @shnjtk
© 2023 LayerX Inc. 3 バクラクシリーズラインナップ * 経費精算のSlack連携は申請内容の通知のみ 稟議・支払申請・経費精算・ワークフロー ・AIが領収書を5秒でデータ化
・承認はチャットアプリから ・シームレスな内部統制構築 仕訳・支払処理効率化 ・AIが請求書を5秒でデータ化 ・仕訳データを自動学習、 手入力ゼロへ ・改正電子帳簿保存法に対応 ・利用料無料 ・即時追加発行 ・1億円以上決済可能 法人向けクレジットカード ・無料で始められる ・手入力ゼロで証憑管理 ・改正電子帳簿保存法に対応 帳票保存・ストレージ
© 2023 LayerX Inc. 4 バクラクビジネスカードの外部サービス連携 (Incoming Webhook) 決済電文、カード状態変更、etc. 本人確認結果通知
入金通知 サービスによってWebhookの仕様が異なる (リトライの有無、バックオフ間隔、最大リトライ回数など)
© 2023 LayerX Inc. 5 アーキテクチャ設計時の検討事項 • サービスの不具合でWebhookを処理できなかった場合に、自社のタイミングでリトライできるよう にしたい ◦
初めて接続するサービスであるため、本番運用時にどのようなメッセージが届くか事前に全て を把握することは不可能 ◦ 特に決済サービスについては、メッセージの内容や送信パターンは加盟店次第であるため、 運用開始時点の処理ロジックでは対応できないケースが発生する可能性がある ◦ 仮に不具合があった場合に、修正してリリースした後、手動でリトライをかける仕組みが欲しい
© 2023 LayerX Inc. 6 アーキテクチャ 処理順序 1. API Gateway経由でLambdaでメッセージを受信
2. LambdaでメッセージをS3に保管し、ジョブを作成してSQSに送信 3. 上記処理が成功したらLambdaはレスポンスとして200 OKを返す 4. workerでSQSからジョブを受信し、S3からメッセージを取得して処理を実行 設計のポイント • workerの処理が失敗した場合、ジョブがSQS(ソースキュー)からDLQに移される ◦ 手動でソースキューに戻せばリトライ可能 • メッセージはそのままS3に保管されているため、デバッグの際に実データを見ながら 調査・検証できる
Confidential © 2022 LayerX Inc. 7 メリット・デメリット メリット デメリット •
リトライを任意のタイミングで実行できる • Webhookのメッセージが失われないため、サービスに不具合があっても修正をリリースした後にリトライ できる • Webhookが大量に届いた場合でも一旦Lambdaで受けてキューイングするため、結果的にスロットリン グになりworkerの処理能力に合わせてメッセージを処理できる • Webhookを受けた時にDBなどのデータを照合・検証して200 OK以外のレスポンスを返す必要がある 場合、ソースコードやリリースの管理が複雑になる ◦ 例) Lambdaとworkerでモデルを共通化するためにmonorepoを導入するなど ◦ 今回は外部サービスのWebhook仕様として常に200 OKを返せばよいシンプルなものであったた め、Lambdaとworkerは別リポジトリで独立して管理している
© 2023 LayerX Inc. 8 まとめ • 仕様が異なる複数のIncoming Webhookを処理する際は、 Lambda
+ S3 + SQS で一度メッセージを保管してworkerで処理することで、リトライの仕組みを 自社仕様で統一できる • Webhookを受けた時点でメッセージが保管されるため、サービスに不具合が あった場合でも修正して後からリトライできる
© 2023 LayerX Inc. 9 バクラク事業に興味がある方、ぜひカジュアルにお話しましょう!!