コンテンツにスキップ

AWS Step Functions

1. サービス概要

AWS Step Functions は、サーバーレスなワークフローオーケストレーションサービス。
JSON ベースの状態機械(State Machine)で、複数の AWS サービスやカスタムタスクをシーケンス化・分岐・並列実行し、可観測性の高いビジネスロジックを構築できる。

手動でのコード書き換えや複雑なエラー処理ロジックを組み込むことなく、エラーリトライ、待機、並列処理、条件分岐などの高度なフロー制御が行える。

ユースケースには、

  • マイクロサービス間オーケストレーション
  • データ処理パイプラインの自動化
  • 機械学習ワークフロー
  • 長期実行バッチジョブ
  • イベント駆動型アプリケーション

などが挙げられる。

2. 主な特徴と機能

2.1 状態機械とステートタイプ

ワークフローは「状態機械」として定義し、各ステート(State)で処理を定義する。

  • タスク(State Machine 内で特定の AWS サービス呼び出しや Lambda 実行)
  • Choice(条件分岐)
  • Parallel(並列処理)
  • Map(反復処理)
  • Wait(待機)
  • Pass(データパス操作のみ)
  • Succeed/Fail(ワークフロー終了)

など、多様なステートを提供する。

2.2 ワークフロータイプ(Standard と Express)

  • Standard ワークフロー: 長期実行(最大 1 年)、ステップごとの履歴保存、複雑なロジックに最適。
  • Express ワークフロー: 短時間・高スループットのイベント処理用、コスト最適化しやすく、ログは CloudWatch Logs に出力。

2.3 サービス統合

Step Functions は

  • Lambda
  • SNS
  • SQS
  • DynamoDB
  • ECS
  • Glue
  • Athena
  • SageMaker

など、多くの AWS サービスとネイティブに統合。
「サービス統合パターン」を通じてタスクステート内で AWS サービス API を直接呼び出せるため、追加のコード不要で複雑なワークフローが実現可能。

2.4 エラー処理とリトライ、キャッチ

各タスクでエラーが発生した場合、リトライポリシーを定義し、特定のエラー時に再試行回数・待機時間を設定可能。
Catch ハンドラーで失敗時のフォールバックシナリオ(異なるステートへの遷移)を定義でき、堅牢なエラー処理が実現できる。

2.5 データパス操作と入力・出力加工

パス(Path)、入力変換(InputPath, OutputPath, ResultPath)を用いて、ステート間で渡すデータを柔軟にフィルタリング・変換可能。
不要なデータを削除、JSON 構造の一部を抽出、結果を組み合わせるなど、複雑なデータ操作が定義ファイルのみで実現できる。

3. アーキテクチャおよび技術要素

  1. デベロッパーが Amazon States Language(ASL)で JSON 定義を記述し、状態機械を作成。
  2. 状態機械は Standard または Express ワークフローのいずれかを選択。
  3. タスクステートで AWS サービスを統合し、条件や並列処理を定義。
  4. 実行開始後、Step Functions は定義通りにワークフローをオーケストレーション。
  5. 実行履歴やメトリクスはマネジメントコンソールや CloudWatch で確認可能。

4. セキュリティと認証・認可

  • IAM ロール: Step Functions はワークフローから呼び出すサービスへのアクセスを IAM ロールで制御。必要な最小権限を付与するベストプラクティスが推奨。
  • VPC 統合: VPC 内リソースにアクセスする場合は、VPC エンドポイントや特定の Task 実行環境でプライベートアクセス可能。
  • 暗号化: 入出力データを含めて CloudWatch Logs へ出力する場合、ロググループの KMS 暗号化でデータ保護可能。

5. 料金形態

Step Functions の料金は主に実行数とステート遷移数に基づく。

  • Standard ワークフロー: ステート遷移数に応じて課金。実行履歴の保持も含まれる。
  • Express ワークフロー: 実行回数と処理期間、リソース使用時間に基づく低コストモデル。
  • IAM・KMS などの追加コスト: KMS 等の利用に伴うコストが別途発生。

6. よくあるアーキテクチャ・設計パターン

  • マイクロサービスオーケストレーション: 複数 Lambda や ECS タスクを条件分岐やエラーリトライ付きで接続。
  • データ処理パイプライン: S3→Glue→Athena→SNS といった一連の処理を Step Functions で自動化。
  • ML ワークフロー: SageMaker ジョブの開始、完了待ち、結果処理を可視化・制御。
  • 複雑なビジネスロジック: エラー時の代替フロー、分岐条件、並列処理を定義し、再利用可能なビジネスロジックを確立。

7. 設定・デプロイ手順(ハンズオン例)

  1. Step Functions コンソールで「State Machine を作成」を選択。
  2. ASL(JSON)で状態定義を記述、またはワークフロービルダーで可視的に定義。
  3. IAM ロールを指定し、タスクで呼び出すサービスへのアクセス権を付与。
  4. ワークフロー開始(Execute)後、実行履歴やグラフィカルな表示で進行状況を確認。
  5. 必要に応じて Express ワークフローで高スループットイベント処理、Standard で長期実行タスクをサポート。

8. 試験で問われやすいポイント

8.1 Standard vs Express ワークフロー

  • Standard は長期実行と詳細履歴、Express は短時間・高スループット重視。

8.2 ステートタイプ(Task、Choice、Parallel、Map、Wait など)

  • 各ステートの役割と使いどころ、データパス操作方法。

8.3 エラー処理とリトライ、キャッチ

  • エラー時の再試行戦略とフォールバックステート設定。

8.4 サービス統合パターン

  • 直接 API 呼び出し(.sync, .waitForTaskToken パターンなど)で AWS サービスをオーケストレーション。

8.5 セキュリティと IAM ロール

  • Step Functions がタスクで使用するサービスにアクセスするためのロール設定。

8.6 料金モデル理解

  • Standard はステート遷移数、Express は実行回数と実行時間。

8.7 データパス操作と入力・出力フィルタ

  • InputPath, OutputPath, ResultPath でデータ加工。

8.8 試験で頻出となる具体的な問われ方と答え

  • Q: 長期間実行され、各ステップの履歴を詳細に保持するワークフロータイプは何?
  • A: Standard ワークフロー。
  • Q: タスクステートでエラーが発生した場合、特定のエラーで再試行する方法は?
  • A: タスク定義内の"Retry"フィールドでエラー名、最大試行回数、待機時間などを定義している。
  • Q: 並列に複数のブランチを同時実行するにはどのステートを使うか?
  • A: Parallel ステートを使用。
  • Q: Step Functions で Lambda を呼び出す際、コード変更なしに API 直接呼び出しを行う仕組みを何と呼ぶか?
  • A: サービス統合パターン(AWS SDK 統合)と呼ぶ。
  • Q: データから特定のフィールドのみを取り出して次ステートに渡すにはどうするか?
  • A: InputPath や OutputPath で JSON から必要なフィールドを抽出する。