翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
タスクワークフローの状態
Task
状態 ("Type": "Task"
) は、ステートマシンによって実行される単一の作業単位を表します。タスクは、アクティビティまたは AWS Lambda 関数を使用するか、サポートされている他の AWS サービスと統合するかAPI、Stripe などのサードパーティーの を呼び出して作業を実行します。
Amazon States Language は、状態のタイプを に設定Task
し、アクティビティ、Lambda 関数、またはサードパーティーAPIエンドポイントの Amazon リソースネーム (ARN) をタスクに提供することでタスクを表します。次のタスク状態定義は、
という名前の Lambda 関数を呼び出します。HelloFunction
"Lambda Invoke": {
"Type": "Task",
"Resource": "arn:aws:states:::lambda:invoke",
"Parameters": {
"Payload.$": "$",
"FunctionName": "arn:aws:lambda:us-east-2
:123456789012
:function:HelloFunction
:$LATEST"
},
"End": true
}
タスクタイプ
Step Functions では、Task 状態定義内で指定できる次のタスクタイプをサポートしています。
タスクタイプを指定するには、タスク状態定義の ARN Resource
フィールドにそのタイプを指定します。次の例は、Resource
フィールドの構文を示しています。サードパーティーの を呼び出すタスクタイプを除くすべてのタスクタイプはAPI、次の構文を使用します。HTTP タスクの構文については、「」を参照してくださいStep Functions ワークフローAPIsでサードパーティーを呼び出す。
タスク状態定義で、次の構文の斜体文字テキストを AWS リソース固有の情報に置き換えます。
arn:partition
:service
:region
:account
:task_type
:name
次のリストでは、この構文の個々のコンポーネントについて説明します。
-
partition
は使用する AWS Step Functions パーティションで、最も一般的には ですaws
。 -
service
はタスクの実行 AWS サービス に使用される を示し、次のいずれかの値を指定できます。 -
region
は、Step Functions アクティビティまたはステートマシンタイプ、Lambda 関数、またはその他の AWS リソースが作成されたAWS リージョンコードです。 -
account
は、リソースを定義した AWS アカウント ID です。 -
task_type
は実行するタスクのタイプです。これには、次のいずれかの値を指定できます。-
activity
– アクティビティ。 -
function
- Lambda 関数。 -
- サポートされた接続サービスの名前 (Step Functions 用統合最適化 を参照)。servicename
-
-
name
は、登録されたリソース名 (アクティビティ名、Lambda 関数名、またはサービスAPIアクション) です。
注記
Step Functions は、パーティションまたはリージョンARNs間の参照をサポートしていません。例えば、aws-cn
は aws
パーティション内のタスクを呼び出すことはできません。その逆も同様です。
次のセクションでは、各タスクタイプの詳細を示します。
アクティビティ
アクティビティは、お客様によって実装およびホストされ、特定のタスクを実行するワーカー (プロセスまたはスレッド) を示します。標準ワークフローでのみサポートされ、Express ワークフローではサポートされません。
アクティビティでは、次の構文Resource
ARNsを使用します。
arn:partition
:states:region
:account
:activity:name
注記
Step Functions を初めて使用する前にCreateActivity、アクティビティを Step Functions で作成する必要があります (、 APIアクション、または Step Functions コンソール
アクティビティの作成とワーカーの実装の詳細については、アクティビティを参照してください。
Lambda 関数
Lambda タスクは、 を使用して関数を実行します AWS Lambda。Lambda 関数を指定するには、 Resource
フィールドで Lambda 関数ARNの を使用します。
Lambda 関数の指定に使用する統合のタイプ (最適化された統合またはAWS SDK統合 ) に応じて、Lambda 関数の Resource
フィールドの構文は異なります。
次の Resource
フィールド構文は、Lambda 関数と最適化された統合の例です。
"arn:aws:states:::lambda:invoke"
次のResource
フィールド構文は、Lambda 関数との統合の例 AWS SDKです。
"arn:aws:states:::aws-sdk:lambda:invoke"
次の Task
状態定義は、
という名前の Lambda 関数と最適化された統合の例を示しています。HelloWorld
"LambdaState": {
"Type": "Task",
"Resource": "arn:aws:states:::lambda:invoke",
"OutputPath": "$.Payload",
"Parameters": {
"Payload.$": "$",
"FunctionName": "arn:aws:lambda:us-east-1:function:HelloWorld:$LATEST
"
},
"Next": "NextState"
}
Resource
フィールドで指定された Lambda 関数が完了すると、その出力は Next
フィールド ("NextState") で識別される状態に送信されます。
サポートされる AWS サービス
接続されたリソースを参照すると、Step Functions はサポートされているサービスのAPIアクションを直接呼び出します。Resource
フィールドでサービスとアクションを指定します。
接続されたサービスは、次の構文Resource
ARNsを使用します。
arn:partition
:states:region
:account
:servicename
:APIname
注記
接続されたリソースへの同期接続を作成するには、 を .sync
に追加します。APIname
の エントリARN。詳細については、「他のサービスの統合」を参照してください。
例:
{
"StartAt": "BATCH_JOB",
"States": {
"BATCH_JOB": {
"Type": "Task",
"Resource": "arn:aws:states:::batch:submitJob.sync",
"Parameters": {
"JobDefinition": "preprocessing",
"JobName": "PreprocessingBatchJob",
"JobQueue": "SecondaryQueue",
"Parameters.$": "$.batchjob.parameters",
"RetryStrategy": {
"attempts": 5
}
},
"End": true
}
}
}
タスク状態フィールド
[common state fields] (共通状態フィールド) に加えて、Task
状態には次のフィールドがあります。
-
Resource
(必須) -
URI、特に実行する特定のタスクを一意に識別ARNする 。
-
Parameters
(オプション) -
接続されたリソースのAPIアクションに情報を渡すために使用されます。パラメータは、静的 JSONと を組み合わせて使用できますJsonPath
。詳細については、「Step Functions APIのサービスへのパラメータの受け渡し」を参照してください。 Credentials
(オプション)-
指定した
Resource
を呼び出す前にステートマシンの実行ロールが継承する必要があるターゲットロールを指定します。または、実行入力に基づいて、実行ARN時に IAMロールに解決されるJSONPath値または組み込み関数を指定することもできます。JSONPath 値を指定する場合は、$.
表記のプレフィックスを付ける必要があります。このフィールドを
Task
状態で使用した例については、「タスク状態の認証情報フィールドの例」を参照してください。このフィールドを使用してステートマシンからクロスアカウント AWS リソースにアクセスする例については、「」を参照してくださいチュートリアル: Step Functions でのクロスアカウント AWS リソースへのアクセス。注記
このフィールドは、Lambda 関数タスクタイプを使用する と、サポートされている AWS サービス でサポートされています。
-
ResultPath
(オプション) -
Resource
で指定されたタスクを実行した結果を配置する場所 (入力内) を指定します。その後、入力はOutputPath
フィールド (ある場合) に従ってフィルタリングされてから状態の出力に使用されます。詳細については、入力および出力処理を参照してください。 -
ResultSelector
(オプション) -
値が静的であるか、結果から選択されたキーバリューのペアの集合を渡します。詳細については、「ResultSelector」を参照してください。
-
Retry
(オプション) -
Retrier と呼ばれるオブジェクトの配列。状態でランタイムエラーが発生した場合の再試行ポリシーを定義します。詳細については、「Retry と Catch を使用するステートマシンの例」を参照してください。
-
Catch
(オプション) -
Catcher と呼ばれるオブジェクトの配列で、フォールバック状態を定義します。この状態は、状態にランタイムエラーが発生し、その再試行ポリシーが使い果たされたか定義されていない場合に実行されます。詳細については、「フォールバック状態」を参照してください。
-
TimeoutSeconds
(オプション) -
アクティビティまたはタスクが States.Timeout エラーでタイムアウトして失敗するまでに実行できる最大時間を指定します。タイムアウトの値はゼロ以外の正の整数にする必要があります。デフォルト値は
99999999
です。タスクが開始されるとタイムアウトのカウントが開始します (例:
ActivityStarted
またはLambdaFunctionStarted
イベントが実行イベント履歴にログインされる際)。アクティビティにおいては、GetActivityTask
がトークンを受信し、ActivityStarted
が実行イベント履歴にログインされると、カウントが開始します。タスクが開始されると、Step Functions は指定された
TimeoutSeconds
期間内にタスクまたはアクティビティワーカーからの成功または失敗の応答を待ちます。タスクまたはアクティビティのワーカーがこの時間内の応答に失敗した場合、Step Functions はワークフロー実行を失敗としてマークします。 -
TimeoutSecondsPath
(オプション) -
リファレンスパスを使用して状態の入力からタイムアウト値を動的に指定したい場合は、
TimeoutSecondsPath
を使用してください。解決されると、リファレンスパスは、値が正の整数のフィールドを選択する必要があります。注記
Task
状態にはTimeoutSeconds
とTimeoutSecondsPath
の両方を含めることはできません。 -
HeartbeatSeconds
(オプション) -
タスクの実行中にアクティビティワーカーが送信するハートビートシグナルの頻度を決定します。ハートビートは、タスクがまだ実行中で、完了するまでにさらに時間がかかることを示します。ハートビートは、アクティビティやタスクが
TimeoutSeconds
期間内にタイムアウトするのを防ぎます。HeartbeatSeconds
はTimeoutSeconds
フィールド値より小さい 0 以外の正の整数値でなければなりません。デフォルト値は99999999
です。タスクからのハートビートの間隔が指定された秒数よりも長くなる場合、タスク状態は States.Timeout エラーで失敗します。アクティビティにおいては、
GetActivityTask
がトークンを受信し、ActivityStarted
が実行イベント履歴にログインされると、カウントが開始します。 -
HeartbeatSecondsPath
(オプション) -
リファレンスパスを使用して状態の入力からハートビート値を動的に指定したい場合は、
HeartbeatSecondsPath
を使用します。解決されると、リファレンスパスは、値が正の整数のフィールドを選択する必要があります。注記
Task
状態にはHeartbeatSeconds
とHeartbeatSecondsPath
の両方を含めることはできません。
Task
状態は、その状態で実行が終了する場合は End
フィールドが true
に設定されている必要があります。または、Next
フィールドに、Task
状態が完了した際に実行される状態を指定する必要があります。
タスク状態定義の例
次の例は、要件に基づいてタスク状態定義を指定する方法を示しています。
タスク状態のタイムアウトとハートビート間隔
長時間実行されるアクティビティでは、タイムアウト値とハートビート間隔を設定することをお勧めします。これは、タイムアウトとハートビート値を指定するか、動的に設定することによって実行できます。
静的タイムアウトとハートビート通知の例
HelloWorld
が完了すると、次の状態 (ここでは NextState
と呼ばれます) が実行されます。
このタスクが 300 秒以内に完了しなかった場合、または 60 秒間隔のハートビート通知を送信しなかった場合、タスクは failed
とマークされます。
"ActivityState": {
"Type": "Task",
"Resource": "arn:aws:states:us-east-1:123456789012:activity:HelloWorld",
"TimeoutSeconds": 300,
"HeartbeatSeconds": 60,
"Next": "NextState"
}
動的タスクタイムアウトとハートビート通知の例
この例では、 AWS Glue ジョブが完了すると、次の状態が実行されます。
このタスクが、 AWS Glue
ジョブによって動的に設定された間隔内に完了しなかった場合、タスクは failed
としてマークされます。
"GlueJobTask": {
"Type": "Task",
"Resource": "arn:aws:states:::glue:startJobRun.sync",
"Parameters": {
"JobName": "myGlueJob"
},
"TimeoutSecondsPath": "$.params.maxTime",
"Next": "NextState"
}
タスク状態の認証情報フィールドの例
ハードコードされたIAMロールの指定 ARN
次の例では、 という名前のクロスアカウント Lambda 関数にアクセスするためにIAMステートマシンの実行ロールが引き受ける必要があるターゲットロールを指定しますEcho
。この例では、ターゲットロールARNはハードコードされた値として指定されています。
{
"StartAt": "Cross-account call",
"States": {
"Cross-account call": {
"Type": "Task",
"Resource": "arn:aws:states:::lambda:invoke",
"Credentials": {
"RoleArn": "arn:aws:iam::111122223333:role/LambdaRole"
},
"Parameters": {
"FunctionName": "arn:aws:lambda:us-east-2:111122223333:function:Echo
"
},
"End": true
}
}
}
IAM ロールJSONPathとしての の指定 ARN
次の例では、実行ARN時に IAMロールに解決される JSONPath 値を指定します。
{
"StartAt": "Lambda",
"States": {
"Lambda": {
"Type": "Task",
"Resource": "arn:aws:states:::lambda:invoke",
"Credentials": {
"RoleArn.$": "$.roleArn"
},
...
}
}
}
組み込み関数をIAMロールとして指定する ARN
次の例では、実行ARN時に IAMロールに解決されるStates.Format組み込み 関数を使用しています。
{
"StartAt": "Lambda",
"States": {
"Lambda": {
"Type": "Task",
"Resource": "arn:aws:states:::lambda:invoke",
"Credentials": {
"RoleArn.$": "States.Format('arn:aws:iam::{}:role/ROLENAME', $.accountId)"
},
...
}
}
}