AWS Lambda
Guia do desenvolvedor

Erros da função do AWS Lambda no Java

Se a sua função do Lambda gera uma exceção, o AWS Lambda reconhece a falha, serializa as informações da exceção em JSON e as retorna. Veja a seguir um exemplo de mensagem de erro:

{ "errorMessage": "Name John Doe is invalid. Exception occurred...", "errorType": "java.lang.Exception", "stackTrace": [ "example.Hello.handler(Hello.java:9)", "sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)", "sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)", "sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)", "java.lang.reflect.Method.invoke(Method.java:497)" ] }

Observe que o rastreamento da pilha é retornado como a matriz JSON stackTrace dos elementos de rastreamento da pilha.

O método no qual você obterá as informações de erro de volta dependerá do tipo de invocação especificado no momento em que a função foi invocada:

  • Tipo de invocação RequestResponse (ou seja, execução síncrona): nesse caso, você recebe uma mensagem de erro de volta.

    Por exemplo, se você invocar uma função do Lambda usando o console do Lambda, a RequestResponse será sempre o tipo de invocação, e o console exibirá as informações de erro retornadas pelo AWS Lambda na seção Execution result (Resultado da execução), conforme mostrado na imagem a seguir.

  • Tipo de invocação Event (ou seja, execução assíncrona): nesse caso, o AWS Lambda não retorna nada. Em vez disso, ele registra as informações de erro em métricas do CloudWatch Logs e do CloudWatch.

Dependendo da origem do evento, o AWS Lambda pode executar novamente a função do Lambda que falhou. Por exemplo, se o Kinesis for a origem do evento para a função do Lambda, o AWS Lambda tentará executar novamente a função do Lambda com falha até que ela seja bem-sucedida ou que os registros do fluxo sejam esgotados.

Tratamento de erros de funções

Você pode criar um tratamento de erros personalizado para gerar uma exceção diretamente de sua função do Lambda e lidar com ela diretamente (tentar novamente ou capturar) em uma máquina de estado do AWS Step Functions. Para obter mais informações, consulte Tratamento de condições de erro usando uma máquina de estado.

Considere o estado CreateAccount como uma tarefa que grava os detalhes de um cliente no banco de dados usando uma função do Lambda.

  • Se a tarefa for bem-sucedida, uma conta será criada e um e-mail de boas-vindas será enviado.

  • Se um usuário tenta criar uma conta com um nome de usuário que já existe, a função do Lambda gera um erro, fazendo com que a máquina de estado sugira um nome de usuário diferente e tente novamente o processo de criação da conta.

O exemplo de código a seguir demonstra como fazer isso. Observe que erros personalizados em Java devem estender a classe Exception.

package com.example; public static class AccountAlreadyExistsException extends Exception { public AccountAlreadyExistsException(String message) { super(message); } } package com.example; import com.amazonaws.services.lambda.runtime.Context; public class Handler { public static void CreateAccount(String name, Context context) throws AccountAlreadyExistsException { throw new AccountAlreadyExistsException ("Account is in use!"); } }

Você pode configurar o Step Functions para capturar o erro usando uma regra Catch. O Lambda define automaticamente o nome do erro como o nome de classe totalmente qualificado da exceção em tempo de execução:

{ "StartAt": "CreateAccount", "States": { "CreateAccount": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:CreateAccount", "Next": "SendWelcomeEmail", "Catch": [ { "ErrorEquals": ["com.example.AccountAlreadyExistsException"], "Next": "SuggestAccountName" } ] }, … } }

Durante o tempo de execução, o AWS Step Functions captura o erro, mudando para o estado SuggestAccountName como especifica a transição Next.

O tratamento de erros personalizado facilita a criação de aplicativos sem servidor. Este recurso é integrado a todas as linguagens às quais o Lambda Modelo de programação oferece suporte, permitindo que você crie seus aplicativos na linguagem de programação de sua escolha, misturando e combinando ao longo do processo.

Para saber mais sobre a criação de seus próprios aplicativos sem servidor usando o AWS Step Functions e o AWS Lambda, consulte AWS Step Functions.