Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
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
エンタメ方向のTを広げよう!Werner先生の クロージングキーノートを 深掘りするための小ネタ10
miu_crescent
PRO
1
85
Amazon Bedrockを活用した 報道向け文字起こしシステムの開発
miu_crescent
PRO
0
76
us-east-1 の障害が 起きると なぜ ソワソワするのか
miu_crescent
PRO
0
2
us-east-1 の障害が 起きると なぜ ソワソワするのか
miu_crescent
PRO
3
1k
完全未経験からAWSと共に セキュリティに立ち向かった半生
miu_crescent
PRO
1
110
Stripe Terminal を触ってみた!!
miu_crescent
PRO
0
64
アクシズを探せ! 各勢力の位置関係についての考察
miu_crescent
PRO
1
58
地方だからできた! 東北でのAWS事例を一挙紹介!#地方だからできる
miu_crescent
PRO
0
34
APIからデータベースまで、全てサーバレスで作ってみよう!
miu_crescent
PRO
0
24
Other Decks in Technology
See All in Technology
Sansanが実践する Platform EngineeringとSREの協創
sansantech
PRO
2
900
AI時代の新規LLMプロダクト開発: Findy Insightsを3ヶ月で立ち上げた舞台裏と振り返り
dakuon
0
170
SSO方式とJumpアカウント方式の比較と設計方針
yuobayashi
7
690
【AWS re:Invent 2025速報】AIビルダー向けアップデートをまとめて解説!
minorun365
4
530
打 造 A I 驅 動 的 G i t H u b ⾃ 動 化 ⼯ 作 流 程
appleboy
0
350
生成AI活用の型ハンズオン〜顧客課題起点で設計する7つのステップ
yushin_n
0
230
Haskell を武器にして挑む競技プログラミング ─ 操作的思考から意味モデル思考へ
naoya
6
1.6k
re:Invent 2025 ふりかえり 生成AI版
takaakikakei
1
210
AI駆動開発の実践とその未来
eltociear
0
110
AWS CLIの新しい認証情報設定方法aws loginコマンドの実態
wkm2
6
750
コンテキスト情報を活用し個社最適化されたAI Agentを実現する4つのポイント
kworkdev
PRO
1
1.5k
マイクロサービスへの5年間 ぶっちゃけ何をしてどうなったか
joker1007
8
5.1k
Featured
See All Featured
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.2k
How GitHub (no longer) Works
holman
316
140k
How STYLIGHT went responsive
nonsquared
100
6k
RailsConf 2023
tenderlove
30
1.3k
Side Projects
sachag
455
43k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
KATA
mclloyd
PRO
33
15k
Into the Great Unknown - MozCon
thekraken
40
2.2k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
jQuery: Nuts, Bolts and Bling
dougneiner
65
8.3k
Building Flexible Design Systems
yeseniaperezcruz
330
39k
Designing for Performance
lara
610
69k
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通るように頑張っていきます