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
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Kazuki Miura
PRO
June 24, 2023
Technology
1.8k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
気がついたらSagaパターンになっていた!? 少人数で運用するサーバレスバックエンド
#RejectDay2023
Kazuki Miura
PRO
June 24, 2023
More Decks by Kazuki Miura
See All by Kazuki Miura
Kiro Crew で始める マルチエージェント開発
miu_crescent
PRO
0
190
Lambdaで動画のエンコードしたら MediaConvertに勝てるのか
miu_crescent
PRO
0
53
AWS Summit 報道現場で磨き上げた、 文字起こしシステムの開発。
miu_crescent
PRO
0
10
報道現場で磨き上げた、 ⽂字起こしシステムの開発
miu_crescent
PRO
0
12
地域のCCoEの拡大を目指す 企業間コミュニティ 「re:light local」について
miu_crescent
PRO
0
70
us-east-1 に障害が起きた時に、 ap-northeast-1 にどんな影響があるか 説明できるようになろう!
miu_crescent
PRO
13
5.3k
これだけはやっておいた方がよさそう?awsにおけるランサムウェア対策
miu_crescent
PRO
1
170
生成AIを活用した音声文字起こしシステムの2つの構築パターンについて
miu_crescent
PRO
4
490
なぜ あなたはそんなに re:Invent に行くのか?
miu_crescent
PRO
0
450
Other Decks in Technology
See All in Technology
tamachi.go 誕生の裏側
rymiyamoto
1
210
AI駆動開発を組織で促すために
lycorptech_jp
PRO
4
6.2k
暗号化?某ファイルストレージはどうなるの!? 3rd Partyとうまく付き合う秘密度ラベル設計
kasada
0
200
ClaudeCodeでセキュリティ監視業務を半自動化_1年の運用でわかったAIに任せる設計の5つのポイント
kintotechdev
3
530
AI・HPC開発を支えるGPU環境の新しい選択肢 液冷GPUシステム「AquSys」の取り組み
gpuunite_official
0
250
Introduction to Sansan, inc / Sansan Global Development Center, Inc.
sansan33
PRO
0
3.2k
2027年のMetricKit
kantacky
0
190
Claude Codeの体系的な理解と知識のフック
oikon48
3
1.4k
NANDでも描画したい!
nichica906
3
750
[ホンマでっか SRE] あなたはなぜ SRE に?
_awache
0
270
500名弱規模の組織のPythonプロジェクト(dbt) をどう管理するか?
hiracky16
0
240
名刺メーカーDevグループ 紹介資料
sansan33
PRO
0
1.2k
Featured
See All Featured
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.3k
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
620
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
400
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
10k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
290
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
450
Unsuck your backbone
ammeep
672
58k
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
390
Product Roadmaps are Hard
iamctodd
55
12k
The Limits of Empathy - UXLibs8
cassininazir
1
620
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
430
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
300
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通るように頑張っていきます