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
気がついたらSagaパターンになっていた!? 少人数で運用するサーバレスバックエンド
Search
Kazuki Miura
PRO
June 24, 2023
Technology
1
1.7k
気がついたらSagaパターンになっていた!? 少人数で運用するサーバレスバックエンド
#RejectDay2023
Kazuki Miura
PRO
June 24, 2023
Tweet
Share
More Decks by Kazuki Miura
See All by Kazuki Miura
なぜ あなたはそんなに re:Invent に行くのか?
miu_crescent
PRO
0
260
エンタメ方向のTを広げよう!Werner先生の クロージングキーノートを 深掘りするための小ネタ10
miu_crescent
PRO
1
130
Amazon Bedrockを活用した 報道向け文字起こしシステムの開発
miu_crescent
PRO
0
99
us-east-1 の障害が 起きると なぜ ソワソワするのか
miu_crescent
PRO
0
24
us-east-1 の障害が 起きると なぜ ソワソワするのか
miu_crescent
PRO
3
1.1k
完全未経験からAWSと共に セキュリティに立ち向かった半生
miu_crescent
PRO
1
130
Stripe Terminal を触ってみた!!
miu_crescent
PRO
0
71
アクシズを探せ! 各勢力の位置関係についての考察
miu_crescent
PRO
1
74
地方だからできた! 東北でのAWS事例を一挙紹介!#地方だからできる
miu_crescent
PRO
0
44
Other Decks in Technology
See All in Technology
All About Sansan – for New Global Engineers
sansan33
PRO
1
1.3k
人工知能のための哲学塾 ニューロフィロソフィ篇 第零夜 「ニューロフィロソフィとは何か?」
miyayou
0
440
AIと融ける人間の冒険
pujisi
0
120
re:Invent2025 セッションレポ ~Spec-driven development with Kiro~
nrinetcom
PRO
2
170
産業的変化も組織的変化も乗り越えられるチームへの成長 〜チームの変化から見出す明るい未来〜
kakehashi
PRO
1
540
歴史から学ぶ、Goのメモリ管理基礎
logica0419
14
2.7k
Oracle Cloud Infrastructure:2025年12月度サービス・アップデート
oracle4engineer
PRO
0
290
マーケットプレイス版Oracle WebCenter Content For OCI
oracle4engineer
PRO
5
1.5k
田舎で20年スクラム(後編):一個人が企業で長期戦アジャイルに挑む意味
chinmo
1
1.4k
「リリースファースト」の実感を届けるには 〜停滞するチームに変化を起こすアプローチ〜 #RSGT2026
kintotechdev
0
880
投資戦略を量産せよ 2 - マケデコセミナー(2025/12/26)
gamella
1
640
Master Dataグループ紹介資料
sansan33
PRO
1
4.2k
Featured
See All Featured
Technical Leadership for Architectural Decision Making
baasie
0
200
Unsuck your backbone
ammeep
671
58k
Speed Design
sergeychernyshev
33
1.5k
Abbi's Birthday
coloredviolet
0
4.3k
AI: The stuff that nobody shows you
jnunemaker
PRO
2
170
Navigating Weather and Climate Data
rabernat
0
68
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
A Tale of Four Properties
chriscoyier
162
24k
Mobile First: as difficult as doing things right
swwweet
225
10k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
420
Producing Creativity
orderedlist
PRO
348
40k
The Art of Programming - Codeland 2020
erikaheidi
57
14k
Transcript
Reject Day 2023 気がついたらSagaパターンになっていた!? 少人数で運用するサーバレスバックエンド 2023.06.24 三浦一樹 #RejectDay2023
自己紹介 37歳 秋田→東京→札幌 サウナ大好き 三浦一樹 #RejectDay2023
自己紹介 #RejectDay2023 WithSecure Customer Ambassador を拝命しておりまして この間 フィンランドはヘルシンキに行ってきました
#AWSDevDay 楽しかった〜 #RejectDay2023
お仕事紹介 北海道を対象とした特定地上基幹放送事業者 #RejectDay2023
みなさんテレビ見てます? #RejectDay2023
みなさんテレビ見てます? #RejectDay2023
みなさんテレビ見てます? 今期は #だが情熱はある #RejectDay2023
お仕事紹介 BtoB事業 BtoC事業 テレビのCMや番組提供 番組関連のイベント事業 放送収入 番組の配信や 関連グッズの販売など ファンの方に直接お届けする 放送外収入
北海道を対象とした特定地上基幹放送事業者 01 02 #RejectDay2023
お仕事紹介 動画配信事業 EC事業 ネットデジタル事業部 #RejectDay2023
お仕事紹介 動画配信事業 EC事業 8人のチーム エンジニア3名 (+SES 2名) ネットデジタル事業部 #RejectDay2023
OIDC OIDC OIDC ざっくりアーキテクチャ #RejectDay2023 S3 MediaConvert S3 DynamoDB DynamoDB
DynamoDB AppSync Lambda API-GW Step Functions API-GW Amplify Amplify 担当者向け CMS 倉庫 システム BFF Frontend Backend
今日の主役 EC事業 #RejectDay2023 AWS Step Functions 10 +
AWS Step Functions みなさん使ってます? #RejectDay2023
概要 AWS Step Functions の簡単な説明 ECでどのようにつかっているか エラーと戦う ステートマシンの分割 Sagaパターンと出会う みんなのステートマシンがみたい!!
#RejectDay2023
AWS Step Functions 基本情報 #RejectDay2023
基本情報 #RejectDay2023 AWS Step Functions
基本情報 #RejectDay2023 AWS Step Functions ] 半角スペース ] 半角スペース
基本情報 #RejectDay2023 AWS Step Functions は、 デベロッパーが AWS のサービスを利用して分散型アプリケー ションを構築し、プロセスを自動化し、マイクロサービスのオ
ーケストレーション、データと機械学習のパイプラインを構築 できるようにするビジュアルワークフローサービスです。 AWS Step Functions ] 半角スペース ] 半角スペース
基本情報 #RejectDay2023 詳細な説明は今日はしないです。ごめんなさい ざっくりだけ AWS Step Functions ] 半角スペース ]
半角スペース
基本情報 #RejectDay2023 Input JSON Output JSON SDK
基本情報 #RejectDay2023 Workflow Studio 最高! ステートマシンを GUIで作れる!
https://aws.amazon.com/jp/builders-flash/202306/implement-step-functions-error-handling エラーハンドリング #RejectDay2023 山口さんのbuilders.flash ステート遷移を利用したエラーハンドリング ステート内の処理リトライを利用したエラーハンドリング Choice フローを利用した処理ハンドリング EventBridge を利用したエラーハンドリング
AWS Step Functions ECサイト #RejectDay2023
ECの注文まで #RejectDay2023 カート画面 情報入力 確認画面 購入完了
#RejectDay2023 カート画面 情報入力 確認画面 購入完了 在庫チェック 在庫 Table カート Table
ECの注文まで
#RejectDay2023 カート画面 情報入力 確認画面 購入完了 在庫チェック 在庫 Table カート Table
temp Table カート Table ECの注文まで 送料計算
#RejectDay2023 カート画面 情報入力 確認画面 購入完了 在庫チェック 在庫 Table カート Table
temp Table カート Table 決済処理 在庫 Table 注文 Table 配送 Table ECの注文まで 送料計算
#RejectDay2023 カート画面 情報入力 確認画面 購入完了 在庫チェック 送料計算 在庫 Table カート
Table temp Table カート Table 決済処理 在庫 Table 注文 Table 配送 Table 2s 5s ECの注文まで
2s 5s #RejectDay2023 カート画面 情報入力 確認画面 購入完了 在庫チェック 在庫 Table
カート Table temp Table カート Table 決済処理 在庫 Table 注文 Table 配送 Table ECの注文まで 送料計算
エラーと戦う #RejectDay2023
#RejectDay2023 在庫確保できた 決済成功
#RejectDay2023 在庫確保できた 決済成功 注文分の在庫をテーブルから引く 失敗したら戻せばいい
#RejectDay2023 在庫確保できた 決済失敗 決済成功
#RejectDay2023 在庫確保できた 決済失敗 決済成功 お金もらってる ここで失敗したら?
#RejectDay2023 在庫確保できた 決済失敗 決済成功 返金処理 失敗 こんな感じ?
決済失敗 返金処理 #RejectDay2023 在庫確保できた 決済成功 失敗 Stripe の手数料が発生 大量発生したら金が、、、 クレカの状態まで戻せない
ユーザはどう思う? この方法を採用すると
決済失敗 返金処理 #RejectDay2023 在庫確保できた 決済成功 失敗 Stripe の手数料が発生 大量発生したら金が、、、 クレカの状態まで戻せない
ユーザはどう思う? この方法を採用すると 戻さない方が良さそう
#RejectDay2023 在庫確保できた 決済失敗 決済成功 これ以降は 意地でも通す
#RejectDay2023 在庫確保できた 決済失敗 決済成功 カートの論理削除 マイページの情報作成・完了メールの送信
#RejectDay2023 在庫確保できた 決済失敗 決済成功 まぁ、なんとかなりそう。 最悪TTLで消えてくれる ここまでの状態を保持しつつ、再起する必要あり Step Functions の分割が必要
ステートマシンの分割 #RejectDay2023
Step Functions は途中からの再実行ができない 結果を待たず、 別のStep Functions を起動だけすると その状態を保存した形で処理を渡せる #RejectDay2023 在庫確保できた
決済失敗 決済成功 { "StateMachineArn": "arn:", "Input": { "tempOrderId.$": "$.tempOrderId", "AWS_STEP_FUNCTIONS_STARTED_BY_EXECUTION_ID.$": "$$.Execution.Id" } } すぐ通したい
#RejectDay2023 在庫確保できた 決済失敗 決済成功 失敗 SNS 人が対応 SNS コンソールから Step
Functions 再起 失敗
#RejectDay2023 コンソールからボタン押したら 途中から再開できる
#RejectDay2023 その他の分岐を追加して、、、
#RejectDay2023 ECの注文処理 余裕があればデモ
#RejectDay2023 とりあえず大丈夫そうだけど 答え合わせがしたい
Saga パターンとは? #RejectDay2023
#RejectDay2023 https://speakerdeck.com/fatsushi/fen-san-sisutemuniokerusagapatanfalseaws-step-functions-niyorushi-zhuang-number-awsdevday AWS 福井さんの資料に出会う
#RejectDay2023 https://speakerdeck.com/fatsushi/fen-san-sisutemuniokerusagapatanfalseaws-step-functions-niyorushi-zhuang-number-awsdevday AWS 福井さんの資料に出会う
#RejectDay2023 https://speakerdeck.com/fatsushi/fen-san-sisutemuniokerusagapatanfalseaws-step-functions-niyorushi-zhuang-number-awsdevday オーケストレーションならStep Functions
#RejectDay2023 https://github.com/aws-samples/aws-step-functions-long-lived-transactions
#RejectDay2023 Saga パターンができてた!?
#RejectDay2023 在庫確保できた 決済失敗 決済成功 失敗 SNS 人が対応 SNS コンソールから Step
Functions 再起 失敗 補償トランザクション……?
#RejectDay2023 Saga パターンができてた!? みたいなもの?
#RejectDay2023 その他Sagaパターン資料 #AWSDevDay 2023 野村さんの資料 12章が丸っと トランザクショナルサーガ
”決して最善のアーキテクチャを狙ってはいけない。 むしろ 少なくとも最悪ではないトレードオフの組み合わせを狙おう” ソフトウェアアーキテクチャ・ハードパーツ / P.2 #RejectDay2023
#RejectDay2023 1年くらい無事だから 1年くらい運用しておりますが、 そもそも、かなり限定的な条件なので 手動を動かしたのは10回くらい
まとめ #RejectDay2023
まとめ AWS Step Functions 便利! エラーハンドリングは悩ましい 再起を考えると分割すると対応しやすい Sagaは先にちゃんと勉強しておくべきだった 1年以上とりあえず安定運用 理想との差分で大事なもの抜けてないか心配
みんなのステートマシンを見てみたい! いろいろ議論したい! #RejectDay2023
Thank You! #RejectDay2023 来年はCfP通るように頑張っていきます