Acessar dados de execução do objeto de contexto no Step Functions - AWS Step Functions

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Acessar dados de execução do objeto de contexto no Step Functions

Gerenciar estados e transformar dados

O objeto de contexto é uma estrutura JSON interna que está disponível durante uma execução e contém informações sobre sua máquina de estado e execução. O contexto fornece aos seus fluxos de trabalho informações sobre sua execução específica. Os fluxos de trabalho podem referenciar o objeto de contexto em uma expressão JSONata com $states.context.

Acessar o objeto de contexto

Como acessar o objeto de contexto no JSONata

Para acessar o objeto de contexto em estados JSONata, use $states.context em uma expressão JSONata.

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

Como acessar o objeto de contexto no JSONPath

Para acessar o objeto de contexto no JSONPath, primeiro você acrescenta .$ ao final da chave para indicar que o valor é um caminho. Em seguida, acrescente o valor $$. para selecionar um nó no objeto de contexto.

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

Os estados do JSONPath podem se referir ao contexto ($$.) dos seguintes campos do JSONPath:

  • InputPath

  • OutputPath

  • ItemsPath (em estados Mapa)

  • Variable (em estados Escolha)

  • ResultSelector

  • Parameters

  • Operadores de comparação de variável para variável

Campos de objeto de contexto

O objeto de contexto inclui informações sobre a máquina de estado, o estado, a execução e a tarefa. O objeto de contexto JSON inclui nós para cada tipo de dados no seguinte formato:

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

Durante uma execução, o objeto de contexto é preenchido com dados relevantes para o campo.

Ocasionalmente, novos campos são adicionados ao contexto. Se estiver processando o contexto JSON diretamente, recomendamos criar um código que possa manipular facilmente novos campos desconhecidos. Por exemplo, se estiver usando a biblioteca Jackson para desempacotar o JSON, recomendamos definir FAIL_ON_UNKNOWN_PROPERTIES como false em seu ObjectMapper para evitar um UnrecognizedPropertyException.

O objeto de contexto RedriveTime só estará disponível se você tiver redriven uma execução. Se você tiver redriven a Map Run, o objeto de contexto RedriveTime só estará disponível para fluxos de trabalho secundários do tipo Padrão. Para uma Execução de mapa redriven com fluxos de trabalho secundários do tipo Express, RedriveTime não está disponível.

O conteúdo de uma execução que está em andamento inclui informações específicas no formato abaixo:

{ "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" } }
Formato de carimbo de data/hora com segundos fracionários

O Step Functions segue a especificação ISO8601, que afirma que a saída pode ser de zero, três, seis ou nove dígitos, conforme necessário. Quando um carimbo de data/hora tem zero segundos fracionários, o Step Functions remove os zeros à direita em vez de preencher a saída.

Se você criar um código que consuma carimbos de data/hora do Step Functions, seu código deverá conseguir processar um número variável de segundos fracionários.

Dados de objeto de contexto para estados de mapa

Gerenciar estados e transformar dados

Ao processar um estado Map, o contexto também conterá Index, Value e Source.

Para cada iteração do estado Map, Index contém o número do índice do item da matriz em processamento, Value contém o item da matriz em processamento e Source será o InputType de CSV, JSON, JSONL ou PARQUET.

Em um estado Map, o objeto de contexto inclui os seguintes dados:

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

Eles estão disponíveis somente em um estado Map e podem ser especificados no campo ItemSelector (mapa).

nota

Você deve definir parâmetros do objeto de contexto no bloco ItemSelector do estado Map principal, não nos estados incluídos na seção ItemProcessor.

Se uma máquina de estado está usando um estado Map em JSONPath, você pode injetar informações do objeto de contexto como mostrado a seguir.

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

Em JSONata, as informações adicionais do contexto do estado do mapa podem ser acessadas na variável $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 } } }

Se você executar a máquina de estado anterior com a entrada a seguir, Index e Value serão inseridos na saída.

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

A saída da execução retorna os valores dos itens Index e Value de cada uma das três iterações, da seguinte forma:

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

Observe que $states.context.Map.Item.Source será um dos seguintes:

  • Na entrada de estado, o valor será: STATE_DATA

  • Para Amazon S3 LIST_OBJECTS_V2 com Transformation=NONE, o valor mostrará o URI do S3 para o bucket. Por exemplo: S3://bucket-name.

  • Para todos os outros tipos de entrada, o valor será o URI do Amazon S3. Por exemplo: S3://bucket-name/object-key.