Slide 1

Slide 1 text

複数の外部接続環境で 仕様の異なるIncoming Webhookを 統一的に扱うためのアーキテクチャ 2023.3.9 @shnjtk 株式会社LayerX

Slide 2

Slide 2 text

© 2023 LayerX Inc. 2 自己紹介 高江 信次 LayerX バクラク事業部 バクラクビジネスカード 開発チーム EM兼TechLead 2019年12月にLayerXにジョイン バクラク事業の立ち上げ期からサービス全体のインフラ開発・運用を担当 現在はバクラクビジネスカードの開発・運用に従事 @shnjtk

Slide 3

Slide 3 text

© 2023 LayerX Inc. 3 バクラクシリーズラインナップ * 経費精算のSlack連携は申請内容の通知のみ 稟議・支払申請・経費精算・ワークフロー ・AIが領収書を5秒でデータ化 ・承認はチャットアプリから ・シームレスな内部統制構築 仕訳・支払処理効率化 ・AIが請求書を5秒でデータ化 ・仕訳データを自動学習、 手入力ゼロへ ・改正電子帳簿保存法に対応 ・利用料無料 ・即時追加発行 ・1億円以上決済可能 法人向けクレジットカード ・無料で始められる ・手入力ゼロで証憑管理 ・改正電子帳簿保存法に対応 帳票保存・ストレージ

Slide 4

Slide 4 text

© 2023 LayerX Inc. 4 バクラクビジネスカードの外部サービス連携 (Incoming Webhook) 決済電文、カード状態変更、etc. 本人確認結果通知 入金通知 サービスによってWebhookの仕様が異なる (リトライの有無、バックオフ間隔、最大リトライ回数など)

Slide 5

Slide 5 text

© 2023 LayerX Inc. 5 アーキテクチャ設計時の検討事項 ● サービスの不具合でWebhookを処理できなかった場合に、自社のタイミングでリトライできるよう にしたい ○ 初めて接続するサービスであるため、本番運用時にどのようなメッセージが届くか事前に全て を把握することは不可能 ○ 特に決済サービスについては、メッセージの内容や送信パターンは加盟店次第であるため、 運用開始時点の処理ロジックでは対応できないケースが発生する可能性がある ○ 仮に不具合があった場合に、修正してリリースした後、手動でリトライをかける仕組みが欲しい

Slide 6

Slide 6 text

© 2023 LayerX Inc. 6 アーキテクチャ 処理順序 1. API Gateway経由でLambdaでメッセージを受信 2. LambdaでメッセージをS3に保管し、ジョブを作成してSQSに送信 3. 上記処理が成功したらLambdaはレスポンスとして200 OKを返す 4. workerでSQSからジョブを受信し、S3からメッセージを取得して処理を実行 設計のポイント ● workerの処理が失敗した場合、ジョブがSQS(ソースキュー)からDLQに移される ○ 手動でソースキューに戻せばリトライ可能 ● メッセージはそのままS3に保管されているため、デバッグの際に実データを見ながら 調査・検証できる

Slide 7

Slide 7 text

Confidential © 2022 LayerX Inc. 7 メリット・デメリット メリット デメリット ● リトライを任意のタイミングで実行できる ● Webhookのメッセージが失われないため、サービスに不具合があっても修正をリリースした後にリトライ できる ● Webhookが大量に届いた場合でも一旦Lambdaで受けてキューイングするため、結果的にスロットリン グになりworkerの処理能力に合わせてメッセージを処理できる ● Webhookを受けた時にDBなどのデータを照合・検証して200 OK以外のレスポンスを返す必要がある 場合、ソースコードやリリースの管理が複雑になる ○ 例) Lambdaとworkerでモデルを共通化するためにmonorepoを導入するなど ○ 今回は外部サービスのWebhook仕様として常に200 OKを返せばよいシンプルなものであったた め、Lambdaとworkerは別リポジトリで独立して管理している

Slide 8

Slide 8 text

© 2023 LayerX Inc. 8 まとめ ● 仕様が異なる複数のIncoming Webhookを処理する際は、 Lambda + S3 + SQS で一度メッセージを保管してworkerで処理することで、リトライの仕組みを 自社仕様で統一できる ● Webhookを受けた時点でメッセージが保管されるため、サービスに不具合が あった場合でも修正して後からリトライできる

Slide 9

Slide 9 text

© 2023 LayerX Inc. 9 バクラク事業に興味がある方、ぜひカジュアルにお話しましょう!!