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.
Ejemplo: Manipulación de datos de estado en flujos de trabajo de Step Functions
Este tema contiene ejemplos de cómo manipular la entrada y la salida de estado JSON mediante los OutputPath campos InputPath ResultPath, y.
Cualquier estado que no sea un estado Estado de flujo de trabajo fallido o un estado Estado de flujo de trabajo exitoso puede incluir los campos de procesamiento de entrada y salida, tales como InputPath
, ResultPath
o OutputPath
. Además, los estados Estado del flujo de trabajo de espera y Estado del flujo de trabajo de elección no admiten el campo ResultPath
. Con estos campos, puede utilizar JsonPath
También puede usar el Parameters
campo para manipular los JSON datos a medida que avanzan en el flujo de trabajo. Para obtener más información sobre del uso de Parameters
, consulte Manipule los datos de estado mediante parámetros en los flujos de trabajo de Step Functions.
Por ejemplo, comience con AWS Lambda función y máquina de estados descritas en el Creación de una máquina de estado de Step Functions que utilice Lambda tutorial. Modifique la máquina de estado de forma que incluya el siguiente InputPath
, ResultPath
y OutputPath
.
{
"Comment": "A Hello World example of the Amazon States Language using an AWS Lambda function",
"StartAt": "HelloWorld",
"States": {
"HelloWorld": {
"Type": "Task",
"Resource": "arn:aws:lambda:us-east-1:123456789012:function:HelloFunction
",
"InputPath": "$.lambda",
"ResultPath": "$.data.lambdaresult",
"OutputPath": "$.data",
"End": true
}
}
}
Inicie una ejecución utilizando la siguiente entrada.
{
"comment": "An input comment.",
"data": {
"val1": 23,
"val2": 17
},
"extra": "foo",
"lambda": {
"who": "AWS Step Functions"
}
}
Suponga que los extra
nodos comment
y se pueden descartar, pero que desea incluir el resultado de la función Lambda y conservar la información en el data
nodo.
En la máquina de estado actualizada, el estado Task
se modifica para procesar la entrada a la tarea.
"InputPath": "$.lambda",
Esta línea en la definición de la máquina de estado limita la entrada de tarea a solo el nodo lambda
de la entrada del estado. La función Lambda recibe solo el JSON objeto {"who": "AWS Step Functions"}
como entrada.
"ResultPath": "$.data.lambdaresult",
Esta ResultPath
indica a la máquina de estado que inserte el resultado de la función de Lambda en un nodo denominado lambdaresult
, como elemento secundario del nodo data
de la entrada de la máquina de estado original. Como no está realizando ninguna otra manipulación en la entrada original y en el resultado que se utilizaOutputPath
, la salida del estado ahora incluye el resultado de la función Lambda con la entrada original.
{
"comment": "An input comment.",
"data": {
"val1": 23,
"val2": 17,
"lambdaresult": "Hello, AWS Step Functions!"
},
"extra": "foo",
"lambda": {
"who": "AWS Step Functions"
}
}
Sin embargo, nuestro objetivo era preservar solo el data
nodo e incluir el resultado de la función Lambda. OutputPath
filtra todo esto combinado JSON antes de pasarlo a la salida de estado.
"OutputPath": "$.data",
Esto selecciona solo el nodo data
de la entrada original (incluido el nodo secundario lambdaresult
insertado por ResultPath
) para pasarlo a la salida. La salida del estado se filtra para mostrar lo siguiente.
{
"val1": 23,
"val2": 17,
"lambdaresult": "Hello, AWS Step Functions!"
}
En este estado Task
:
-
InputPath
envía solo el nodolambda
desde la entrada a la función de Lambda. -
ResultPath
inserta el resultado como un elemento secundario del nododata
de la entrada original. -
OutputPath
filtra la entrada del estado (que ahora incluye el resultado de la función de Lambda) de forma que solo transfiere el nododata
a la salida del estado.
ejemplo para manipular la entrada, el resultado y la salida final de la máquina de estado original mediante JsonPath
Considere la siguiente máquina de estado que verifica la identidad y la dirección de un solicitante de seguro.
nota
Para ver el ejemplo completo, consulte Cómo utilizar JSON Path in Step Functions
{ "Comment": "Sample state machine to verify an applicant's ID and address", "StartAt": "Verify info", "States": { "Verify info": { "Type": "Parallel", "End": true, "Branches": [ { "StartAt": "Verify identity", "States": { "Verify identity": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "Parameters": { "Payload.$": "$", "FunctionName": "arn:aws:lambda:us-east-2:111122223333:function:
check-identity
:$LATEST" }, "End": true } } }, { "StartAt": "Verify address", "States": { "Verify address": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "Parameters": { "Payload.$": "$", "FunctionName": "arn:aws:lambda:us-east-2:111122223333:function:check-address
:$LATEST" }, "End": true } } } ] } } }
Si ejecuta esta máquina de estado con la siguiente entrada, la ejecución producirá un error, porque las funciones de Lambda que realizan la verificación solo esperan los datos que deben verificarse como entrada. Por lo tanto, debe especificar los nodos que contienen la información que se va a verificar utilizando una herramienta adecuada JsonPath.
{ "data": { "firstname": "Jane", "lastname": "Doe", "identity": { "email": "jdoe@example.com", "ssn": "123-45-6789" }, "address": { "street": "123 Main St", "city": "Columbus", "state": "OH", "zip": "43219" }, "interests": [ { "category": "home", "type": "own", "yearBuilt": 2004 }, { "category": "boat", "type": "snowmobile", "yearBuilt": 2020 }, { "category": "auto", "type": "RV", "yearBuilt": 2015 }, ] } }
Para especificar el nodo que debe usar la función de Lambda
, utilice el campo check-identity
InputPath
de la siguiente manera:
"InputPath": "$.data.identity"
Y para especificar el nodo que debe utilizar la función de Lambda
, utilice el campo check-address
InputPath
de la siguiente manera:
"InputPath": "$.data.address"
Ahora, si desea almacenar el resultado de la verificación en la entrada original de la máquina de estado, utilice el campo ResultPath
de la siguiente manera:
"ResultPath": "$.results"
Sin embargo, si solo necesita los resultados de identidad y verificación y descarta la entrada original, utilice el campo OutputPath
de la siguiente manera:
"OutputPath": "$.results"
Para obtener más información, consulte Procesamiento de entradas y salidas en Step Functions.