>100 Views
July 16, 24
スライド概要
JAWS-UG Okayama 2024
Stripe Developer Advocate
JAWS-UG Okayama 2024 サブスクリプション請求から 始めるAmazon EventBridge - 非同期な現実と向き合う方法 岡本 秀高 ( @hidetaka_dev ) 2024/04
岡本 秀高 JP_Stripes Stripe Developer Advocate ● ● Stripeを使った開発Tips / 新機能情報 / ユースケース紹介 ○ Qiita / Zennでの技術向け記事作成 ○ JP_Stripes + 他コミュニティでの越境登壇 コミュニティ育ちのコミュニティ転職経験持ち ○ Digitalcube: WordPress community ○ Stripe: JP_Stripes / JAWS-UG https://hidetaka.dev/ja-JP https://wp-kyoto.net Stripeユーザーによる、 決済機能開発やサービス収益化等の 知識や経験を共有するコミュニティ https://jpstripes.connpass.com/ https://www.youtube.com/@jp_stripes
イベント / Event 4
API呼び出し ● アプリケーションからの イベント ● 状態変化通知がトリガー API呼び出しがトリガー ● 同期的な処理フロー ○ ● ○ ● 「Aが終わったらBをする」 手続き的な実装 ユーザー作成 → 契約情報作成 → リソース システムからの 非同期的な処理フロー ○ ● 「Xな時、AとBを起動する」 独立した実装 ○ 注文イベント ■ 発送 / CRM / 会計 5
同期的な SaaS作成フローの例
同期的な SaaS作成フローの例 「スタックの作成が失敗したら サブスクをキャンセルしたい」
同期的な SaaS作成フローの例 「銀行振込での支払いなので、 入金が確認できるまで待って」 「スタックの作成が失敗したら サブスクをキャンセルしたい」
銀行振込と CFNエラーに 対応した結果
銀行振込と CFNエラーに 対応した結果 「個別の大型契約がとれた! こっちでユーザーアカウント発行できるようにして」
11
アプリケーションに 何が起きた? 12
世の中は 「非同期」で 構成されている 写真:Vardan Papikyan on Unsplash https://unsplash.com/ja/写真/DnXqvmS0eXM Unsplashライセンス
電車の移動で 考える https://www.pakutaso.com/20220807216content-130.html
「電車での移動」をイベント駆動に イベント 処理(やること) 電車がホームに到着した ● ● ● 行き先と種別を確認する 目的地に行かないなら、次のイベントまで待機 目的地に行くなら、乗車する対象に設定 電車の扉が開いた ● ● ● 降りる人がいるかを確認 いる場合は、降りる人がいなくなるまで待機 いない場合は、乗車を実行 降りる人がいなくなった ● 乗車を実行 発車ベルがなった ● 「まだ乗車していない」場合、乗車対象から削除 15
日常生活の 至る所に イベントは存 在する If: もし This: XXなら Then: その時 That: YYする https://stripe.com/sessions 16
サブスクリプション SaaSでの「イベント」 17
JAWS-UG 岡山 サブスクリプションは「イベント」だらけ Subscription 作成日: 6月10日 無料期間: 7 日間 決済リトライ完了 トライアル終了 申し込み 6月 未払い・期日超過 更新・請求 10th 17th Trial 更新・請求 7月 契約期間 17th プラン変更・解約 8月 17th 契約期間 18
はじめのフローをイベント駆動にしてみると・・・
システムは、イベントをトリガーにして作るだけ
システムは、イベントをトリガーにして作るだけ 「銀行振込での支払いなので、 入金が確認できるまで待って」
システムは、イベントをトリガーにして作るだけ じゃあ「支払い完了」イベントを トリガーに変えますね 「銀行振込での支払いなので、 入金が確認できるまで待って」
用途ごとに処理やコードが分離するため、変更に強い
決済にも「非同期」がある 決済手段 同期 or 非同期 クレジットカード ● ● 通常は同期的に請求できる 3DSの認証が中断された場合、 認証が再開される or 期限切れを待つため「非同期」に 銀行振込 ● ● 入金されたことを待つため「非同期」 「入金金額の多寡」もイベントとして検知する ウォレット系 ● ● ● サービスによって変化 専用のページに遷移する場合は「非同期」 モーダルなどでも、中断されると「非同期」に 24
EventBridge ネイティブ連携 https://docs.stripe.com/event-destinations/eventbridge
EventBridgeでのStripeイベントのフィルター Sourceでstripe.comを指定 detail-typeで Stripeのリソース名を指定 detailで、JSON構造に対応した 条件を書くと、絞り込み 右の例 : 「5000円以上の請求書」に 関する全てのイベント 27
Revenue Operation を実現するための、AWS クラウドデザインパターン 不正利用・未払い発生の検知・自動化パターン 解決したい課題 AWS account Amazon EventBridge ・未払いや不正利用 / 解約の迅速な検知 ・決済や請求処理の自動化 このパターンでの解決方法 ・決済 / 請求イベントを SNS経由で通知 ・通知を利用したい人やサービスが SNSトピックを購読 Admin 実装時のポイント Amazon Simple Notification Service Server ・StripeまたはEventBridgeにて、 通知したいデータだけフィルタする ・イベントの数が多い場合は、 Amazon SQSを利用する 28
Revenue Operation を実現するための、AWS クラウドデザインパターン CRM( 顧客サポート )自動化パターン 解決したい課題 AWS account ・トライアルや新規顧客のサポート ・顧客に送信するメールの自動化 Amazon EventBridge AWS Step Functions workflow このパターンでの解決方法 ・請求 / 決済イベントに対応した メール送信ワークフローを実装 ・Lambdaを利用して、 メール内容をカスタマイズ 実装時のポイント Customers Amazon Simple Email Service AWS Lambda ・LambdaからStripe APIを利用し、 クーポンや割引の自動化も可能 29
AWS Startup Tech Meetup 福岡 #2 ~ いくぜ!サーバーレス!~ Webhook活用例1: フリートライアルのフォローアップ ● Stripeの「customer.subscription.trial_will_end」イベントを利用 ○ 3日前または手動でトライアルを終了させた場合に発火 ● Step FunctionsからSESで顧客に追加のフォローアップメール 送信 ○ 自動解約の場合、リソースやアカウント削除などの注意喚起 ● Pinpointを使えば、LINEやSMSへの追加送信も可能 ○ ユーザー層によっては、メールよりもLINEやSMSが有効な場合も ○ LINE Message APIでは、プランアップグレードのCTA誘導なども可能 #AWSStartup 30
AWS Startup Tech Meetup 福岡 #2 ~ いくぜ!サーバーレス!~ Webhook活用例2: 長期利用顧客のアップグレード提案 ● ● ● customer.subscription.updatedイベントを利用 ○ サブスクリプションの開始日と現在を比較 ○ 「12ヶ月以上契約の月額プランユーザー」などでフィルタ SESやPinpointで、顧客に年額プランなどの長期プランを自動提案 DynamoDBに累計支払額や契約数などを保存することで、 DynamoDB Stream経由で優良顧客の発見も可能 #AWSStartup 31
Stripe x AWSの連携事例 StripeとAWSで作るフルサーバレスな解析サービス構築 by 清家さん ECサービスでの Stripe実装例 by 三浦さん https://speakerdeck.com/seike460/building-a-fully-serverless-analy tic-service-with-stripe-and-aws?slide=12 https://speakerdeck.com/miu_crescent/ecsabisudenostripeshi-zhuang-ling ?slide=13 32
手続き的な処理 何かを待つ処理 ● ● API呼び出しで同期的に作る イベントで非同期に作る ○ 「Aが終わったらBをする」 ○ 「もしXになったら、Yする」 ○ バリデーションや ○ SaaSや トランザクションなど ● 深掘りキーワード マネージドサービスとの連携 ● 深掘りキーワード ○ オーケストレーション ○ コレオグラフィ ○ Sagaパターン ○ EDA ( Event Driven Architecture ) 33
まとめ ● ● 「〜されたらXする」と表現するものは、だいたい非同期系 ○ 結果を待たなくて良い・ドメインが異なる場合もだいたい非同期 ○ 外部サービスやマネージドサービスとの連携もだいたい非同期 非同期系をシステム化するときは、EventBridgeを検討しよう ○ ● (詳しくはAWS下川さんや濱さんの資料を!) 「同期処理を、非同期に実行したい」ときはStep Functions
7/27@大阪 ワークショップ https://jawsugkgirls.doorkeeper.jp/events/173345
7/29@大阪 スタートアップ コミュニティ https://aws-startup-community.connpass.com/event/323403/
Thanks! 岡本 秀高 Stripe Developer Advocate ● ● ● Stripeを使った開発Tips / 新機能情報 / ユースケース紹介 ○ Qiita / Zennでの技術向け記事作成 ○ JP_Stripes + 他コミュニティでの越境登壇 製品フィードバックのヒアリングと共有 ○ Friction logging コミュニティ育ちのコミュニティ転職経験持ち ○ Digitalcube: WordPress community ○ Stripe: JP_Stripes community ● ● ● https://qiita.com/organizations/stripe https://hidetaka.dev/ja-JP https://wp-kyoto.net