【AWSサービス 基礎編】 AWS Step Functions でワークフローを定義し実行する

目次

概要

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 ってどういうサービスですか?名前だけ聞くと「ステップを踏む」みたいな感じですけど…

土肥

いい直感だね!まさにその通りで、アプリケーションの処理を「ステップ」に分けて、順番通りに実行してくれるサービスなんだ。これをステートマシンっていう形で定義するよ。

Luxyちゃん

ステートマシン…ですか?

土肥

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

Luxyちゃん

なるほど、手順書を作ったら、あとは Step Functions がちゃんと順番通りに進めてくれるんですね!

土肥

そうそう。しかもサーバーレスだから、インフラの管理も不要だよ。

主な特徴

Luxyちゃん

Step Functions の特徴ってどんなところですか?

土肥

大きく5つあるよ。まとめるとこんな感じだね。

  • ビジュアルワークフロー: ワークフローの定義と実行状況をグラフィカルに確認可能
  • サーバーレス: インフラストラクチャの管理が不要
  • 組み込みのエラーハンドリング: リトライポリシーやキャッチブロックを宣言的に定義可能
  • 200 以上の AWS サービスとの統合: Lambda、DynamoDB、SNS、SQS、ECS など多数のサービスを直接呼び出し可能
  • Workflow Studio: ドラッグ&ドロップでワークフローを構築できるビジュアルエディタ
Luxyちゃん

ビジュアルで確認できるのはわかりやすそうです!あと、200以上のサービスと統合できるって、かなり多いですね。

土肥

そうなんだ。Lambda を呼んだり、DynamoDB にデータを書き込んだり、SNS で通知を送ったり、いろいろなサービスを直接ステップとして組み込めるよ。コードをたくさん書かなくても、サービス同士をつなげられるのが強みだね。

Luxyちゃん

Workflow Studio っていうのは何ですか?

土肥

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

基本的な構成要素

Luxyちゃん

Step Functions を使うときに覚えておくべき用語ってありますか?

土肥

うん、基本の構成要素を押さえておこう。まとめるとこんな感じだよ。

要素説明
ステートマシンワークフロー全体の定義。JSON(Amazon States Language)で記述
ステートワークフロー内の個々のステップ
実行ステートマシンの 1 回の実行インスタンス
Amazon States Language(ASL)ステートマシンを定義する JSON ベースの言語
Luxyちゃん

ASL っていうのは、ステートマシンを書くための専用の言語ってことですか?

土肥

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

Luxyちゃん

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

ステートマシンの構成要素(開始 → タスク → 選択 → 並列 → 終了)のフロー図

ステートの種類

Luxyちゃん

ステートにはどんな種類があるんですか?

土肥

全部で8種類あるよ。それぞれ役割が違うんだ。

ステートタイプ説明
TaskAWS サービスの呼び出しやアクティビティの実行
Pass入力をそのまま(または加工して)出力に渡す
Choice条件分岐
Parallel複数のブランチを並列実行
Wait指定した時間だけ待機
Succeedステートマシンを成功として終了
Failステートマシンを失敗として終了
Map配列の各要素に対して同じステップを繰り返し実行
Luxyちゃん

たくさんありますね…。全部覚えないといけないですか?

土肥

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

Luxyちゃん

プログラミングの if 文とか関数呼び出しみたいな感じですね!

土肥

まさにそうだね!プログラムのロジックを、コードじゃなくて JSON の定義で表現できるのが Step Functions の面白いところだよ。

ワークフローの種類

Luxyちゃん

ワークフロー自体にも種類があるんですか?

土肥

うん、Standard と Express の2種類があるよ。

種類特徴最大実行時間料金
Standard長時間実行可能、実行履歴の完全な記録1 年ステート遷移ごとに課金
Express高スループット、短時間の処理向け5 分実行回数・実行時間・メモリ消費量で課金
Luxyちゃん

最大1年って、そんなに長く動かせるんですか?

土肥

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

Luxyちゃん

料金の仕組みも違うんですね。用途に合わせて選ばないと、コストに影響しそうです。

土肥

いいところに気づいたね!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>が自動入力されます)
ステートマシン作成画面

ワークフローの概要

以下のフローを構築します。

  1. 注文内容を確認する(Pass ステート)
  2. 注文金額に応じて処理を分岐する(Choice ステート)
  3. 高額注文の場合は承認待ちステップを入れる(Wait ステート → Pass ステート)
  4. 通常注文の場合はそのまま処理を進める(Pass ステート)
  5. 処理完了(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": "注文処理完了"
    }
  }
}
コードエディタに ASL 定義を入力した状態(右側にワークフロー図が表示されている)
  • 「デザイン」ボタンをクリックして、ビジュアル表示に切り替えます
  • ワークフローが視覚的に表示され、各ステートの接続が確認できます
Workflow Studio でワークフロー全体がビジュアル表示された状態

ステップ3: ステートマシンの設定と保存

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

ステップ4: ステートマシンを実行する(通常注文のケース)

  • ステートマシンの詳細画面で「実行」をクリックします
  • 「入力」に以下の JSON を入力します
{
  "orderId": "ORD-001",
  "customerName": "田中太郎",
  "orderAmount": 15000,
  "items": [
    {
      "name": "マウス",
      "quantity": 2,
      "price": 3500
    },
    {
      "name": "キーボード",
      "quantity": 1,
      "price": 8000
    }
  ]
}
  • 「実行の開始」をクリックします
実行開始画面で入力 JSON を入力した状態
  • 実行が開始され、「グラフビュー」タブでワークフローの進行状況がリアルタイムに表示されます
  • orderAmount が 15,000 円のため、CheckOrderAmount の Choice ステートで ProcessStandardOrder に分岐します
  • 各ステートが緑色(成功)になり、最終的に OrderComplete に到達します
通常注文の実行完了後のグラフビュー(ProcessStandardOrder を経由して完了した状態)
  • 「実行の入出力」タブを選択すると、実行の最終的な出力を確認できます

ステップ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 に到達して完了します
高額注文の実行完了後のグラフビュー(WaitForApproval → ApproveHighValueOrder を経由して完了した状態)

ステップ6: 実行履歴を確認する

  • ステートマシンの詳細画面で「実行」タブを確認します
  • 2 つの実行が一覧に表示されています
実行一覧画面(2 つの実行が成功ステータスで表示されている状態)
  • いずれかの実行をクリックし、「イベント」タブを選択します
  • 各ステートの開始・終了時刻、入力・出力データがイベントとして記録されています
  • 特定のイベントをクリックすると、そのステートの入力データと出力データの詳細を確認できます
実行のイベント履歴(各ステートの開始・終了イベントが時系列で表示されている状態)

まとめ

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

参照先

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

株式会社Luxy(https://luxy-inc.com)の代表取締役.

2018年〜インフラエンジニアとしてキャリアをスタートし、オンプレミスのネットワーク・サーバ環境で3年半、クラウド環境で4年半の8年間エンジニアとして従事。
2021年に佐藤氏の創業した会社を引き継ぎ、代表に就任。

目次