Task - AWS Step Functions

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Task

Task 状態 ("Type": "Task") は、ステートマシンによって実行される単一の作業単位を表します。

ステートマシンのすべての作業は、タスクにより処理されます。タスクの作業を実行するには、アクティビティ、または AWS Lambda 関数を使用するか、パラメータをそのサービスの API アクションに渡します。

AWS Step Functions では、タスク状態から直接 Lambda 関数を呼び出すことができます。Lambda 関数は、AWS Lambda で実行されるクラウドネイティブタスクです。Lambda 関数は、AWS Management Console を使用したり、コードを Lambda にアップロードしたりして、さまざまなプログラミング言語による書き込みができます。詳細については、Step Functions ステートを作成するマシンLambda の使用 を参照してください。

注記

Step Functions では、一部の AWS サービスをタスク状態から直接調整することができます。詳細については、他のサービスでの使用 を参照してください。

アクティビティはプログラムコードで構成され、オペレーターがアクションを実行するか、入力を提供するのを待機します。アクティビティは、Amazon EC2、Amazon ECS、またはモバイルデバイスでもアクティビティをホストできます。アクティビティは、GetActivityTaskSendTaskSuccessSendTaskFailure、および SendTaskHeartbeat API アクションを使用して Step Functions をポーリングします。

Amazon ステートメント言語は、状態のタイプを Task に設定し、タスクにアクティビティまたは Lambda 関数の Amazon リソースネーム (ARN) を提供することにより、タスクを表します。

[common state fields] (共通状態フィールド) に加えて、Task 状態には次のフィールドがあります。

Resource (必須)

URI (特に、実行する特定のタスクを一意に識別する ARN)。

Parameters (オプション)

接続されたリソースの API アクションに情報を渡すのに使用します。パラメータには静的な JSON と JsonPath を組み合わせて使用できます。詳細については、「サービス API にパラメータを渡す」を参照してください。

ResultPath (オプション)

Resource で指定されたタスクを実行した結果を配置する場所 (入力内) を指定します。その後、入力は OutputPath フィールド (ある場合) に従ってフィルタリングされてから状態の出力に使用されます。詳細については、入力および出力処理を参照してください。

ResultSelector (オプション)

値が静的であるか、結果から選択されたキーバリューのペアの集合を渡します。詳細については、「ResultSelector」を参照してください。

Retry (オプション)

Retrier と呼ばれるオブジェクトの配列。状態でランタイムエラーが発生した場合の再試行ポリシーを定義します。詳細については、「Retry の使用例と Catch の使用例」を参照してください。

Catch (オプション)

Catcher と呼ばれるオブジェクトの配列で、フォールバック状態を定義します。この状態は、状態にランタイムエラーが発生し、その再試行ポリシーが使い果たされたか定義されていない場合に実行されます。詳細については、フォールバック状態を参照してください。

TimeoutSeconds (オプション)

指定した秒数よりも長時間タスクが実行されると、この状態は States.Timeout エラー名で失敗します。ゼロ以外の正の整数にする必要があります。指定しない場合、デフォルト値は 99999999 です。タスクが開始されると、カウントが開始します (例: ActivityStarted または LambdaFunctionStarted[Execution event history] (実行イベント履歴) にログインされる際)。

TimeoutSecondsPath (オプション)

リファレンスパスを使用して状態の入力からタイムアウト値を動的に指定したい場合は、TimeoutSecondsPath を使用してください。解決されると、リファレンスパスは、値が正の整数のフィールドを選択する必要があります。

注記

Task 状態には TimeoutSecondsTimeoutSecondsPath の両方を含めることはできません

HeartbeatSeconds (オプション)

タスクからのハートビートの間隔が指定された秒数よりも長時間経過した場合、このタスクは States.Timeout エラー名で失敗します。0 以外の正の整数である必要があり、TimeoutSeconds フィールドに指定された秒数よりも小さい必要があります。指定しない場合、デフォルト値は 99999999 です。アクティビティにおいては、GetActivityTask にトークンが送信され、ActivityStarted[Execution event history] (実行イベント履歴) にログインされると、カウントが開始します。

HeartbeatSecondsPath (オプション)

リファレンスパスを使用して状態の入力からハートビート値を動的に指定したい場合は、HeartbeatSecondsPath を使用します。解決されると、リファレンスパスは、値が正の整数のフィールドを選択する必要があります。

注記

Task 状態には HeartbeatSecondsHeartbeatSecondsPath の両方を含めることはできません

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 ジョブによって動的に設定された間隔内で完了しなかった場合、または AWS Glue ジョブによって設定された間隔のハートビート通知を送信しない場合、タスクは failed としてマークされます。

"ActivityState": { "Type": "Task", "Resource": "arn:aws:states:::glue:startJobRun.sync", "Parameters": { "JobName": "myGlueJob" }, "TimeoutSecondsPath": "$.params.maxTime", "HeartbeatSecondsPath": "$.params.heartbeat", "Next": "NextState" }

タスクのリソース ARN の指定

Resource フィールドの ARN は次のパターンを使用して指定します。

arn:partition:service:region:account:task_type:name

このパターンでは:

  • partition は使用する AWS Step Functions のパーティションです。最も一般的に使用されるのは aws です。

  • service はタスクの実行に使用される AWS のサービスを示します。以下のいずれかです。

    • statesアクティビティ

    • Lambda 関数 (lambda) を実行します。

  • region は、 Step Functions アクティビティ、ステートマシンタイプまたは Lambda 関数が作成された AWS リージョンです。

  • account はお客様の AWS アカウント ID です。

  • task_type は実行するタスクのタイプです。以下のいずれかの値です:

  • name はメンバーリソース名 (アクティビティ名、 Lambda 関数名、またはサービス API アクション) です。

注記

Step Functions はパーティション、リージョン、アカウント間での ARN の参照をサポートしていません (例えば、「aws-cn」がパーティション「aws」のタスクを呼び出すことはできません。その逆も同様です)。

タスクタイプ

以下のタスクタイプがサポートされています。

次のセクションでは、各タスクタイプの詳細を示します。

アクティビティ

アクティビティは、お客様によって実装およびホストされ、特定のタスクを実行するワーカー (プロセスまたはスレッド) を示します。標準ワークフローでのみサポートされ、Express ワークフローではサポートされません。

アクティビティ resource ARN は以下の構文を使用します。

arn:partition:states:region:account:activity:name

これらのフィールドの詳細については、タスクのリソース ARN の指定を参照してください。

注記

アクティビティは、最初に使用する前に Step Functions (CreateActivity、API アクション、または Step Functions コンソールを使用) で作成しておく必要があります。

アクティビティの作成とワーカーの実装の詳細については、アクティビティを参照してください。

Lambda 関数

Lambda タスクでは AWS Lambda を使用して関数を実行します。Lambda 関数を指定するには、Resource フィールドの Lambda 関数の ARN を使用します。

Lambda 関数 Resource ARN は以下の構文を使用します。

arn:partition:lambda:region:account:function:function_name

これらのフィールドの詳細については、タスクのリソース ARN の指定を参照してください。

例:

"LambdaState": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:HelloWorld", "Next": "NextState" }

Resource フィールドに指定された Lambda 関数が完了すると、その出力が Next フィールド (「NextState」) で指定された状態に送信されます。

サポートされる AWS サービス

接続されたリソースをリファレンスすると、Step Functions によって、サポートされたサービスの API アクションが直接呼び出されます。Resource フィールドでサービスとアクションを指定します。

接続されたサービス Resource ARN では以下の構文を使用します。

arn:partition:states:region:account:servicename:APIname
注記

接続されたリソースへの同期接続を作成するには、.sync を ARN の APIname エントリに付加します。詳細については、「他のサービスでの使用」を参照してください。

例:

{ "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 } } }