Tratar condições de erro em uma máquina de estado do Step Functions
Neste tutorial, você cria uma máquina de estado do AWS Step Functions com um estado de tarefa que invoca um exemplo de função do Lambda criada para gerar um erro personalizado.
As tarefas são um dos Estados de fallback para os quais é possível configurar um campo Catch. Quando os erros são recebidos pela integração, as etapas seguintes são escolhidas pelo campo Catch com base no nome do erro.
Etapa 1: Criar uma função do Lambda que gera um erro
Use uma função do Lambda para simular uma condição de erro.
-
Abra o console do AWS Lambda em https://console.aws.amazon.com/lambda/
. -
Escolha Create function.
-
Selecione Usar um esquema, pesquise por
Step Functionse clique em Lançar um erro personalizado. -
Em Function name (Nome da função), insira
ThrowErrorFunction. -
Em Role (Função), escolha Create a new role with basic Lambda permissions (Criar uma nova função com permissões básicas do Lambda).
-
Escolha a opção Criar função.
O código a seguir deve ser exibido no painel de código.
export const handler = async () => { function CustomError(message) { this.name = 'CustomError'; this.message = message; } CustomError.prototype = new Error(); throw new CustomError('This is a custom error!'); };
Etapa 2: testar sua função do Lambda
Antes de criar uma máquina de estado, verifique se sua função do Lambda lança CustomError quando invocada.
-
Selecione a guia Testar.
-
Selecione Criar um novo evento e mantenha o JSON do evento padrão.
-
Selecione Testar para invocar a função com o evento de teste.
-
Expanda a função Executando para revisar os detalhes do erro gerado.
Agora você tem uma função do Lambda pronta para gerar um erro personalizado.
Na próxima etapa, você configurará uma máquina de estado para capturar e tentar novamente esse erro.
Etapa 3: Criar sua máquina de estado
Use o console do Step Functions para criar uma máquina de estado que use um Estado de tarefa do fluxo de trabalho com uma configuração Catch. A máquina de estado invocará a função do Lambda criada para simular um erro ao invocar a função. O Step Functions tenta executar a função novamente usando recuo exponencial entre novas tentativas.
-
Abra o console do Step Functions
. No menu, selecione Máquinas de estado e, em seguida, selecione Criar máquina de estado. -
Selecione Criar do zero e em Nome da máquina de estado, insira
CatchErrorStateMachine. -
Aceite o tipo padrão (Padrão) e clique em Continuar para editar sua máquina de estado no Workflow Studio.
-
Selecione Código para alternar para o editor ASL e substitua o código pela seguinte definição de máquina de estado:
{ "Comment": "Example state machine that can catch a custom error thrown by a function integration.", "StartAt": "CreateAccount", "States": { "CreateAccount": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "Output": "{% $states.result.Payload %}", "Arguments": { "FunctionName": "arn:aws:lambda:region:account-id:function:ThrowErrorFunction:$LATEST", "Payload": "{% $states.input %}" }, "Catch": [ { "ErrorEquals": [ "CustomError" ], "Next": "CustomErrorFallback" }, { "ErrorEquals": [ "States.ALL" ], "Next": "CatchAllFallback" } ], "End": true, "Retry": [ { "ErrorEquals": [ "CustomError", "Lambda.ServiceException", "Lambda.AWSLambdaException", "Lambda.SdkClientException", "Lambda.TooManyRequestsException" ], "IntervalSeconds": 1, "MaxAttempts": 3, "BackoffRate": 2, "JitterStrategy": "FULL" } ] }, "CustomErrorFallback": { "Type": "Pass", "End": true, "Output": { "Result": "Fallback from a custom error function." } }, "CatchAllFallback": { "Type": "Pass", "End": true, "Output": { "Result": "Fallback from all other error codes." } } }, "QueryLanguage": "JSONata" }
Etapa 4: Configurar sua máquina de estado
Antes de executar a máquina de estado, você deve primeiro se conectar à função do Lambda criada anteriormente.
-
Volte para o modo Design e selecione o estado de tarefa Lambda: Invocar chamado CreateAccount.
Na guia Configuração, procure por Argumentos da API. Em Nome da função, selecione a função do Lambda que você criou anteriormente.
Clique em Criar, revise as funções e clique em Confirmar para criar sua máquina de estado.
Etapa 5: Executar a máquina de estado
Após criar e configurar sua máquina de estado, você poderá executá-la e examinar o fluxo.
-
No editor, selecione Executar.
Como alternativa, na lista Máquinas de estado, selecione Iniciar execução.
-
Na caixa de diálogo Iniciar execução, aceite o ID gerado e, em Entrada, insira o seguinte JSON:
{ "Cause" : "Custom Function Error" } -
Selecione Iniciar execução.
O console do Step Functions direciona você para uma página na qual o título é o ID da execução, conhecida como a página de Detalhes da execução. Você pode revisar os resultados da execução tanto à medida que o fluxo de trabalho avança quanto após a conclusão.
Para revisar os resultados da execução, escolha estados individuais na Exibição em gráfico e, em seguida, escolha as guias individuais no painel Detalhes da etapa para visualizar os detalhes de cada estado, incluindo entrada, saída e definição, respectivamente. Para obter detalhes sobre as informações de execução que você pode visualizar na página Detalhes da execução, consulte Visão geral dos detalhes da execução.
Sua máquina de estado invoca a função do Lambda, que lança um CustomError. Selecione a etapa CreateAccount na Visualização do gráfico para ver a saída do estado. A saída da máquina de estado deve ser semelhante à seguinte ilustração:
Parabéns!
Agora você tem uma máquina de estado que pode capturar e lidar com condições de erro lançadas por uma função do Lambda. Use esse padrão para implementar um tratamento robusto de erros em seus fluxos de trabalho.
nota
Você pode também criar máquinas de estado que usem Tentar novamente para os limites de tempo ou que usem Catch para mudar para um estado específico quando ocorre um erro ou um tempo limite é atingido. Para obter exemplos dessas técnicas de tratamento de erro, consulte Exemplos que usam retry e catch.