翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Step Functions のステートマシンについて
Step Functions は、ワークフローとも呼ばれるステートマシンに基づいています。ワークフローは、一連のイベント駆動型ステップで構成されます。
ASL とも呼ばれる Amazon States Language を使用してワークフローを定義します。必要に応じて、ビジュアルワークフローデザイナーである Workflow Studio を使用して、ワークフローを構築および編集できます。
ワークフローの各ステップはステートと呼ばれます。状態には、フロー状態とタスク状態の 2 種類があります。
- フロー状態
-
フロー状態は、ステップの実行フローを制御します。例えば、Choice 状態は条件付きロジックを提供し、Waiting 状態はワークフロー実行を一時停止し、Map 状態はデータセット内の項目ごとに子ワークフローを実行し、Parallel 状態はワークフローに個別のブランチを作成します。
- タスクの状態
-
タスクの状態は、別の AWS のサービス や API の呼び出しなど、別の AWS サービスが実行する作業単位を表します。タスクの状態はアクションとも呼ばれます。 AWS および外部サービスで作業を実行するには、数百のアクションを選択できます。(注: Step Functions の外部で実行されるワーカーを使用してタスクを実行することもできます。 詳細については、「」を参照してくださいアクティビティ。)

実行とエラーの処理
ワークフローを実行すると、Step Functions は実行と呼ばれるワークフローインスタンスを作成します。ワークフロー実行のステータスをモニタリングできます。実行でエラーが発生した場合、ワークフローはエラーをキャッチする可能性があります。ユースケースによっては、後で実行を再処理してワークフローを再開できます。
データの受け渡し
オプションで、JSON テキスト形式でワークフローに入力データを提供できます。各ステップは、変数と状態出力を使用して後続のステップにデータを渡すことができます。変数に保存されているデータは、後のステップで使用できます。状態出力は、次のステップの入力になります。データの受け渡しの詳細については、「」を参照してください変数を使用して状態間でデータを渡す。
ワークフローの最後に、ステートマシンはオプションで JSON 形式で出力を生成できます。
データの変換
ステートマシンとステートマシンは、クエリ言語を使用してデータを変換できます。推奨されるクエリ言語は JSONata ですが、re:Invent 2024 より前に作成されたステートマシンは JSONPath を使用します。下位互換性のために、ステートマシンまたは個々の状態は、クエリ言語に JSONata を使用することをオプトインする必要があります。
JSONata ステートマシンと個々の状態は、JSONata」に設定されたQueryLanguage
フィールドで認識できます。JSONPath を使用するステートマシンとステートには QueryLanguage
フィールドがありません。
JSONPath を使用する状態には、InputPath、Parameters、ResultSelector、ResultPath、OutputPath などの状態フィールドがあります。JSONPath ステートマシン定義では、 で終わるフィールド名.$
と、 $.
と のプレフィックスが付いた値も表示されます。$$.
どちらもパスを表します。パスには、 などのさまざまな組み込み関数が表示される場合がありますStates.MathAdd
。組み込み関数は JSONPath でのみ使用されます。
JSONata の状態は、引数フィールドと出力フィールドを使用します。これらのオプションフィールドには、 のような JSONata 式が表示される場合があります"{% $type = 'local' %}"
。JSONata では、式、演算子、関数を使用できます。詳細については、「Step Functions での JSONata を使用したデータの変換」を参照してください。
注記
状態ごとに使用できるクエリ言語は 1 つだけです。JSONPath と JSONata を 1 つのステップで混在させることはできません。
主要なコンセプト
以下に、コンテキストの Step Functions の主要な用語の概要を示します。
言葉 | 説明 |
---|---|
ワークフロー | 多くの場合、ビジネスプロセスを反映する一連のステップ。 |
States |
ステートマシンの個別のステップでは、入力に基づいて決定を行い、それらの入力からアクションを実行して、出力を他の状態に渡すことができます。 詳細については、「Step Functions で使用するワークフローの状態の検出」を参照してください。 |
Workflow Studio |
ワークフローのプロトタイプ作成と構築を迅速に行えるようにする視覚的なワークフローデザイナー。 詳細については、「Step Functions Workflow Studio でのワークフローの開発」を参照してください。 |
ステートマシン |
詳細については、「Step Functions ワークフローの Amazon States Language でのステートマシン構造」を参照してください。 |
Amazon States Language |
ステートマシンを定義するための、JSON ベースの構造化言語。ASL では、ユーザーが作業の実行 (Task 状態)、次に移行する状態の決定 (Choice 状態)、エラーによる実行の停止 (Fail 状態) などを実行できる、状態のコレクションを定義します。 詳細については、「Amazon States Language を使用して Step Functions ワークフローを定義する」を参照してください。 |
入力および出力の設定 |
ワークフローの状態で JSON データを入力として受け取ります。また、通常 JSON データを出力として次の状態に渡します。Step Functions には、状態間のデータフローを制御するためのフィルターが用意されています。 詳細については、「Step Functions の入力および出力処理」を参照してください。 |
サービス統合 |
ワークフローから AWS サービス API アクションを呼び出すことができます。 詳細については、「サービスと Step Functions の統合」を参照してください。 |
サービス統合タイプ |
|
サービス統合パターン | を呼び出すときは AWS のサービス、次のいずれかのサービス統合パターンを使用します。
|
実行 |
ステートマシンの実行は、ワークフローを実行してタスクを実施するインスタンスです。 詳細については、「Step Functions でステートマシンの実行を開始する」を参照してください。 |
ステートマシンデータ
ステートマシンのデータは、次の形式です。
-
ステートマシンへの最初の入力
-
状態間で渡されるデータ
-
ステートマシンからの出力
このセクションでは、ステートマシンのデータを AWS Step Functionsでフォーマットして使用する方法について説明します。
データ形式
ステートマシンデータは JSON テキストで表されます。JSON によってサポートされる任意のデータ型を使用して、ステートマシンに値を指定できます。
注記
ステートマシンの入出力
初期入力データは、2 つの方法のいずれかで AWS Step Functions ステートマシンに渡すことができます。実行を開始すると、データを StartExecution
アクションに渡すことができます。Step Functions コンソールStartAt
状態に渡されます。入力が提供されない場合、デフォルトは空のオブジェクト ({}
) です。
実行の出力は、最後の状態 (terminal
) により返されます。この出力は、実行の結果に JSON テキストとして表示されます。
標準ワークフローの場合、DescribeExecution
アクションなど、外部呼び出し元を使用して実行履歴から実行結果を取得できます。実行結果は、Step Functions コンソール
Express ワークフローについては、ログ記録を有効にしている場合は、CloudWatch Logs から結果を取得したり Step Functions コンソールで実行を表示およびデバッグしたりすることができます。詳細については、CloudWatch Logs を使用した Step Functions の実行履歴のログ記録およびStep Functions コンソールでの実行の詳細の表示を参照してください。
ステートマシンに関連するクォータも考慮する必要があります。詳細については、「Step Functions のサービスクォータ」を参照してください
状態の入出力
各状態の入力は、前の状態の JSON テキストで構成されます。または、StartAt
状態の場合、実行への入力で構成されます。特定のフロー制御状態は、その出力への入力をエコーします。
次の例では、ステートマシンが 2 つの数値を同時に追加します。
-
AWS Lambda 関数を定義します。
function Add(input) { var numbers = JSON.parse(input).numbers; var total = numbers.reduce( function(previousValue, currentValue, index, array) { return previousValue + currentValue; }); return JSON.stringify({ result: total }); }
-
ステートマシンを定義します。
{ "Comment": "An example that adds two numbers together.", "StartAt": "Add", "Version": "1.0", "TimeoutSeconds": 10, "States": { "Add": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:Add", "End": true } } }
-
次の JSON テキストで実行を開始します。
{ "numbers": [3, 4] }
Add
状態が JSON テキストを受け取り、Lambda 関数に渡します。Lambda 関数は、計算の結果をその状態に返します。
状態は、その出力で次の値を返します。
{ "result": 7 }
Add
はステートマシンの最終状態でもあるため、この値はステートマシンの出力として返されます。最終状態が出力を返さない場合、ステートマシンは空のオブジェクト (
{}
) を返します。
詳細については、「Step Functions の入力および出力処理」を参照してください。
他の サービス AWS Step Functions から を呼び出す
ステートマシンを呼び出すため他の複数のサービスを構成できます。ステートマシンのワークフロータイプに基づいて、ステートマシンを非同期または同期的で呼び出すことができます。ステートマシンを同期で呼び出すには、StartSyncExecution
API コールを使用するか、Amazon API Gateway を Express ワークフローと統合します。非同期呼び出しでは、Step Functions はタスクトークンが返されるまでワークフローの実行を一時停止します。ただし、タスクトークンを待っていると、ワークフローが同期します。
Step Functions を呼び出すように構成できるサービスには、次のものがあります。
-
AWS Lambda、
StartExecution
を呼び出しを使います。
Step Functions 呼び出しには、StartExecution
クォータが適用されます。詳細については、以下を参照してください。
ステートマシンの移行
ステートマシンの新しい実行を開始すると、システムは最上位の StartAt
フィールドで参照されている状態で開始されます。このフィールドは文字列として指定され、ワークフロー内の状態の名前と正確に一致する必要があります (大文字と小文字が区別されます)。
状態が実行されると、 は Next
フィールドの値 AWS Step Functions を使用して、次の状態を決定します。
Next
フィールドでは、状態名を文字列として指定することもできます。この文字列では大文字と小文字が区別され、ステートマシンの説明で指定されたステートの名前と正確に一致する必要があります。
例えば、次の状態には NextState
への移行が含まれています。
"SomeState" : {
...,
"Next" : "NextState"
}
ほとんどの状態では、Next
フィールドによる 1 つの移行ルールのみ許可されます。ただし、特定のフロー制御ステート (Choice
ステートなど) では、それぞれ独自の Next
フィールドを使用して複数の移行ルールを指定できます。Amazon ステートメント言語では、移行の指定方法など、指定可能な各状態タイプについて詳しく説明されています。
状態には、他の状態からの受信移行を複数指定できます。
プロセスは、終了状態 ("Type":
Succeed
、"Type": Fail
、または "End": true
の状態) のいずれかに到達するまで繰り返されます。そうでない場合は、ランタイムエラーが発生します。
実行を redrive すると状態遷移とみなされます。さらに、redrive で再実行されるすべての状態も状態遷移とみなされます。
ステートマシン内の状態には次のルールが適用されます。
-
状態は、囲みブロック内ではどのような順序で発生してもかまいません。ただし、リストに記載されている順序は、実行順序には影響しません。この順序は状態の内容によって決まります。
-
ステートマシン内では、
start
状態として指定できるのは 1 つの状態のみです。start
状態は最上位構造内のStartAt
フィールドの値によって定義されます。 -
ステートマシンのロジックによっては (ステートマシンに複数のロジックブランチがあるかどうかなど)、複数の状態が存在する可能性があります。
-
ステートマシンが 1 つの状態のみで構成される場合、開始状態と終了状態の両方になることがあります。
分散マップの状態の遷移
Map
状態を分散モードで使用すると、分散マップ状態が開始された子ワークフロー実行ごとに 1 つの状態遷移に対して課金されます。Map
状態をインラインモードで使用すると、状態遷移は、インラインマップ状態が繰り返されるごとには課金されません。
Map
状態を分散モードで使用することによりコストを最適化し、ネストされたワークフローを Map
状態の定義に含めることができます。また、分散マップ状態は、Express タイプの子ワークフロー実行を開始するときに、より高い価値を発揮します。Step Functions は Express の子ワークフロー実行のレスポンスとステータスを保存します。そのため、実行データを CloudWatch Logs に保存する必要がなくなります。エラーしきい値の定義や項目グループのバッチ処理など、分散マップの状態で使用できるフロー制御にアクセスすることもできます。Step Functions の料金情報については、「AWS Step Functions の料金
Step Functions 読み取り整合性
のステートマシンの更新 AWS Step Functions は、結果整合性があります。数秒以内のすべての StartExecution
呼び出しでは、更新された定義と roleArn
(IAM ロールの Amazon リソースネーム (ARN)) が使用されます。UpdateStateMachine
を呼び出したすぐ後に開始された実行では、前のステートマシン定義と roleArn
が使用されることがあります。
詳細については次を参照してください:
-
「
UpdateStateMachine
API リファレンス」の「AWS Step Functions 」