Slide 1

Slide 1 text

Reject Day 2023 気がついたらSagaパターンになっていた!? 少人数で運用するサーバレスバックエンド 2023.06.24 三浦一樹 #RejectDay2023

Slide 2

Slide 2 text

自己紹介 37歳 秋田→東京→札幌 サウナ大好き 三浦一樹 #RejectDay2023

Slide 3

Slide 3 text

自己紹介 #RejectDay2023 WithSecure Customer Ambassador を拝命しておりまして この間 フィンランドはヘルシンキに行ってきました

Slide 4

Slide 4 text

#AWSDevDay 楽しかった〜 #RejectDay2023

Slide 5

Slide 5 text

お仕事紹介 北海道を対象とした特定地上基幹放送事業者 #RejectDay2023

Slide 6

Slide 6 text

みなさんテレビ見てます? #RejectDay2023

Slide 7

Slide 7 text

みなさんテレビ見てます? #RejectDay2023

Slide 8

Slide 8 text

みなさんテレビ見てます? 今期は #だが情熱はある #RejectDay2023

Slide 9

Slide 9 text

お仕事紹介 BtoB事業 BtoC事業 テレビのCMや番組提供 番組関連のイベント事業 放送収入 番組の配信や 関連グッズの販売など ファンの方に直接お届けする 放送外収入 北海道を対象とした特定地上基幹放送事業者 01 02 #RejectDay2023

Slide 10

Slide 10 text

お仕事紹介 動画配信事業 EC事業 ネットデジタル事業部 #RejectDay2023

Slide 11

Slide 11 text

お仕事紹介 動画配信事業 EC事業 8人のチーム エンジニア3名 (+SES 2名) ネットデジタル事業部 #RejectDay2023

Slide 12

Slide 12 text

OIDC OIDC OIDC ざっくりアーキテクチャ #RejectDay2023 S3 MediaConvert S3 DynamoDB DynamoDB DynamoDB AppSync Lambda API-GW Step Functions API-GW Amplify Amplify 担当者向け CMS 倉庫 システム BFF Frontend Backend

Slide 13

Slide 13 text

今日の主役 EC事業 #RejectDay2023 AWS Step Functions 10 +

Slide 14

Slide 14 text

AWS Step Functions みなさん使ってます? #RejectDay2023

Slide 15

Slide 15 text

概要 AWS Step Functions の簡単な説明 ECでどのようにつかっているか エラーと戦う ステートマシンの分割 Sagaパターンと出会う みんなのステートマシンがみたい!! #RejectDay2023

Slide 16

Slide 16 text

AWS Step Functions 基本情報 #RejectDay2023

Slide 17

Slide 17 text

基本情報 #RejectDay2023 AWS Step Functions

Slide 18

Slide 18 text

基本情報 #RejectDay2023 AWS Step Functions ] 半角スペース ] 半角スペース

Slide 19

Slide 19 text

基本情報 #RejectDay2023 AWS Step Functions は、 デベロッパーが AWS のサービスを利用して分散型アプリケー ションを構築し、プロセスを自動化し、マイクロサービスのオ ーケストレーション、データと機械学習のパイプラインを構築 できるようにするビジュアルワークフローサービスです。 AWS Step Functions ] 半角スペース ] 半角スペース

Slide 20

Slide 20 text

基本情報 #RejectDay2023 詳細な説明は今日はしないです。ごめんなさい ざっくりだけ AWS Step Functions ] 半角スペース ] 半角スペース

Slide 21

Slide 21 text

基本情報 #RejectDay2023 Input JSON Output JSON SDK

Slide 22

Slide 22 text

基本情報 #RejectDay2023 Workflow Studio 最高! ステートマシンを GUIで作れる!

Slide 23

Slide 23 text

https://aws.amazon.com/jp/builders-flash/202306/implement-step-functions-error-handling エラーハンドリング #RejectDay2023 山口さんのbuilders.flash ステート遷移を利用したエラーハンドリング ステート内の処理リトライを利用したエラーハンドリング Choice フローを利用した処理ハンドリング EventBridge を利用したエラーハンドリング

Slide 24

Slide 24 text

AWS Step Functions ECサイト #RejectDay2023

Slide 25

Slide 25 text

ECの注文まで #RejectDay2023 カート画面 情報入力 確認画面 購入完了

Slide 26

Slide 26 text

#RejectDay2023 カート画面 情報入力 確認画面 購入完了 在庫チェック 在庫 Table カート Table ECの注文まで

Slide 27

Slide 27 text

#RejectDay2023 カート画面 情報入力 確認画面 購入完了 在庫チェック 在庫 Table カート Table temp Table カート Table ECの注文まで 送料計算

Slide 28

Slide 28 text

#RejectDay2023 カート画面 情報入力 確認画面 購入完了 在庫チェック 在庫 Table カート Table temp Table カート Table 決済処理 在庫 Table 注文 Table 配送 Table ECの注文まで 送料計算

Slide 29

Slide 29 text

#RejectDay2023 カート画面 情報入力 確認画面 購入完了 在庫チェック 送料計算 在庫 Table カート Table temp Table カート Table 決済処理 在庫 Table 注文 Table 配送 Table 2s 5s ECの注文まで

Slide 30

Slide 30 text

2s 5s #RejectDay2023 カート画面 情報入力 確認画面 購入完了 在庫チェック 在庫 Table カート Table temp Table カート Table 決済処理 在庫 Table 注文 Table 配送 Table ECの注文まで 送料計算

Slide 31

Slide 31 text

エラーと戦う #RejectDay2023

Slide 32

Slide 32 text

#RejectDay2023 在庫確保できた 決済成功

Slide 33

Slide 33 text

#RejectDay2023 在庫確保できた 決済成功 注文分の在庫をテーブルから引く 失敗したら戻せばいい

Slide 34

Slide 34 text

#RejectDay2023 在庫確保できた 決済失敗 決済成功

Slide 35

Slide 35 text

#RejectDay2023 在庫確保できた 決済失敗 決済成功 お金もらってる ここで失敗したら?

Slide 36

Slide 36 text

#RejectDay2023 在庫確保できた 決済失敗 決済成功 返金処理 失敗 こんな感じ?

Slide 37

Slide 37 text

決済失敗 返金処理 #RejectDay2023 在庫確保できた 決済成功 失敗 Stripe の手数料が発生 大量発生したら金が、、、 クレカの状態まで戻せない ユーザはどう思う? この方法を採用すると

Slide 38

Slide 38 text

決済失敗 返金処理 #RejectDay2023 在庫確保できた 決済成功 失敗 Stripe の手数料が発生 大量発生したら金が、、、 クレカの状態まで戻せない ユーザはどう思う? この方法を採用すると 戻さない方が良さそう

Slide 39

Slide 39 text

#RejectDay2023 在庫確保できた 決済失敗 決済成功 これ以降は 意地でも通す

Slide 40

Slide 40 text

#RejectDay2023 在庫確保できた 決済失敗 決済成功 カートの論理削除 マイページの情報作成・完了メールの送信

Slide 41

Slide 41 text

#RejectDay2023 在庫確保できた 決済失敗 決済成功 まぁ、なんとかなりそう。 最悪TTLで消えてくれる ここまでの状態を保持しつつ、再起する必要あり Step Functions の分割が必要

Slide 42

Slide 42 text

ステートマシンの分割 #RejectDay2023

Slide 43

Slide 43 text

Step Functions は途中からの再実行ができない 結果を待たず、 別のStep Functions を起動だけすると その状態を保存した形で処理を渡せる #RejectDay2023 在庫確保できた 決済失敗 決済成功 { "StateMachineArn": "arn:",  "Input": {   "tempOrderId.$": "$.tempOrderId",   "AWS_STEP_FUNCTIONS_STARTED_BY_EXECUTION_ID.$": "$$.Execution.Id"  } } すぐ通したい

Slide 44

Slide 44 text

#RejectDay2023 在庫確保できた 決済失敗 決済成功 失敗 SNS 人が対応 SNS コンソールから Step Functions 再起 失敗

Slide 45

Slide 45 text

#RejectDay2023 コンソールからボタン押したら 途中から再開できる

Slide 46

Slide 46 text

#RejectDay2023 その他の分岐を追加して、、、

Slide 47

Slide 47 text

#RejectDay2023 ECの注文処理 余裕があればデモ

Slide 48

Slide 48 text

#RejectDay2023 とりあえず大丈夫そうだけど 答え合わせがしたい

Slide 49

Slide 49 text

Saga パターンとは? #RejectDay2023

Slide 50

Slide 50 text

#RejectDay2023 https://speakerdeck.com/fatsushi/fen-san-sisutemuniokerusagapatanfalseaws-step-functions-niyorushi-zhuang-number-awsdevday AWS 福井さんの資料に出会う

Slide 51

Slide 51 text

#RejectDay2023 https://speakerdeck.com/fatsushi/fen-san-sisutemuniokerusagapatanfalseaws-step-functions-niyorushi-zhuang-number-awsdevday AWS 福井さんの資料に出会う

Slide 52

Slide 52 text

#RejectDay2023 https://speakerdeck.com/fatsushi/fen-san-sisutemuniokerusagapatanfalseaws-step-functions-niyorushi-zhuang-number-awsdevday オーケストレーションならStep Functions

Slide 53

Slide 53 text

#RejectDay2023 https://github.com/aws-samples/aws-step-functions-long-lived-transactions

Slide 54

Slide 54 text

#RejectDay2023 Saga パターンができてた!?

Slide 55

Slide 55 text

#RejectDay2023 在庫確保できた 決済失敗 決済成功 失敗 SNS 人が対応 SNS コンソールから Step Functions 再起 失敗 補償トランザクション……?

Slide 56

Slide 56 text

#RejectDay2023 Saga パターンができてた!? みたいなもの?

Slide 57

Slide 57 text

#RejectDay2023 その他Sagaパターン資料 #AWSDevDay 2023 野村さんの資料 12章が丸っと トランザクショナルサーガ

Slide 58

Slide 58 text

”決して最善のアーキテクチャを狙ってはいけない。 むしろ 少なくとも最悪ではないトレードオフの組み合わせを狙おう” ソフトウェアアーキテクチャ・ハードパーツ / P.2 #RejectDay2023

Slide 59

Slide 59 text

#RejectDay2023 1年くらい無事だから 1年くらい運用しておりますが、 そもそも、かなり限定的な条件なので 手動を動かしたのは10回くらい

Slide 60

Slide 60 text

まとめ #RejectDay2023

Slide 61

Slide 61 text

まとめ AWS Step Functions 便利! エラーハンドリングは悩ましい 再起を考えると分割すると対応しやすい Sagaは先にちゃんと勉強しておくべきだった 1年以上とりあえず安定運用 理想との差分で大事なもの抜けてないか心配 みんなのステートマシンを見てみたい! いろいろ議論したい! #RejectDay2023

Slide 62

Slide 62 text

Thank You! #RejectDay2023 来年はCfP通るように頑張っていきます