Upgrade to Pro — share decks privately, control downloads, hide ads and more …

layerx-bakuraku-how-to-handle-incoming-webhooks-with-difference-specifications-in-unified-way

shnjtk
March 08, 2023

 layerx-bakuraku-how-to-handle-incoming-webhooks-with-difference-specifications-in-unified-way

shnjtk

March 08, 2023
Tweet

More Decks by shnjtk

Other Decks in Technology

Transcript

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide