Objeto Context - 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

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 estado 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 estados de mapa)

  • Variable(en estados Choice)

  • ResultSelector

  • Operadores de comparación de variables a 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": {}, "StartTime": "Format: ISO 8601" }, "State": { "EnteredTime": "Format: ISO 8601", "Name": "String", "RetryCount": Number }, "StateMachine": { "Id": "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 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": "name" }, "Task": { "Token": "h7XRiCdLtd/83p1E0dMccoxlzFhglsdkzpK9mBVKZsp7d9yrT1W" } }
nota

Para obtener información sobre los datos de objetos context relacionados con los estados Map, consulte Datos del objeto context 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 le indica a AWS Step Functions que utilice la ruta para seleccionar un nodo en el objeto de contexto.

En este estado de tarea de ejemplo se utiliza una ruta para recuperar y transferir 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" } }
nota

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.

Datos del objeto context para los estados Map

Existen dos elementos adicionales disponibles en el objeto context al procesar un estado Map: Index y Value. Index contiene el número de índice del elemento de la matriz que se está procesando en la iteración actual. Dentro de un estado Map, el objeto context incluye lo siguiente.

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

Solo están disponibles en un estado Map y se pueden especificar en e campo Parameters, antes de la sección Iterator.

nota

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

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", "Parameters": { "ContextIndex.$": "$$.Map.Item.Index", "ContextValue.$": "$$.Map.Item.Value" }, "Iterator": { "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 es el siguiente.

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