Step Functions の Context オブジェクトから実行データにアクセスする - AWS Step Functions

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

Step Functions の Context オブジェクトから実行データにアクセスする

状態の管理とデータの変換

Context オブジェクトは、実行時に使用できる内部 JSON 構造であり、ステートマシンと実行に関する情報が含まれています。コンテキストは、特定の実行に関するワークフロー情報を提供します。ワークフローは、 を使用して JSONata 式の Context オブジェクトを参照できます$states.context

Context オブジェクトへのアクセス

JSONata でコンテキストオブジェクトにアクセスするには

JSONata 状態の Context オブジェクトにアクセスするには、JSONata 式$states.contextで を使用します。

{ "ExecutionID" : "{% $states.context.Execution.Id %}" }

JSONPath で Context オブジェクトにアクセスするには

JSONPath で Context オブジェクトにアクセスするには、まずキーの末尾.$に を追加して、値がパスであることを示します。次に、 値の前に を付加$$.して、コンテキストオブジェクト内のノードを選択します。

{ "ExecutionID.$": "$$.Execution.Id" }

JSONPath の状態は、次の JSONPath フィールドからコンテキスト ($$.) を参照できます。

  • InputPath

  • OutputPath

  • ItemsPath (マップ状態)

  • Variable (選択状態)

  • ResultSelector

  • Parameters

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

コンテキストオブジェクトフィールド

Context オブジェクトには、ステートマシン、状態、実行、タスクに関する情報が含まれます。Context 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" } }

実行中、コンテキストオブジェクトには関連するデータが入力されます。

場合によっては、新しいフィールドがコンテキストに追加されます。JSON コンテキストを直接処理する場合は、新しい不明なフィールドを適切に処理できるコードを作成することをお勧めします。たとえば、JSON のマーシャリング解除に Jackson ライブラリを使用する場合は、 を防ぐために falseObjectMapperFAIL_ON_UNKNOWN_PROPERTIESに設定することをお勧めしますUnrecognizedPropertyException

RedriveTime コンテキストオブジェクトは、redriven実行がある場合にのみ使用できます。redriven a Map Run 済みの場合、RedriveTime コンテキストオブジェクトは Standard タイプの子ワークフローでのみ使用できます。Express タイプの子ワークフローを含む redriven マップ実行では、RedriveTime は使用できません。

実行中の実行の内容には、次の形式の仕様が含まれます。

{ "Execution": { "Id": "arn:aws:states:region:123456789012:execution:stateMachineName:executionName", "Input": { "key": "value" }, "Name": "executionName", "RoleArn": "arn:aws:iam::123456789012:role...", "StartTime": "2025-08-27T10:04:42Z" }, "State": { "EnteredTime": "2025-08-27T10:04:42.001Z", "Name": "Test", "RetryCount": 3 }, "StateMachine": { "Id": "arn:aws:states:region:123456789012:stateMachine:stateMachineName", "Name": "stateMachineName" }, "Task": { "Token": "h7XRiCdLtd/83p1E0dMccoxlzFhglsdkzpK9mBVKZsp7d9yrT1W" } }
小数秒を含むタイムスタンプ形式

Step Functions は ISO8601 仕様に従います。この仕様では、出力は必要に応じて 0、3、6、または 9 桁にすることができます。タイムスタンプの小数秒がゼロの場合、Step Functions は出力をパディングするのではなく、末尾のゼロを削除します。

Step Functions タイムスタンプを使用するコードを作成する場合、コードは可変数の小数秒を処理できる必要があります。

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

状態の管理とデータの変換

Map 状態を処理する場合、コンテキストには IndexValue、および も含まれますSource

Map 状態イテレーションごとに、 Indexには現在処理中の配列項目のインデックス番号が含まれ、 には処理中の配列項目Valueが含まれ、InputType は CSV、、JSONJSONL、または SourceになりますPARQUET

Map 状態内では、コンテキストオブジェクトには次のデータが含まれます。

"Map": { "Item": { "Index" : Number, "Key" : "String", // Only valid for JSON objects "Value" : "String", "Source": "String" } }

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

注記

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

JSONPath Map状態を使用するステートマシンを指定すると、次のように Context オブジェクトから情報を挿入できます。

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

JSONata の場合、 $states.context変数から追加のマップ状態コンテキスト情報にアクセスできます。

{ "StartAt": "ExampleMapState", "States": { "ExampleMapState": { "Type": "Map", "ItemSelector": { "ContextIndex": "{% $states.context.Map.Item.Index %}", "ContextValue": "{% $states.context.Map.Item.Value %}", "ContextSource": "{% $states.context.Map.Item.Source %}" }, "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" }, "ContextSource" : "STATE_DATA" }, { "ContextIndex": 1, "ContextValue": { "who": "meg" }, "ContextSource" : "STATE_DATA" }, { "ContextIndex": 2, "ContextValue": { "who": "joe" }, "ContextSource" : "STATE_DATA" } ]

$states.context.Map.Item.Source は次のいずれかになることに注意してください。

  • 状態入力の場合、値は になります。 STATE_DATA

  • Amazon S3 LIST_OBJECTS_V2 が の場合Transformation=NONE、 値はバケットの S3 URI を表示します。例: S3://bucket-name

  • 他のすべての入力タイプでは、値は Amazon S3 URI になります。例: S3://bucket-name/object-key