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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Kazuki Miura
PRO
June 24, 2023
Technology
1.7k
1
Share
気がついたらSagaパターンになっていた!? 少人数で運用するサーバレスバックエンド
#RejectDay2023
Kazuki Miura
PRO
June 24, 2023
More Decks by Kazuki Miura
See All by Kazuki Miura
us-east-1 に障害が起きた時に、 ap-northeast-1 にどんな影響があるか 説明できるようになろう!
miu_crescent
PRO
13
4.6k
これだけはやっておいた方がよさそう?awsにおけるランサムウェア対策
miu_crescent
PRO
1
130
生成AIを活用した音声文字起こしシステムの2つの構築パターンについて
miu_crescent
PRO
4
360
なぜ あなたはそんなに re:Invent に行くのか?
miu_crescent
PRO
0
350
エンタメ方向のTを広げよう!Werner先生の クロージングキーノートを 深掘りするための小ネタ10
miu_crescent
PRO
1
170
Amazon Bedrockを活用した 報道向け文字起こしシステムの開発
miu_crescent
PRO
0
140
us-east-1 の障害が 起きると なぜ ソワソワするのか
miu_crescent
PRO
0
63
us-east-1 の障害が 起きると なぜ ソワソワするのか
miu_crescent
PRO
3
1.1k
完全未経験からAWSと共に セキュリティに立ち向かった半生
miu_crescent
PRO
1
160
Other Decks in Technology
See All in Technology
Why we keep our community?
kawaguti
PRO
0
360
スケーリングを封じられたEC2を救いたい
senseofunity129
0
130
MCPで決済に楽にする
mu7889yoon
0
170
【Oracle Cloud ウェビナー】データ主権はクラウドで守れるのか?NTTデータ様のOracle Alloyで実現するソブリン対応クラウドの最適解
oracle4engineer
PRO
3
130
Oracle AI Database@Google Cloud:サービス概要のご紹介
oracle4engineer
PRO
5
1.3k
Tour of Agent Protocols: MCP, A2A, AG-UI, A2UI with ADK
meteatamel
0
180
Bill One 開発エンジニア 紹介資料
sansan33
PRO
5
18k
Amazon Qはアマコネで頑張っています〜 Amazon Q in Connectについて〜
yama3133
1
170
OCI技術資料 : 証明書サービス概要
ocise
1
7.2k
The essence of decision-making lies in primary data
kaminashi
0
200
TUNA Camp 2026 京都Stage ヒューリスティックアルゴリズム入門
terryu16
0
650
Blue/Green Deployment を用いた PostgreSQL のメジャーバージョンアップ
kkato1
0
170
Featured
See All Featured
Exploring anti-patterns in Rails
aemeredith
2
300
Designing for Performance
lara
611
70k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
200
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
1.9k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3.4k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.8k
Writing Fast Ruby
sferik
630
63k
Building the Perfect Custom Keyboard
takai
2
720
sira's awesome portfolio website redesign presentation
elsirapls
0
200
We Are The Robots
honzajavorek
0
210
Designing Powerful Visuals for Engaging Learning
tmiket
1
320
The SEO identity crisis: Don't let AI make you average
varn
0
430
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通るように頑張っていきます