実行中の実行から新しい AWS Step Functions ステートマシンを起動する - AWS Step Functions

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

実行中の実行から新しい AWS Step Functions ステートマシンを起動する

Step Functions は、独自の をサービスAPI統合として統合します。Step Functions を使用して、実行中のタスク状態から直接ステートマシンの新しい実行を開始する方法について説明します。新しいワークフローを構築するときに、ネストされたワークフロー実行を使用して、メインワークフローの複雑さを軽減し、一般的なプロセスを再利用します。

最適化された Step Functions 統合の主な機能

レスポンスのリクエスト または タスクトークンのコールバックまで待機する 統合パターンの最適化はないことに注意してください。

詳細については、次を参照してください。

サポートされている Step Functions APIs

ワークフローの例

以下には、別のステートマシンの実行を開始し、その完了を待機する Task 状態が含まれています。

{ "Type":"Task", "Resource":"arn:aws:states:::states:startExecution.sync:2", "Parameters":{ "Input":{ "Comment": "Hello world!" }, "StateMachineArn":"arn:aws:states:us-east-1:123456789012:stateMachine:HelloWorld", "Name":"ExecutionName" }, "End":true }

以下には、別のステートマシンの実行を開始する Task 状態が含まれています。

{ "Type":"Task", "Resource":"arn:aws:states:::states:startExecution", "Parameters":{ "Input":{ "Comment": "Hello world!" }, "StateMachineArn":"arn:aws:states:us-east-1:123456789012:stateMachine:HelloWorld", "Name":"ExecutionName" }, "End":true }

以下には、コールバックサービス統合パターンを実行する Task の状態が含まれます。

{ "Type":"Task", "Resource":"arn:aws:states:::states:startExecution.waitForTaskToken", "Parameters":{ "Input":{ "Comment": "Hello world!", "token.$": "$$.Task.Token" }, "StateMachineArn":"arn:aws:states:us-east-1:123456789012:stateMachine:HelloWorld", "Name":"ExecutionName" }, "End":true }

ネストされたワークフロー実行を開始元の親実行に関連付けるには、Context オブジェクトからプルされた実行 ID を含む特別に名前が付けられたパラメータを渡します。ネストされた実行を開始するときは、AWS_STEP_FUNCTIONS_STARTED_BY_EXECUTION_ID という名前のパラメータを使用します。パラメータ名.$に を追加し、 で Context オブジェクトの ID を参照することで、実行 ID を渡します$$.Execution.Id。詳細については、「Context オブジェクトへのアクセス」を参照してください。

{ "Type":"Task", "Resource":"arn:aws:states:::states:startExecution.sync", "Parameters":{ "Input":{ "Comment": "Hello world!", "AWS_STEP_FUNCTIONS_STARTED_BY_EXECUTION_ID.$": "$$.Execution.Id" }, "StateMachineArn":"arn:aws:states:us-east-1:123456789012:stateMachine:HelloWorld", "Name":"ExecutionName" }, "End":true }

ネストされたステートマシンは、以下を返します。

リソース Output
startExecution同期 文字列
startExecution.sync:2 JSON

どちらもネストされたステートマシンが完了するのを待機しますが、異なる Output 形式を返します。例えば、オブジェクト { "MyKey": "MyValue" } を返す Lambda 関数を作成すると、次のレスポンスが得られます。

startExecution.sync の場合:

{ <other fields> "Output": "{ \"MyKey\": \"MyValue\" }" }

startExecution.sync:2 の場合:

{ <other fields> "Output": { "MyKey": "MyValue" } }

ネストされたステートマシンのIAMアクセス許可の設定

親ステートマシンは、ポーリングとイベントを使用して子ステートマシンが実行を完了したかどうかを判断します。ポーリングには のアクセス許可が必要ですstates:DescribeExecutionが、Step Functions EventBridge に送信されるイベントには events:PutTargetsevents:PutRule、および のアクセス許可が必要ですevents:DescribeRule。これらのアクセス許可がIAMロールにない場合、親ステートマシンが子ステートマシンの実行の完了を認識するまでに遅延が生じる可能性があります。

1 つのネストされたワークフロー実行を呼び出す StartExecution ステートマシンの場合は、そのステートマシンへのアクセス許可を制限する IAM ポリシーを使用します。

詳細については、IAM「Step Functions のアクセス許可」を参照してください。

IAM ネストされた Step Functions ワークフローを呼び出すための ポリシー

1 つのネストされたワークフロー実行を呼び出す StartExecution ステートマシンの場合は、そのステートマシンへのアクセス許可を制限する IAM ポリシーを使用します。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "states:StartExecution" ], "Resource": [ "arn:aws:states:[[region]]:[[accountId]]:stateMachine:[[stateMachineName]]" ] } ] }

詳細については、次を参照してください。

Synchronous
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "states:StartExecution" ], "Resource": [ "arn:aws:states:[[region]]:[[accountId]]:stateMachine:[[stateMachineName]]" ] }, { "Effect": "Allow", "Action": [ "states:DescribeExecution", "states:StopExecution" ], "Resource": [ "arn:aws:states:[[region]]:[[accountId]]:execution:[[stateMachineName]]:*" ] }, { "Effect": "Allow", "Action": [ "events:PutTargets", "events:PutRule", "events:DescribeRule" ], "Resource": [ "arn:aws:events:[[region]]:[[accountId]]:rule/StepFunctionsGetEventsForStepFunctionsExecutionRule" ] } ] }
Asynchronous
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "states:StartExecution" ], "Resource": [ "arn:aws:states:[[region]]:[[accountId]]:stateMachine:[[stateMachineName]]" ] } ] }

ネストされたワークフロー実行の詳細については、Step Functions で Task 状態からワークフロー実行を開始する を参照してください。