コンテキストオブジェクト - AWS Step Functions

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

コンテキストオブジェクト

コンテキストオブジェクトは、実行中に使用できる内部の JSON 構造であり、ステートマシンおよび実行に関する情報が含まれています。これにより、ワークフローが特定の実行に関する情報にアクセスできるようになります。コンテキストオブジェクトには、次のフィールドからアクセスできます。

  • InputPath

  • OutputPath

  • ItemsPath (マップ状態)

  • Variable (選択状態)

  • ResultSelector

  • Parameters

  • 変数と変数の比較演算子

コンテキストオブジェクトの形式

コンテキストオブジェクトには、ステートマシン、筐体、実行、およびタスクに関する情報が含まれています。この JSON オブジェクトにはデータ型ごとのノードが含まれ、次の形式になります。

{ "Execution": { "Id": "String", "Input": {}, "Name": "String", "RoleArn": "String", "StartTime": "Format: ISO 8601", "RedriveCount": Number, "RedriveTime": "Format: ISO 8601" }, "State": { "EnteredTime": "Format: ISO 8601", "Name": "String", "RetryCount": Number }, "StateMachine": { "Id": "String", "Name": "String" }, "Task": { "Token": "String" } }

実行中、コンテキストオブジェクトの Parameters フィールドがアクセスされた場所から関連するデータで入力されます。Parameters フィールドがタスクの状態外にある場合、Task フィールドの値は null になります。

実行をまだ redriven していない場合、RedriveCount コンテキストオブジェクトの値は 0 です。さらに、RedriveTime コンテキストオブジェクトは、実行を redriven した場合にのみ使用できます。redriven a Map Run 済みの場合、RedriveTime コンテキストオブジェクトは Standard タイプの子ワークフローでのみ使用できます。Express タイプの子ワークフローを含む redriven マップ実行では、RedriveTime は使用できません。

稼働中の実行からのコンテンツには、次の形式による仕様が含まれています。

{ "Execution": { "Id": "arn:aws:states:us-east-1:123456789012:execution:stateMachineName:executionName", "Input": { "key": "value" }, "Name": "executionName", "RoleArn": "arn:aws:iam::123456789012:role...", "StartTime": "2019-03-26T20:14:13.192Z" }, "State": { "EnteredTime": "2019-03-26T20:14:13.192Z", "Name": "Test", "RetryCount": 3 }, "StateMachine": { "Id": "arn:aws:states:us-east-1:123456789012:stateMachine:stateMachineName", "Name": "stateMachineName" }, "Task": { "Token": "h7XRiCdLtd/83p1E0dMccoxlzFhglsdkzpK9mBVKZsp7d9yrT1W" } }
注記

Map 状態に関連するコンテキストオブジェクトデータについては、マップ状態のコンテキストオブジェクトデータ を参照してください。

コンテキストオブジェクトへのアクセス

コンテキストオブジェクトにアクセスするには、パスを使用して状態の入力を選択したときと同様に、.$ を末尾に追加したパラメータ名をまず指定します。次に、入力の代わりにコンテキストオブジェクトデータにアクセスするには、$$. をパスの先頭に追加します。これは、 パスを使用してコンテキストオブジェクト内のノードを選択する AWS Step Functions ように に指示します。

次の例は、実行 ID、名前、開始時間、redrive 回数などのコンテキストオブジェクトにアクセスする方法を示しています。

実行 ARN を取得してダウンストリームサービスに渡す

このタスク状態の例は、パスを使用して実行 Amazon リソースネーム (ARN) を取得して Amazon Simple Queue Service (Amazon SQS) メッセージに渡します。

{ "Order Flight Ticket Queue": { "Type": "Task", "Resource": "arn:aws:states:::sqs:sendMessage", "Parameters": { "QueueUrl": "https://sqs.us-east-1.amazonaws.com/123456789012/flight-purchase", "MessageBody": { "From": "YVR", "To": "SEA", "Execution.$": "$$.Execution.Id" } }, "Next": "NEXT_STATE" } }

統合されたサービスの呼び出しにタスクトークンを使用する方法の詳細については、タスクトークンのコールバックまで待機する を参照してください。

パス状態で実行開始時間と名前にアクセス

{ "Comment": "Accessing context object in a state machine", "StartAt": "Get execution context data", "States": { "Get execution context data": { "Type": "Pass", "Parameters": { "startTime.$": "$$.Execution.StartTime", "execName.$": "$$.Execution.Name" }, "ResultPath": "$.executionContext", "End": true } } }

実行の redrive 回数にアクセス

以下のタスク状態定義の例は、実行の redrive 回数にアクセスする方法を示しています。

{ "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "OutputPath": "$.Payload", "Parameters": { "Payload": { "Number.$": "$$.Execution.RedriveCount" }, "FunctionName": "arn:aws:lambda:us-east-2:123456789012:function:functionName" }, "End": true }

マップ状態のコンテキストオブジェクトデータ

Map 状態を処理する際にコンテキストオブジェクトの 2 つの項目 ValueIndex を追加で使用できます。各 Map 状態の反復において、Index には現在処理中の配列項目のインデックス番号が含まれますが、Value には処理中の配列項目が含まれます。Map 状態内では、コンテキストオブジェクトに以下のデータが含まれます。

"Map": { "Item": { "Index": Number, "Value": "String" } }

これらは Map 状態でのみ使用でき、ItemSelector フィールドで指定することができます。

注記

コンテキストオブジェクトのパラメータは、ItemSelector セクションに含まれている状態内ではなく、メインの Map 状態の ItemProcessor ブロック内に定義する必要があります。

シンプルな Map 状態のステートマシンでは、コンテキストオブジェクトの情報を次のように挿入できます。

{ "StartAt": "ExampleMapState", "States": { "ExampleMapState": { "Type": "Map", "ItemSelector": { "ContextIndex.$": "$$.Map.Item.Index", "ContextValue.$": "$$.Map.Item.Value" }, "ItemProcessor": { "ProcessorConfig": { "Mode": "INLINE" }, "StartAt": "TestPass", "States": { "TestPass": { "Type": "Pass", "End": true } } }, "End": true } } }

次の入力を使用して前のステートマシンを実行すると、 IndexValue が出力に挿入されます。

[ { "who": "bob" }, { "who": "meg" }, { "who": "joe" } ]

実行の出力では、以下のように、3 回の各反復に対して Index および Value 項目の値が返されます。

[ { "ContextIndex": 0, "ContextValue": { "who": "bob" } }, { "ContextIndex": 1, "ContextValue": { "who": "meg" } }, { "ContextIndex": 2, "ContextValue": { "who": "joe" } } ]