Configurar las entradas y salidas del flujo de trabajo en Step Functions - 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.

Configurar las entradas y salidas del flujo de trabajo en Step Functions

En el tema anteriorEjecutar el flujo de trabajo , aprendió a ejecutar su flujo de trabajo. En este tema, aprenderá a seleccionar, filtrar y manipular los datos a medida que pasan de un estado a otro.

Una ejecución de Step Functions recibe JSON texto como entrada y pasa esa entrada al primer estado del flujo de trabajo. Los estados individuales de un flujo de trabajo reciben JSON datos como entrada y, por lo general, JSON los pasan como salida al siguiente estado. De forma predeterminada, los datos pasan de un estado al siguiente del flujo de trabajo, a menos que haya configurado la entrada o la salida. Comprender cómo fluye esta información de un estado a otro y aprender a filtrar y manipular estos datos resulta esencial para diseñar e implementar de forma eficaz los flujos de trabajo en Step Functions.

Step Functions proporciona los siguientes filtros para controlar el flujo de datos de entrada y salida entre estados:

nota

Según el caso de uso, es posible que no necesite aplicar todos estos filtros en los flujos de trabajo.

InputPath

Selecciona WHATuna parte de toda la carga útil de entrada para utilizarla como entrada de una tarea. Si especifica este campo, Step Functions lo aplicará en primer lugar.

Parámetros

Especifica HOWel aspecto que debe tener la entrada antes de invocar la tarea. Con el Parameters campo, puede crear una colección de pares clave-valor que se pasan como entrada a un Servicio de AWS integración, como una AWS Lambda función. Estos valores pueden ser estáticos o seleccionarse dinámicamente desde la entrada de estado o desde el objeto de contexto del flujo de trabajo.

ResultSelector

Determina WHATelegir entre los resultados de una tarea. Con el campo ResultSelector puede crear una colección de pares clave-valor que sustituyan el resultado de un estado y que pasen esa colección a ResultPath.

Especificar la salida de estado mediante los flujos ResultPath de trabajo de Step Functions

Determina si WHEREse debe colocar el resultado de una tarea. Utilice ResultPath para determinar si la salida de un estado es una copia de su entrada, el resultado que produce o una combinación de ambos.

Filtrar el estado de salida mediante flujos OutputPath de trabajo de Step Functions

Determina WHATenviar al siguiente estado. Con OutputPath él, puede filtrar la información no deseada y transferir solo la parte de JSON los datos que le interesa.

sugerencia

ResultSelectorLos filtros Parameters y funcionan construyendoJSON, mientras que los OutputPath filtros InputPath y filtran nodos específicos dentro de un objeto de JSON datos, y el ResultPath filtro crea un campo en el que se puede añadir la salida.

Para obtener más información acerca de la configuración de entrada y salida en los flujos de trabajo, consulte Procesamiento de entradas y salidas en Step Functions.

Seleccione partes específicas de la entrada sin procesar mediante el filtro InputPath

Utilice el filtro InputPath para seleccionar una parte específica de la carga útil de entrada.

Si no especifica InputPath, su valor predeterminado es $, lo que hace que la tarea del estado se refiera a toda la entrada sin procesar en lugar de a una parte específica.

Paso 1: Crear una máquina de estado

importante

Asegúrese de que su máquina de estados esté debajo de la misma AWS cuenta y región como la función Lambda que creó anteriormente.

  1. Utilice el ejemplo de estado Parallel aprendido en el Tutorial 4 para crear una nueva máquina de estado. Asegúrese de que el prototipo de flujo de trabajo se parezca al siguiente prototipo.

  2. Configure las integraciones para las funciones de lambda check-identity y check-address. Para obtener información sobre la creación de las funciones de Lambda y su uso en la máquina de estado, consulte Paso 1: Crear las funciones de Lambda para realizar las comprobaciones necesarias y Paso 2: Actualizar el flujo de trabajo: añadir tareas paralelas a realizar.

  3. Para Carga, asegúrese de mantener la selección predeterminada de Usar entrada de estado como carga.

  4. Seleccione Siguiente y, a continuación, realice los pasos del 1 a 3 en Paso 1: Guardar la máquina de estado del Tutorial 5 para crear una nueva máquina de estado. Para este tutorial, asigne a su máquina de estado el nombre WorkflowInputOutput.

Paso 2: Ejecutar la máquina de estado

  1. En la WorkflowInputOutputpágina, elija Iniciar ejecución.

  2. (Opcional) Introduzca un nombre de ejecución personalizado para anular el valor predeterminado generado.

    ASCIINombres no identificables y registro

    Step Functions acepta nombres para máquinas de estados, ejecuciones, actividades y etiquetas que no contengan ASCII caracteres. Como estos personajes no funcionan con Amazon CloudWatch, te recomendamos que utilices solo ASCII caracteres para poder hacer un seguimiento de las métricas CloudWatch.

  3. En el área de entrada, añade los siguientes JSON datos como entrada de ejecución.

    { "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" } } }
  4. Seleccione Iniciar ejecución.

  5. La ejecución de la máquina de estado produce un error porque no ha especificado qué partes de la ejecución deben utilizar la entrada check-identity y las funciones de Lambda check-address para realizar la verificación de identidad y dirección requerida.

  6. Continúe con el paso 3 de este tutorial para corregir el error.

Paso 3: Utilizar el filtro InputPath para seleccionar partes específicas de una entrada de ejecución

  1. En la página Detalle de ejecución, seleccione Editar máquina de estado.

  2. Para verificar la identidad del solicitante tal como se menciona en la entrada de ejecución proporcionada enPaso 2: Ejecutar la máquina de estado, edite la definición de la tarea de verificación de identidad de la siguiente manera:

    ... { "StartAt": "Verify identity", "States": { "Verify identity": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "InputPath": "$.data.identity", "Parameters": { "Payload.$": "$", "FunctionName": "arn:aws:lambda:us-east-2:123456789012:function:check-identity:$LATEST" }, "End": true } } } ...

    En consecuencia, los siguientes JSON datos pasan a estar disponibles como entrada para la check-identity función.

    { "email": "jdoe@example.com", "ssn": "123-45-6789" }
  3. Para verificar la dirección del solicitante mencionada en la entrada de ejecución, edite la definición de la tarea Verify address del siguiente modo:

    ... { "StartAt": "Verify address", "States": { "Verify address": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "InputPath": "$.data.address", "Parameters": { "Payload.$": "$", "FunctionName": "arn:aws:lambda:us-east-1:123456789012:function:check-address:$LATEST" }, "End": true } } } ...

    En consecuencia, los siguientes JSON datos pasan a estar disponibles como entrada para la check-address función.

    { "street": "123 Main St", "city": "Columbus", "state": "OH", "zip": "43219" }
  4. Seleccione Iniciar ejecución. La ejecución de la máquina de estado ahora se completa correctamente.

Manipular la entrada seleccionada mediante el filtro Parámetros

Si bien el InputPath filtro le ayuda a limitar la JSON entrada sin procesar que proporciona, con el Parameters filtro puede pasar una colección de pares clave-valor como entrada. Estos pares clave-valor pueden ser valores estáticos definidos en la definición de la máquina de estado o valores seleccionados de la entrada bruta mediante InputPath.

En sus flujos de trabajo, se aplican Parameters después de InputPath. Parameters ayuda a especificar cómo la tarea subyacente acepta su carga útil de entrada. Por ejemplo, si la función check-address Lambda acepta un parámetro de cadena como entrada en lugar de los JSON datos, puede utilizar el Parameters filtro para transformar la entrada.

En el siguiente ejemplo, el filtro Parameters recibe la entrada que ha seleccionado InputPath en Paso 3: Utilizar el filtro InputPath para seleccionar partes específicas de una entrada de ejecución y aplica la función intrínseca States.Format a los elementos de entrada para crear una cadena llamada addressString. Las funciones intrínsecas le ayudan a realizar operaciones básicas de procesamiento de datos en una entrada determinada. Para obtener más información, consulte Funciones intrínsecas en Amazon States Language para los flujos de trabajo de Step Functions.

"Parameters": { "addressString.$": "States.Format('{}. {}, {} - {}', $.street, $.city, $.state, $.zip)" }

En consecuencia, se crea la siguiente cadena y se proporciona a la función de Lambda check-address como entrada.

{ "addressString": "123 Main St. Columbus, OH - 43219" }

Configure la salida mediante los ResultSelector filtros ResultPath, y OutputPath

Cuando se invoca la función check-address Lambda en la máquina de WorkflowInputOutputestados, la función devuelve una carga útil de salida después de realizar la verificación de la dirección. En la página de Detalles de la ejecución, elija el paso Verificar dirección y vea la carga útil de salida dentro de Resultado de la tarea en el panel Detalles del paso.

{ "ExecutedVersion": "$LATEST", "Payload": { "statusCode": 200, "body": "{\"approved\":true,\"message\":\"identity validation passed\"}" }, "SdkHttpMetadata": { "AllHttpHeaders": { "X-Amz-Executed-Version": [ "$LATEST" ], ... ... "StatusCode": 200 }

Usando ResultSelector

Si necesita proporcionar el resultado de las comprobaciones de identidad y dirección a los siguientes estados de su flujo de trabajo, puede seleccionar el nodo Payload.body en la salida JSON y utilizar la función StringToJson intrínseca del ResultSelector filtro para formatear los datos según sea necesario.

ResultSelector selecciona lo que se necesita del resultado de la tarea. En el ejemplo siguiente, ResultSelector toma la cadena de $.PAYLOAD.BODY, aplica la función States.StringToJson intrínseca para convertir la cadena y coloca el resultado dentro del nodo de identidadJSON. JSON

"ResultSelector": { "identity.$": "States.StringToJson($.Payload.body)" }

En consecuencia, se crean los siguientes datos. JSON

{ "identity": { "approved": true, "message": "Identity validation passed" } }

Al trabajar con estos filtros de entrada y salida, es posible que se produzcan errores de tiempo de ejecución a causa de JSONpath expresiones no válidas.

Usando ResultPath

Puede especificar una ubicación en la carga útil de entrada inicial para guardar el resultado del procesamiento de tareas de un estado mediante el campo ResultPath. Si no especifica ResultPath, su valor predeterminado es $, lo que hace que la carga útil de entrada inicial se sustituya por el resultado sin procesar de la tarea. Si especifica ResultPath como null, el resultado sin procesar se descarta y la carga útil de entrada inicial pasa a ser la salida efectiva.

Si aplica el ResultPath campo a los JSON datos creados con el ResultSelector campo, el resultado de la tarea se añade dentro del nodo de resultados de la carga útil de entrada, como se muestra en el siguiente ejemplo:

{ "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" }, "results": { "identity": { "approved": true } } }

Usando OutputPath

Puede seleccionar una parte de la salida de estado después de la aplicación de ResultPath para pasar al siguiente estado. Con este enfoque, puede filtrar la información no deseada y transmitir solo la parte JSON que necesita.

En el siguiente ejemplo, el campo OutputPath guarda la salida de estado dentro del nodo de resultados: "OutputPath": "$.results". De este modo, el resultado final del estado, que puede pasar al siguiente estado, es el siguiente:

{ "addressResult": { "approved": true, "message": "address validation passed" }, "identityResult": { "approved": true, "message": "identity validation passed" } }

Utilizar las características de la consola para visualizar los flujos de datos de entrada y salida

Puede visualizar el flujo de datos de entrada y salida entre los estados de los flujos de trabajo mediante el simulador de flujos de datos de la consola de Step Functions o la opción de vista avanzada de la página Detalles de ejecución.

Manipule la entrada seleccionada mediante el campo Parámetros

Si bien el InputPath campo le ayuda a limitar la JSON entrada sin procesar que proporciona, con el Parameters campo puede pasar una colección de pares clave-valor como entrada. Estos pares clave-valor pueden ser valores estáticos definidos en la definición de la máquina de estado o valores seleccionados de la entrada bruta mediante InputPath.

En sus flujos de trabajo, Parameters se aplican después. InputPath Parametersle ayudan a especificar cómo la tarea subyacente acepta su carga útil de entrada. Por ejemplo, imagine que si la función check-address Lambda acepta un parámetro de cadena como entrada en lugar de los JSON datos, puede utilizar el Parameters campo para transformar la entrada.

En el siguiente ejemplo, el Parameters campo recibe la entrada que seleccionó utilizando InputPath en la Seleccione partes específicas de la entrada sin procesar mediante el filtro InputPath sección y aplica la States.Format función intrínseca a los elementos de entrada para crear una cadena llamadaaddressString. Las funciones intrínsecas le ayudan a realizar operaciones básicas de procesamiento de datos en una entrada determinada. Para obtener más información, consulte Funciones intrínsecas.

"Parameters": { "addressString.$": "States.Format('{}. {}, {} - {}', $.street, $.city, $.state, $.zip)" }

En consecuencia, se crea la siguiente cadena y se proporciona a la función Lambda de dirección de verificación como entrada.

nota

Si actualiza la entrada con este ejemplo y ejecuta la máquina de estados, devolverá un error porque la función Lambda no acepta la entrada en el formato actualizado.

{ "addressString.$": "123 Main St. Columbus, OH - 43219" }

Siguientes pasos

En el último temaDepurar errores, aprenderás a depurar errores en tus flujos de trabajo de Step Functions.