概要
AWS Step Functions は、複数の AWS サービスを組み合わせたワークフローを視覚的に定義し、実行できるサーバーレスのオーケストレーションサービスです。Lambda 関数の呼び出し、DynamoDB へのデータ書き込み、SNS 通知の送信といった個々のステップを、順次実行・並列実行・条件分岐・エラーハンドリングなどのロジックでつなぎ合わせることができます。
例えば、注文処理のワークフロー(在庫確認 → 決済処理 → 発送手配 → 通知送信)や、データパイプライン(データ取得 → 変換 → ロード → 検証)といった複数ステップにまたがる処理を、コードではなくステートマシンとして定義できます。
本記事では、Step Functions のステートマシンを作成し、複数のステートを組み合わせたワークフローを定義して実行する流れを体験します。

この記事のメリット
- AWS Step Functions の基本的な仕組みとユースケースを理解できる
- ステートマシン定義言語(Amazon States Language)の基本構文を把握できる
- Workflow Studio を使ったビジュアルなワークフロー構築を体験できる
- ステートマシンの実行と実行履歴の確認方法を習得できる
キャラクター紹介
クラウド資格実践ラボの基礎学習記事では、ルクシーちゃんと代表の土肥が対話形式で AWS 認定試験で必要な知識をハンズオンとともに解説していくブログです。これからこのブログを案内する2人を紹介します。

ルクシーちゃん
クラウド資格に挑戦中の好奇心旺盛なナビゲーター。初学者目線で「これってなんだろう?」と素朴な疑問を投げかけ、知識を引き出していく役どころ。難しい内容も、ルクシーちゃんと一緒なら一歩ずつ理解できると思います!
土肥(とひ)
株式会社Luxyの代表であり同社の元エンジニア。これまでオンプレとAWS環境のインフラを担当。AWS認定資格の学習で得た知識をハンズオンとともに解説するのが得意。直近では新人の教育なども行っており、これから技術を学ぼうという方が納得できるように解説できることに喜びを感じているとのこと。

技術解説
AWS Step Functions とは
Luxyちゃんとひさん、AWS Step Functions ってどういうサービスですか?名前だけ聞くと「ステップを踏む」みたいな感じですけど…
いい直感だね!まさにその通りで、アプリケーションの処理を「ステップ」に分けて、順番通りに実行してくれるサービスなんだ。これをステートマシンっていう形で定義するよ。



ステートマシン…ですか?
例えるなら、料理のレシピみたいなものだよ。「材料を切る → 炒める → 味付けする → 盛り付ける」って手順が決まってるよね。Step Functions は、この手順書を作って、各ステップの進行管理やエラーが起きたときのやり直しまで自動でやってくれるんだ。



なるほど、手順書を作ったら、あとは Step Functions がちゃんと順番通りに進めてくれるんですね!
そうそう。しかもサーバーレスだから、インフラの管理も不要だよ。
主な特徴



Step Functions の特徴ってどんなところですか?
大きく5つあるよ。まとめるとこんな感じだね。
- ビジュアルワークフロー: ワークフローの定義と実行状況をグラフィカルに確認可能
- サーバーレス: インフラストラクチャの管理が不要
- 組み込みのエラーハンドリング: リトライポリシーやキャッチブロックを宣言的に定義可能
- 200 以上の AWS サービスとの統合: Lambda、DynamoDB、SNS、SQS、ECS など多数のサービスを直接呼び出し可能
- Workflow Studio: ドラッグ&ドロップでワークフローを構築できるビジュアルエディタ



ビジュアルで確認できるのはわかりやすそうです!あと、200以上のサービスと統合できるって、かなり多いですね。
そうなんだ。Lambda を呼んだり、DynamoDB にデータを書き込んだり、SNS で通知を送ったり、いろいろなサービスを直接ステップとして組み込めるよ。コードをたくさん書かなくても、サービス同士をつなげられるのが強みだね。



Workflow Studio っていうのは何ですか?
ドラッグ&ドロップでワークフローを組み立てられるビジュアルエディタだよ。JSON を手書きしなくても、画面上でポチポチ組み立てられるから、初めてでもとっつきやすいんだ。今回の実践でも使うよ。
基本的な構成要素



Step Functions を使うときに覚えておくべき用語ってありますか?
うん、基本の構成要素を押さえておこう。まとめるとこんな感じだよ。
| 要素 | 説明 |
|---|---|
| ステートマシン | ワークフロー全体の定義。JSON(Amazon States Language)で記述 |
| ステート | ワークフロー内の個々のステップ |
| 実行 | ステートマシンの 1 回の実行インスタンス |
| Amazon States Language(ASL) | ステートマシンを定義する JSON ベースの言語 |



ASL っていうのは、ステートマシンを書くための専用の言語ってことですか?
その通り!JSON ベースだから、プログラミング言語を新しく覚えるような大変さはないよ。「どのステートから始めて、次にどこに行くか」を JSON で書いていくイメージだね。



JSON なら見慣れているので安心です!


ステートの種類



ステートにはどんな種類があるんですか?
全部で8種類あるよ。それぞれ役割が違うんだ。
| ステートタイプ | 説明 |
|---|---|
| Task | AWS サービスの呼び出しやアクティビティの実行 |
| Pass | 入力をそのまま(または加工して)出力に渡す |
| Choice | 条件分岐 |
| Parallel | 複数のブランチを並列実行 |
| Wait | 指定した時間だけ待機 |
| Succeed | ステートマシンを成功として終了 |
| Fail | ステートマシンを失敗として終了 |
| Map | 配列の各要素に対して同じステップを繰り返し実行 |



たくさんありますね…。全部覚えないといけないですか?
最初は Task、Pass、Choice、Succeed あたりを押さえておけば大丈夫だよ。Task は実際の処理を実行するステート、Choice は「もし金額が10万円以上なら承認フローへ」みたいな条件分岐、Pass はデータの受け渡し、Succeed は「これで完了!」って終了させるステートだね。



プログラミングの if 文とか関数呼び出しみたいな感じですね!
まさにそうだね!プログラムのロジックを、コードじゃなくて JSON の定義で表現できるのが Step Functions の面白いところだよ。
ワークフローの種類



ワークフロー自体にも種類があるんですか?
うん、Standard と Express の2種類があるよ。
| 種類 | 特徴 | 最大実行時間 | 料金 |
|---|---|---|---|
| Standard | 長時間実行可能、実行履歴の完全な記録 | 1 年 | ステート遷移ごとに課金 |
| Express | 高スループット、短時間の処理向け | 5 分 | 実行回数・実行時間・メモリ消費量で課金 |



最大1年って、そんなに長く動かせるんですか?
Standard だとね。例えば、人の承認を待つようなワークフローだと、数日かかることもあるから、長時間実行できるのは大事なんだ。一方で Express は最大5分だけど、大量のリクエストをさばくような短い処理向けだよ。



料金の仕組みも違うんですね。用途に合わせて選ばないと、コストに影響しそうです。
いいところに気づいたね!Standard はステート遷移ごとの課金だから、ステート数が多いと費用が上がりやすい。Express は実行回数ベースだから、短い処理を大量に回すなら Express の方がお得なことが多いよ。今回の実践では Standard を使うよ。
実践
前提条件
- リージョン:
ap-northeast-1(東京) - AWS Step Functions を操作できる IAM 権限があること
作成するリソース一覧
| リソース種別 | リソース名 | 用途 |
|---|---|---|
| Step Functions ステートマシン | handson-order-workflow | 注文処理ワークフローのサンプル |
| IAM ロール | (自動作成) | ステートマシンの実行ロール |
ステップ1: ステートマシンの作成
- AWS マネジメントコンソールにログインし、リージョンが
ap-northeast-1(東京)であることを確認します - 上部の検索バーに
Step Functionsと入力し、表示された「Step Functions」を選択します - 左側ナビゲーションの「ステートマシン」を選択します
- 「ステートマシンの作成」をクリックします
ステップ2: Workflow Studio でワークフローを構築する
Workflow Studio が表示されます。ここでは簡単な注文処理ワークフローを構築します。
- テンプレートの選択画面が表示された場合は「空白から作成」を選択します。
- ステートマシン名の「生成」をクリックします(MyStateMachine-<ID>が自動入力されます)


ワークフローの概要
以下のフローを構築します。
- 注文内容を確認する(Pass ステート)
- 注文金額に応じて処理を分岐する(Choice ステート)
- 高額注文の場合は承認待ちステップを入れる(Wait ステート → Pass ステート)
- 通常注文の場合はそのまま処理を進める(Pass ステート)
- 処理完了(Succeed ステート)
Workflow Studio の左側パネルからステートをドラッグ&ドロップして配置するか、「コード」モードに切り替えて ASL を直接記述します。
- 上部の「コード」ボタンをクリックしてコードエディタに切り替えます
- 以下の ASL 定義を入力します
{
"Comment": "注文処理ワークフローのサンプル",
"StartAt": "ValidateOrder",
"States": {
"ValidateOrder": {
"Type": "Pass",
"Comment": "注文内容を検証する",
"Result": {
"orderValid": true
},
"ResultPath": "$.validation",
"Next": "CheckOrderAmount"
},
"CheckOrderAmount": {
"Type": "Choice",
"Comment": "注文金額に応じて処理を分岐する",
"Choices": [
{
"Variable": "$.orderAmount",
"NumericGreaterThanEquals": 100000,
"Next": "WaitForApproval"
}
],
"Default": "ProcessStandardOrder"
},
"WaitForApproval": {
"Type": "Wait",
"Comment": "承認待ち(10秒間待機)",
"Seconds": 10,
"Next": "ApproveHighValueOrder"
},
"ApproveHighValueOrder": {
"Type": "Pass",
"Comment": "高額注文を承認する",
"Result": {
"approved": true,
"approver": "manager"
},
"ResultPath": "$.approval",
"Next": "OrderComplete"
},
"ProcessStandardOrder": {
"Type": "Pass",
"Comment": "通常注文を処理する",
"Result": {
"processed": true,
"method": "auto"
},
"ResultPath": "$.processing",
"Next": "OrderComplete"
},
"OrderComplete": {
"Type": "Succeed",
"Comment": "注文処理完了"
}
}
}

- 「デザイン」ボタンをクリックして、ビジュアル表示に切り替えます
- ワークフローが視覚的に表示され、各ステートの接続が確認できます


ステップ3: ステートマシンの設定と保存
- 右上の「設定」ボタンをクリックします(または上部の「Config」タブを選択します)
- 以下の設定を入力します
- アクセス許可: 「新しいロールの作成」を選択
- 「作成」をクリックします(確認ダイアログが表示された場合は「確認」をクリックします)


- ステートマシンが作成され、詳細画面が表示されます
ステップ4: ステートマシンを実行する(通常注文のケース)
- ステートマシンの詳細画面で「実行」をクリックします
- 「入力」に以下の JSON を入力します
{
"orderId": "ORD-001",
"customerName": "田中太郎",
"orderAmount": 15000,
"items": [
{
"name": "マウス",
"quantity": 2,
"price": 3500
},
{
"name": "キーボード",
"quantity": 1,
"price": 8000
}
]
}- 「実行の開始」をクリックします


- 実行が開始され、「グラフビュー」タブでワークフローの進行状況がリアルタイムに表示されます
orderAmountが 15,000 円のため、CheckOrderAmountの Choice ステートでProcessStandardOrderに分岐します- 各ステートが緑色(成功)になり、最終的に
OrderCompleteに到達します


- 「実行の入出力」タブを選択すると、実行の最終的な出力を確認できます
ステップ5: ステートマシンを実行する(高額注文のケース)
- 画面上部の「handson-order-workflow」リンクをクリックしてステートマシンの詳細画面に戻ります
- 「実行の開始」をクリックします
- 「入力」に以下の JSON を入力します
{
"orderId": "ORD-002",
"customerName": "鈴木花子",
"orderAmount": 250000,
"items": [
{
"name": "ノートPC",
"quantity": 2,
"price": 89000
},
{
"name": "モニター",
"quantity": 2,
"price": 36000
}
]
}- 「実行の開始」をクリックします
orderAmountが 250,000 円のため、CheckOrderAmountの Choice ステートでWaitForApprovalに分岐しますWaitForApprovalステートで 10 秒間待機した後、ApproveHighValueOrderに進みます- 最終的に
OrderCompleteに到達して完了します


ステップ6: 実行履歴を確認する
- ステートマシンの詳細画面で「実行」タブを確認します
- 2 つの実行が一覧に表示されています


- いずれかの実行をクリックし、「イベント」タブを選択します
- 各ステートの開始・終了時刻、入力・出力データがイベントとして記録されています
- 特定のイベントをクリックすると、そのステートの入力データと出力データの詳細を確認できます


まとめ
- AWS Step Functions は、複数のステップからなるワークフローをステートマシンとして定義・実行するサーバーレスサービスです
- Amazon States Language(ASL)という JSON ベースの言語でワークフローを記述します
- Pass(データ受け渡し)、Choice(条件分岐)、Wait(待機)、Succeed(成功終了)など、さまざまなステートタイプを組み合わせてロジックを構築できます
- Workflow Studio を使えば、ドラッグ&ドロップでビジュアルにワークフローを構築できます
- 実行ごとにグラフビューで進行状況を確認でき、イベント履歴で各ステートの入出力データを詳細に確認できます
- Standard ワークフローは最大 1 年の実行に対応し、完全な実行履歴が記録されます









