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
Step_Functions_をはじめよう_JSONataによる進化_.pdf
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Hiroshi Kato
August 09, 2025
160
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Step_Functions_をはじめよう_JSONataによる進化_.pdf
Hiroshi Kato
August 09, 2025
More Decks by Hiroshi Kato
See All by Hiroshi Kato
TelemetryAPIでLambda関数の外側を覗く
kahiro
0
4
20260318_AIによるデザインレビュ〜「画像の美しさ」をスコアに変換する〜
kahiro
0
81
DurableExecutionを実装検証から理解する.pdf
kahiro
1
45
20260110_オンプレ思考からクラウドネイティブ思考への転換レシピ
kahiro
0
13
20251114_Amazon_Q_DeveloperでMCPを使う_最初の一歩__.pdf
kahiro
0
15
20250829_LambdaとStepFunctionsどちらを選ぶべき_コスト視点で考えてみる.pdf
kahiro
1
460
20250706_AWSでランサムウェア対策_バックアップが最大の防御_.pdf
kahiro
0
390
20250701_VMwareワークロードのAWS移行を学ぶ.pdf
kahiro
0
140
20250412_JAWS-UG北陸新幹線.pdf
kahiro
0
130
Featured
See All Featured
WENDY [Excerpt]
tessaabrams
11
38k
The Cult of Friendly URLs
andyhume
79
6.9k
Art, The Web, and Tiny UX
lynnandtonic
304
22k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.9k
Done Done
chrislema
186
16k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
600
Optimising Largest Contentful Paint
csswizardry
37
3.7k
Speed Design
sergeychernyshev
33
1.8k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
The Limits of Empathy - UXLibs8
cassininazir
1
350
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
3.3k
Rails Girls Zürich Keynote
gr2m
96
14k
Transcript
Step Functions をはじめよう 〜JSONataによる進化〜 JAWS-UG北陸新幹線 #4 in 長野 2025年8月9日(土)
自己紹介 加藤 寛士 (かとう ひろし) NECソリューションイノベータ株式会社 • JAWS-UG 北陸新幹線 2回目
• JAWS-UG 名古屋 の運営をしています! • JAWS Festa 2025 参戦予定! (実行委員会にも入ってます)
Step Functions とは? サーバレスなワークフローオーケストレーション • ステートを定義して、ワークフローを構築 • Workflow Studio(GUI)を使用し、ワーク フローをドラッグ&ドロップで構築可能
• ASL(JSON)を使用してワークフローを 記述することも可能 ASL:Amazon States Language • 分岐、並列、リトライ、タイムアウト、 エラーハンドリングなど、豊富な制御機能 • 200+ のAWSサービスと統合 Workflow Studio 特徴 ドラッグ&ドロップで構築 ASL記述 Step Functions DynamoDB S3 SNS SQS EventBridge Athena Bedrock Lambda 200+ のAWSサービス
Step Functions の主なステートと制御機能 主な制御機能 主なステート ステート種別 説明 Task Lambdaなどの呼び出し Choice
条件分岐(if/else 相当) Parallel 複数処理の同時並行実行 Map 配列要素の処理繰り返し Wait 一定時間/指定時刻の待機 Pass 入力データをそのまま出力、 または定数値を出力 Succeed/Fail ワークフローの成功/失敗終了 フィールド名 説明 Retry ステート実行失敗時の自動再試行 設定 Catch ステート失敗時の代替フロー指定 TimeoutSeconds ステートの最大実行時間制限 ASL (Amazon States Language) を用いて記述
Step Functions をどこから呼び出す? 主な呼び出し元 主な用途・特徴 Lambda 関数 StartExecution APIを使ってどこからでも呼び出し可能 EventBridge
イベントトリガーで自動実行(S3アップロード・スケジュール・ログ検出など) API Gateway REST API のバックエンドとして使える外部システムから直接呼び出し可能 AWS SDK / CLI Boto3 や SDK 経由で実行。バッチやWebアプリからも活用しやすい Lambda EventBridge API Gateway AWS Tools and SDKs Step Functions AWS 内のさまざまなサービスから呼び出し、連携することができる DynamoDB S3 SNS SQS EventBridge Athena Bedrock Lambda 200+ のAWSサービス
データアクセスの進化 JSONataの登場で、劇的に実装が簡潔に! • 合計4ステート必要 • JSONPathは「読み取るだけ」で演算不可 • Step Functions用ロールが必要 さらに
Lambda用ロールが必要 • 合計2ステートで完結 • Step Functions用ロールのみ 入力JSONから firstName と lastName を取得 それらを結合して フルネーム(姓名) を作成 名前に “加藤" が 含まれていたら "VIP" 判定 JSONPath (従来) JSONata(+ Assign) データ取得 データ結合 データ整形 条件分岐 データ取得 ・結合・整形 条件分岐 例
データアクセスの進化 JSONataの利用は、多くのメリットを生み出す! 項目 JSONPath(従来) JSONata(+ Assign) データ取得方法 パス指定(InputPath 等) JSONata
式(Arguments, Output) データ加工 Lambda or Pass JSONata 式1行で完結 条件分岐 Lambda or Choice Choice + JSONata 式 ステート数 多くなりがち(Pass・Lambda併用) 少ない(整形・演算を内部処理) ロール構成 StepFunctions用 + Lambda用ロール StepFunctions用ロールのみ コスト Lambda実行回数 × ステート数 ステート数削減でコスト最適 実装・保守性 煩雑・ステートが多くて見づらくなる シンプル・視認性がよい テストのしやすさ Lambda側でロジック分離の必要あり ASL内で完結、TestStateで確認可能 Lambdaを利用することで発生していた、実装規模、複雑さ、コストを大幅にカット可能
JSONata(+ Assign)の真価 • QueryLanguage: “JSONata” を指定するだけ • Assign ステートで変数定義 →
$変数名 で他ステートから参照可能 • 値の整形・演算・条件分岐・文字列操作・日付処理など、式で完結 • 構文: {% <JSONata式> %} • 演算:+, &, ==, $sum(), $contains() など • 文字列:{% $states.input.user.lastName & ' さん' %} • 条件式:{% $contains($fullName, ‘加藤') %} • グローバル変数: Assign ステート内の変数は、後続のすべての ステートから参照可能 • ローカル変数:Map / Parallel内で定義 → ブロック内のみ有効 { "QueryLanguage": "JSONata", "StartAt": "SetFullName", "States": { "SetFullName": { "Type": "Pass", "Assign": { "fullName": "{% $states.input.user.lastName & ' ' & $states.input.user.firstName %}" }, "Next": "CheckName" }, "CheckName": { "Type": "Choice", "Choices": [ { "Condition": "{% $contains($fullName, '加藤') %}", "Next": "VIP" } ], "Default": "Normal" }, "VIP": { "Type": "Succeed" }, "Normal": { "Type": "Succeed" } } } 基本仕様 JSONata式の書き方 スコープ仕様 JSONata(+Assign)はとても簡単!
処理内容 Lambda JSONata(+ Assign) JSON整形・リネーム Python等で実装 Argumentsに1行で記述 合計値や平均値の算出 for 文で配列処理
sum()、avg()などの関数 文字列結合・テンプ レート 連結処理やテンプレートライ ブラリ '{% 'Hi, ' & $.name %}' 形式で 表現 条件分岐の判定 if 文で実装 Choiceステートに式を記述 日付フォーマット変換 datetimeライブラリ使用 toMillis()などの関数 定数や値の保持 Lambda+Passステートの組 み合わせ Assignで変数を定義し $変数 名で参照 Step Functionsから実装を考えてみるのもあり Lambda EventBridge Step Functions Lambda EventBridge DynamoDB S3 S3 DynamoDB Before After JSONata(+Assign)は、簡潔な実装で様々な処理を実現! JSONata(+ Assign)の真価
Step Functions First Lambda起点ではなく、まずワークフローから考える 項目 Lambda起点の考え方 Step Functions First 設計アプローチ
Lambda中心に処理を実装 ワークフローから処理を組み立てる 分岐・制御 /データ整形・変換 Lambdaに分岐・整形・連携をコーディング 分岐・整形・連携を、Step Functionsで定義 処理の見直し Lambdaが増えると全体像がつかみにくくなる ステートマシンで可視化・全体の整合性の確保が容易 • 視覚的にワークフローを管理できる • 各ステートの粒度で機能を容易に差し替え可能 • 非エンジニアも把握しやすい なぜ、 Step Functions First が有効なのか?
ワークフロータイプとコスト 2つのワークフロータイプの適切な利用がポイント ワークフロータイプ Standard Workflows Express Workflows 実行モデル Exactly-once(重複なし・冪等でない操作) At-least-once(重複の可能性あり・冪等な操作)
保存期間 最大 1年(永続化) 実行後は非永続、ログのみ 実行時間上限 1年 5分 適用シーン 長期処理、業務ワークフロー 高頻度イベント、リアルタイム処理 料金体系 状態遷移数:$0.000025/遷移 無料枠:月間4,000状態遷移まで無料 リクエスト数:$0.000001/リクエスト 実行時間:$0.00001667 per GB-Second 料金目安 100万実行:25$ 100万実行:1$+メモリ量×実行時間 • Lambda排除 → JSONata + Assignで実装 • Retryや冗長なPass削減で、遷移数を抑制 • 適切なワークフロータイプを選択 • Express × Standardのネストで柔軟に最適化 コスト削減Tips サービス 軽量処理 (64MB、0.5秒) 重い処理 (1GB、5秒) Standard Workflows $25.00 $25.00 Express Workflows $1.53 $84.35 Lambda $0.73 $83.55
Step Functions Firstで構築してみる ブルワリーコンシェルジュ@長野駅周辺 EventBridge API Gateway Step Functions DynamoDB
Bedrock Step Functions Bedrock ブルワリー Table 定期実行 リサーチ依頼 最新メニュー 本日のオススメ 登録 情報 取得 今日の オススメ店舗 最初の一杯 情報 今日の オススメ店舗 最初の一杯 人数、時間帯、 気分など
Step Functions Firstで構築してみる ブルワリーコンシェルジュ@長野駅周辺 EventBridge API Gateway Step Functions DynamoDB
Bedrock Step Functions Bedrock ブルワリー Table 定期実行 リサーチ依頼 最新メニュー 本日のオススメ 登録 情報 取得 今日の オススメ店舗 最初の一杯 情報 今日の オススメ店舗 最初の一杯 人数、時間帯、 気分など
Step Functions Firstで構築してみる ブルワリーコンシェルジュ@長野駅周辺 EventBridge API Gateway Step Functions DynamoDB
Bedrock Step Functions Bedrock ブルワリー Table 定期実行 リサーチ依頼 最新メニュー 本日のオススメ 登録 情報 取得 今日の オススメ店舗 最初の一杯 情報 今日の オススメ店舗 最初の一杯 人数、時間帯、 気分など 54Line 84Line Lambda (python) 176Line 相当 Lambda (python) 200Line 相当
余談:AmazonQは非常に便利、コンソール上から自分で環境を確認してくれる Step Functions Firstで構築してみる DB構造を自分で確認して、 コードの問題を取り除い てくれる コードを自分で確認して、 ステートを減らし、実装 を簡潔にしてくれる
実行結果例 Step Functions Firstで構築してみる DynamoDBに格納された お店のリサーチ情報 JSON形式で出力された 今日のオススメ店舗 最初の一杯
まとめ • APIGateway+StepFunctionsのワークロードの構築 • JSONataの構文、関数の深掘 • コスト最適化、ワークフロータイプのネスト検証 • ステート設計のベストプラクティス、アンチパターン •
ローカルIDE統合 • サービスクォータ • ログ記録、モニタリング • テスト、デバッグ • バージョニング、デプロイ管理 • JSONata(+Assign)により 、Step Functions はより強力で簡潔なツールに進化 • ASLの表現力が大幅に向上し、従来よりも少ないLambda、ステートで実装が可能に • 処理内容によっては、Lambdaよりも簡易に、低コストで機能を実現できる さらに学びたいこと