Tutorial 8: Depurar errores en la consola - 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.

Tutorial 8: Depurar errores en la consola

Al trabajar con Step Functions, es posible que se produzcan errores de tiempo de ejecución por motivos como los siguientes:

  • Una ruta JSON no válida para el campo Variable en el estado Choice.

  • Problema de definición de la máquina de estado, por ejemplo, no se ha definido ninguna regla de correspondencia para un estado Choice.

  • Expresiones de ruta JSON no válidas al aplicar filtros para manipular la entrada y la salida.

  • Fallos en las tareas debido a una excepción de la función de Lambda.

  • Errores de permiso de IAM.

En este tutorial, aprenderá a depurar algunos de estos errores mediante la consola de Step Functions. Para obtener más información, consulte Control de errores en Step Functions.

Depuración de la ruta no válida: error de elección de estado

Si especifica una ruta JSON incorrecta o irresoluble en el campo Variable del estado Choice o no define una regla coincidente en el estado Choice, recibe un error al ejecutar el flujo de trabajo.

Para ilustrar el error de ruta no válida, en este tutorial se presenta un error de estado Choice en el flujo de trabajo. Utilizará la máquina de estado CreditCardWorkflow y editará su definición para introducir el error.

  1. Abra la consola de Step Functions y elija Crear la máquina de estado CreditCardWorkflow.

  2. Seleccione Editar para editar la definición de la máquina de estado. Realice el cambio resaltado en el siguiente código en la definición de su máquina de estado.

    { "Comment": "A description of my state machine", "StartAt": "Get credit limit", "States": { "Get credit limit": { ... ... }, "Credit applied >= 5000?": { "Type": "Choice", "Choices": [ { "Variable": "$.Payload", "NumericLessThan": 5000, "Next": "Auto-approve limit" }, { "Variable": "$.Payload", "NumericGreaterThanEquals": 5000, "Next": "Wait for human approval" } ], "Default": "Wait for human approval" }, ... ... } }
  3. Seleccione Guardar y, a continuación, seleccione Guardar de todos modos.

  4. Ejecutar la máquina de estado.

  5. En la página de detalles de ejecución de la máquina de estado, lleve a cabo alguna de las siguientes operaciones:

    1. Seleccione Causa en el mensaje de error para ver el motivo del error de ejecución.

    2. Seleccione Mostrar detalles de pasos en el mensaje de error para ver el paso que provocó el error.

  6. En la pestaña Entrada y salida de la sección Detalles de pasos, pulse el botón de alternancia de Vista avanzada para ver la ruta de transferencia de datos de entrada y salida de un estado seleccionado.

  7. En Vista gráfica, asegúrese de que se seleccione ¿Crédito aplicado >= 5000? y proceda del modo siguiente:

    1. Vea el valor de entrada del estado en el cuadro Entrada.

    2. Seleccione la pestaña Definición y observe la ruta JSON especificada para el campo Variable.

      El valor de entrada del estado Credit applied >= 5000? es un valor numérico, mientras que ha especificado la ruta JSON para el valor de entrada como $.Payload. Durante la ejecución de la máquina de estado, el estado Choice no puede resolver esta ruta JSON porque no existe.

  8. Edite la máquina de estado para especificar el valor del campo Variable como$.

    { "Comment": "A description of my state machine", "StartAt": "Get credit limit", "States": { "Get credit limit": { ... ... }, "Credit applied >= 5000?": { "Type": "Choice", "Choices": [ { "Variable": "$", "NumericLessThan": 5000, "Next": "Auto-approve limit" }, { "Variable": "$", "NumericGreaterThanEquals": 5000, "Next": "Wait for human approval" } ], "Default": "Wait for human approval" }, ... ... } }

Depurar los errores de expresión de la ruta JSON al aplicar filtros de entrada y salida

Mientras trabaja con los filtros de entrada y salida, es posible que se produzcan errores de tiempo de ejecución debido a la especificación de expresiones de ruta JSON no válidas.

En el siguiente ejemplo, se utiliza la máquina de estado WorkflowInputOutput creado en el Tutorial 5 y se muestra un escenario en el que se utiliza el filtro ResultSelector para seleccionar partes del resultado de la tarea.

  1. Aplique el filtro ResultSelector para elegir una parte del resultado de la tarea para el paso Verificar identidad. Para ello, edite la definición de la máquina de estado de la siguiente manera:

    { "StartAt": "Verify identity", "States": { "Verify identity": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "Parameters": { "FunctionName": "arn:aws:lambda:us-east-2:123456789012:function:check-identity", "Payload": { "email": "jdoe@example.com", "ssn": "123-45-6789" } }, ... ... "ResultSelector": { "identity.$": "$.Payload.body.message" }", "End": true } } }
  2. Ejecutar la máquina de estado.

  3. En la página de detalles de ejecución de la máquina de estado, lleve a cabo las siguientes operaciones:

    1. Seleccione Causa en el mensaje de error para ver el motivo del error de ejecución.

    2. Seleccione Mostrar detalles de pasos en el mensaje de error para ver el paso que provocó el error.

  4. En el mensaje de error, tenga en cuenta que el contenido del nodo $.Payload.body es una cadena JSON de escape. El error se ha producido porque no se puede hacer referencia a una cadena mediante la notación de ruta JSON.

  5. Para hacer referencia al nodo $.payload.BODY.MESSAGE, haga lo siguiente:

    1. Utilice la función intrínseca States.StringToJSON para convertir primero la cadena a un formato JSON.

    2. Especifique la ruta JSON para el nodo $.Payload.body.message dentro de la función intrínseca.

      "ResultSelector": { "identity.$":"States.StringToJson($.Payload.body.message)" }
  6. Ejecute de nuevo la máquina de estado.