Objeto Context (Contexto) - AWS Step Functions

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Objeto Context (Contexto)

El objeto de contexto es una estructura JSON interna que está disponible durante una ejecución y contiene información sobre la máquina de estados y la ejecución. Esto permite a sus flujos de trabajo acceder a la información acerca de su ejecución específica. Puede acceder al objeto de contexto desde los siguientes campos:

  • InputPath

  • OutputPath

  • ItemsPath (en los estados Map)

  • Variable (en los estados Choice)

  • ResultSelector

  • Parameters

  • Operadores de comparación entre variables

Formato de objetos de contexto

El objeto de contexto incluye información acerca de la máquina de estado, el estado, la ejecución y la tarea. Este objeto JSON incluye nodos para cada tipo de datos y se encuentra en el siguiente 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 una ejecución, el objeto de contexto se rellena con datos relevantes para el campo Parameters desde donde se accede. El valor de un campo Task es nulo si el campo Parameters se encuentra fuera de un estado de tarea.

El valor del objeto de contexto RedriveCount es 0 si aún no ha realizado redriven con una ejecución. Además, el objeto de contexto RedriveTime solo está disponible si se tiene una ejecución redriven. Si ha utilizado redriven a Map Run, el objeto de contexto RedriveTime solo está disponible para los flujos de trabajo secundarios de tipo estándar. Para un redriven Map Run con flujos de trabajo secundarios de tipo Express, RedriveTime no está disponible.

El contenido de una ejecución en curso incluye información detallada en el siguiente formato.

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

Para obtener información sobre los datos de objetos context relacionados con los estados Map, consulte Datos del objeto de contexto para los estados Map.

Acceso al objeto de contexto

Para obtener acceso al contexto objeto, especifique en primer lugar el nombre del parámetro añadiendo .$ al final, de la misma forma que cuando selecciona la entrada del estado con una ruta. A continuación, para obtener acceso a datos de objetos de contexto en lugar de la entrada, anexe la ruta con $$.. Esto indica AWS Step Functions que debes usar la ruta para seleccionar un nodo en el objeto de contexto.

Los siguientes ejemplos muestran cómo se puede acceder a los objetos de contexto, como el identificador de ejecución, el nombre, la hora de inicio y el recuento de redrive.

Recuperación y transferencia del ARN de ejecución a un servicio descendente

Este estado de tarea de ejemplo utiliza una ruta para retirar y pasar el nombre de recurso de Amazon (ARN) de ejecución a un mensaje de 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" } }

Para obtener más información acerca de cómo utilizar el token de tarea al llamar a un servicio integrado, consulte Cómo esperar una devolución de llamada con el token de tarea.

Acceso a la hora y el nombre de inicio de la ejecución en un estado Pass

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

Acceso al recuento de redrive de una ejecución

El siguiente ejemplo de definición de un estado de tarea muestra cómo se puede acceder al recuento de redrive de una ejecución.

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

Datos del objeto de contexto para los estados Map

Existen dos elementos adicionales disponibles en el objeto context al procesar un estado Map: Index y Value. Para cada iteración del estado Map, Index contiene el número de índice del elemento de matriz que se está procesando actualmente, mientras que Value contiene el elemento de matriz que se está procesando. Dentro de un estado Map, el objeto context incluye los datos siguientes:

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

Solo están disponibles en un estado Map y se pueden especificar en el campo ItemSelector.

nota

Debe definir parámetros desde el objeto context en el bloque ItemSelector del estado Map principal, no dentro de los estados incluidos en la sección ItemProcessor.

Dada una máquina de estado con un estado Map sencillo, podemos inyectar información del objeto context de la siguiente manera.

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

Si ejecuta la máquina de estado anterior con la siguiente entrada, Index y Value se insertan en la salida.

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

El resultado de la ejecución devuelve los valores de los elementos Index y Value de cada una de las tres iteraciones de la siguiente manera:

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