翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Step Functions のステートマシンについて
Step Functions は、ワークフローとも呼ばれるステートマシンに基づいています。ワークフローは、一連のイベント駆動型のステップで構成されます。
ワークフローは、 とも呼ばれる Amazon States Language を使用して定義しますASL。オプションで、ビジュアルワークフローデザイナーである Workflow Studio を使用して、ワークフローを構築および編集できます。
ワークフローの各ステップはステートと呼ばれます。状態には、フロー状態とタスク状態の 2 種類があります。
- フロー状態
-
フロー状態は、ステップの実行フローを制御します。例えば、選択状態は条件付きロジックを提供し、待機状態はワークフロー実行を一時停止し、マップ状態はデータセット内の各項目に対して子ワークフローを実行し、並列状態はワークフローに別々のブランチを作成します。
- タスクの状態
-
タスクの状態は、別の AWS のサービス や を呼び出すなど、別の AWS サービスが実行する作業単位を表しますAPI。タスクの状態はアクションとも呼ばれます。 AWS および外部サービスで作業を実行するには、数百のアクションを選択できます。(注: Step Functions の外部で実行されるワーカーを使用してタスクを実行することもできます。 詳細については、「」を参照してくださいアクティビティ。)
実行とエラーの処理
ワークフローを実行すると、Step Functions は実行と呼ばれるワークフローインスタンスを作成します。ワークフロー実行のステータスをモニタリングできます。実行でエラーが発生した場合、ワークフローはエラーをキャッチする可能性があります。ユースケースによっては、後で実行を再処理してワークフローを再開できます。
データの受け渡し
必要に応じて、入力データをJSONテキスト形式でワークフローに提供できます。各ステップは、変数と状態出力を使用して後続のステップにデータを渡すことができます。変数に保存されているデータは、後のステップで使用できます。状態出力は、次のステップの入力になります。データの受け渡しの詳細については、「」を参照してください変数を使用して状態間でデータを渡す。
ワークフローの最後に、ステートマシンはオプションで の形式で出力を生成できますJSON。
データの変換
ステートマシンとステートマシンは、クエリ言語を使用してデータを変換できます。推奨されるクエリ言語は ですJSONata。ただし、re:Invent 2024 より前に作成されたステートマシンは を使用しますJSONPath。下位互換性のために、ステートマシンまたは個々の状態は、クエリ言語JSONataに を使用することをオプトインする必要があります。
JSONata ステートマシンと個々の状態は、JSONata「」に設定されたQueryLanguage
フィールドで認識できます。を使用するステートマシンとステートには JSONPathQueryLanguage
フィールドがありません。
を使用する状態には、パラメータ InputPath、、 などの状態フィールドJSONPathがあります ResultSelector ResultPath OutputPath。JSONPath ステートマシンの定義では、 で終わるフィールド名.$
と、 $.
と のプレフィックスが付いた値も表示されます。$$.
どちらもパスを表します。パスには、 などのさまざまな組み込み関数が表示される場合がありますStates.MathAdd
。組み込み関数は でのみ使用されますJSONPath。
JSONata 状態は引数フィールドと出力フィールドを使用します。これらのオプションフィールドには、 のようなJSONata式が表示される場合があります"{% $type = 'local' %}"
。ではJSONata、式、演算子、関数を使用できます。詳細については、「Step Functions JSONataでの を使用したデータの変換」を参照してください。
注記
状態ごとに使用できるクエリ言語は 1 つだけです。1 つのステップJSONata内で JSONPathと を混在させることはできません。
主要なコンセプト
以下に、コンテキストの Step Functions の主要な用語の概要を示します。
言葉 | 説明 |
---|---|
ワークフロー | 多くの場合、ビジネスプロセスを反映する一連のステップ。 |
States |
ステートマシンの個別のステップでは、入力に基づいて決定を行い、それらの入力からアクションを実行して、出力を他の状態に渡すことができます。 詳細については、「Step Functions で使用するワークフローの状態の検出」を参照してください。 |
Workflow Studio |
ワークフローのプロトタイプ作成と構築を迅速に行えるようにする視覚的なワークフローデザイナー。 詳細については、「Step Functions Workflow Studio でのワークフローの開発」を参照してください。 |
ステートマシン | ワークフロー内の個々の状態またはステップを表すJSONテキストと、 詳細については、「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。
注記
ステートマシンの入出力
初期入力データを AWS Step Functions ステートマシンに渡すには、次の 2 つの方法があります。実行を開始すると、データを StartExecution
アクションに渡すことができます。Step Functions コンソールStartAt
状態に渡されます。入力が提供されない場合、デフォルトは空のオブジェクト ({}
) です。
実行の出力は、最後の状態 (terminal
) により返されます。この出力は、実行結果にJSONテキストとして表示されます。
標準ワークフローの場合、DescribeExecution
アクションなど、外部呼び出し元を使用して実行履歴から実行結果を取得できます。実行結果は、Step Functions コンソール
Express ワークフローでは、ログ記録を有効にした場合は、 CloudWatch ログから結果を取得するか、Step Functions コンソールで実行を表示およびデバッグできます。詳細については、 CloudWatch ログを使用した 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 リソースネーム) が使用されます。UpdateStateMachine
を呼び出したすぐ後に開始された実行では、前のステートマシン定義と roleArn
が使用されることがあります。
詳細については、次を参照してください。
-
UpdateStateMachine
AWS Step Functions APIリファレンスの