Acessando dados de execução do objeto Context em 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á.

Acessando dados de execução do objeto Context em Step Functions

Gerenciando o estado e transformando dados

O objeto Context é 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. Seus fluxos de trabalho podem referenciar o objeto Context em uma JSONata expressão com$states.context.

Acessando o objeto Context

Para acessar o objeto Context em JSONata

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

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

Para acessar o objeto Context em JSONPath

Para acessar o objeto Context em 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 Context.

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

JSONPath os estados podem se referir ao contexto ($$.) nos seguintes JSONPath campos:

  • InputPath

  • OutputPath

  • ItemsPath (em estados Mapa)

  • Variable (em estados Escolha)

  • ResultSelector

  • Parameters

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

Campos de objetos de contexto

O objeto Context inclui informações sobre a máquina de estado, o estado, a execução e a tarefa. O objeto JSON de contexto 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 Context é preenchido com dados relevantes.

Ocasionalmente, novos campos são adicionados ao contexto. Se você 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 JSON, recomendamos definir como false em sua FAIL_ON_UNKNOWN_PROPERTIES ObjectMapper para evitar um. UnrecognizedPropertyException

RedriveTimeO objeto de contexto só está 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 em execução inclui detalhes específicos no seguinte formato:

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

Step Functions segue a especificação ISO86 01, que afirma que a saída pode ser de zero, três, seis ou nove dígitos, conforme necessário. Quando um timestamp 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 timestamps do Step Functions, seu código deverá ser capaz de processar um número variável de segundos fracionários.

Dados do objeto de contexto para estados do mapa

Gerenciando o estado e transformando dados

Ao processar um Mapestado, o contexto também conterá IndexValue, Source e.

Para cada iteração de Map estado, Index contém o número do índice do item da matriz que está sendo processado atualmente, Value contém o item da matriz que está sendo processado e Source será o InputType deCSV, JSONJSONL, ouPARQUET.

Em um Map estado, o objeto Context 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 Context no ItemSelector bloco do Map estado principal, não dentro dos estados incluídos na ItemProcessor seção.

Dada uma máquina de estado usando um JSONPathMapestado, você pode injetar informações do objeto Context da seguinte maneira.

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

Para JSONata, as informações adicionais do contexto do estado do mapa podem ser acessadas a partir da $states.context variável:

{ "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á uma das seguintes:

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

  • Para Amazon S3 LIST_OBJECTS_V2 withTransformation=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.