Tratamento de condições de erro em uma máquina de estado Step Functions - AWS Step Functions

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Tratamento de condições de erro em uma máquina de estado Step Functions

Neste tutorial, você cria uma máquina de AWS Step Functions estado com um estado de tarefa que invoca um exemplo de função Lambda criada para gerar um erro personalizado.

As tarefas são uma dasEstados de fallback, para as quais você pode configurar um Catch campo. Quando os erros são recebidos pela integração, as próximas etapas são escolhidas pelo campo catch com base no nome do erro.

Etapa 1: criar uma função Lambda que gere um erro

Use uma função do Lambda para simular uma condição de erro.

  1. Abra o AWS Lambda console em https://console.aws.amazon.com/lambda/.

  2. Escolha a opção Criar função.

  3. Escolha Usar um blueprint, pesquise Step Functions e escolha Lançar um erro personalizado.

  4. Em Function name (Nome da função), insira ThrowErrorFunction.

  5. 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).

  6. 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: Teste sua função Lambda

Antes de criar uma máquina de estado, verifique se sua função Lambda lança sua CustomError quando invocada.

  1. Selecione a guia Testar.

  2. Escolha Criar um novo evento e mantenha o JSON padrão do evento

  3. Escolha Testar para invocar sua função com seu evento de teste.

  4. Expanda a função Executando para revisar os detalhes do erro gerado.

Agora você tem uma função 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: Crie sua máquina de estado

Use o console Step Functions para criar uma máquina de estado que usa um Estado de tarefa do fluxo de trabalho com uma Catch configuração. A máquina de estado invocará a função Lambda, que você criou para simular a emissão de um erro quando a função for invocada. Step Functions tenta novamente a função usando o recuo exponencial entre as novas tentativas.

  1. Abra o console Step Functions, escolha State machines no menu e escolha Create state machine.

  2. Escolha Criar em branco e, em Nome da máquina do estado, insiraCatchErrorStateMachine.

  3. Aceite o tipo padrão (Padrão) e escolha Continuar para editar sua máquina de estado no Workflow Studio.

  4. Escolha Código para mudar para o editor ASL e, em seguida, 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 sua máquina de estado, você deve primeiro se conectar à função Lambda que você criou anteriormente.

  1. Volte para o modo Design e selecione o estado da tarefa Lambda: Invoke chamado. CreateAccount

  2. Na guia Configuração, procure Argumentos da API. Em Nome da função, escolha a função Lambda que você criou anteriormente.

  3. Escolha Criar, revise as funções e escolha Confirmar para criar sua máquina de estado.

Etapa 5: Executar a máquina de estado

Depois de criar e configurar sua máquina de estado, você pode executá-la e examinar o fluxo.

  1. No editor, escolha Executar.

    Como alternativa, na lista Máquinas de estado, escolha Iniciar execução.

  2. Na caixa de diálogo Iniciar execução, aceite o ID gerado e, em Entrada, insira o seguinte JSON:

    { "Cause" : "Custom Function Error" }
  3. Selecione Iniciar execução.

O console Step Functions direciona você para uma página intitulada com seu ID de execução, conhecida como página de detalhes da execução. Você pode revisar os resultados da execução à medida que o fluxo de trabalho progride e depois de concluído.

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 Lambda, que lança um. CustomError Escolha a CreateAccountetapa na visualização do gráfico para ver a saída do estado. A saída da sua máquina de estado deve ser semelhante à ilustração a seguir:

Captura de tela ilustrativa do fluxo de trabalho detectando o erro personalizado.

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 Lambda. Você pode usar 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.