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 JSON estructura 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 JSON objeto incluye nodos para cada tipo de datos y tiene 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 RedriveCount
contexto es 0, si aún no lo ha hecho redrivenuna ejecución. Además, el objeto de RedriveTime
contexto solo está disponible si tienes redriven una ejecución. Si tienes redriven a Map Run, el objeto de RedriveTime
contexto 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 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 redrive contar.
Recupera y transfiere la ejecución ARN a un servicio descendente
Este ejemplo de estado de tarea utiliza una ruta para recuperar y pasar la ejecución Amazon Resource Name (ARN) a un mensaje de Amazon Simple Queue Service (AmazonSQS).
{
"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 Espera a que te devuelvan la 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 } } }
Acceda al redrive recuento de una ejecución
El siguiente ejemplo de una definición de estado de tarea muestra cómo se puede acceder al redriverecuento 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 (Mapa)
.
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"
}
}
]