AWS Lambda
Guia do desenvolvedor

Erros da função do AWS Lambda no Python

Se a função do Lambda gera uma exceção, o AWS Lambda reconhecerá a falha, serializará as informações da exceção no JSON e as retornará. Considere o seguinte exemplo:

def always_failed_handler(event, context): raise Exception('I failed!')

Quando você invocar a função do Lambda, será gerada uma exceção e o AWS Lambda retornará a seguinte mensagem de erro:

{ "errorMessage": "I failed!", "stackTrace": [ [ "/var/task/lambda_function.py", 3, "my_always_fails_handler", "raise Exception('I failed!')" ] ], "errorType": "Exception" }

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

A maneira como você obtém as informações de erro de volta dependerá do tipo de invocação especificado pelo cliente no momento da invocação da função:

  • Se um cliente especifica o tipo de invocação RequestResponse, ou seja, execução síncrona, este retorna o resultado ao cliente que fez a chamada de invocação.

    Por exemplo, o console sempre usa o tipo de invocação RequestResponse, portanto, o console exibirá o erro na seção Execution result da seguinte forma:

    As mesmas informações também são enviadas ao CloudWatch e a seção Log output mostra os mesmos logs.

  • Se um cliente especifica o tipo de invocação Event, ou seja, execução assíncrona, o AWS Lambda não retorna nada. Em vez disso, ele registra as informações de erro no CloudWatch Logs. Você também pode ver as métricas de erro no CloudWatch Metrics.

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, o AWS Lambda tentará executar novamente a invocação da função do Lambda com falha até que ela seja bem-sucedida ou que os registros do fluxo espirem.

Para testar o código em Python anterior (console)

  1. No console, crie uma função de Lambda usando o esquema hello-world. Em runtime (tempo de execução), escolha Python 3.7. Em Handler, substitua lambda_function.lambda_handler por lambda_function.always_failed_handler. Para obter instruções sobre como fazer isso, consulte Criar uma função do Lambda com o console.

  2. Substitua o código do modelo com o código fornecido nesta seção.

  3. Teste a função do Lambda usando Sample event template chamado Hello World fornecido no console do Lambda.

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 Python devem estender a classe Exception.

class AccountAlreadyExistsException(Exception): pass def create_account(event, context): raise 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 simples 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": ["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.