AWS Lambda
Guia do desenvolvedor

Erros da função do AWS Lambda no Ruby

Quando o seu código gera um erro, o Lambda gera uma representação JSON do erro. Este documento de erro aparece no log de invocação e, para invocações síncronas, na saída.

exemplo function.rb

def handler(event:, context:) puts "Processing event..." [1, 2, 3].first("two") "Success" end

Esse código resulta em um erro de tipo. O Lambda detecta o erro e gera um documento JSON com os campos para a mensagem de erro, o tipo e o rastreamento da pilha.

{ "errorMessage": "no implicit conversion of String into Integer", "errorType": "Function<TypeError>", "stackTrace": [ "/var/task/function.rb:3:in `first'", "/var/task/function.rb:3:in `handler'" ] }

Quando você invoca a função a partir da linha de comando, a AWS CLI divide a resposta em dois documentos. Para indicar que ocorreu um erro de função, a resposta exibida no terminal inclui um campo FunctionError. A resposta ou o erro retornado pela função é gravado no arquivo de saída.

$ aws lambda invoke --function-name my-function out { "StatusCode": 200, "FunctionError": "Unhandled", "ExecutedVersion": "$LATEST" }

Visualize o arquivo de saída para ver o documento de erro.

$ cat out {"errorMessage":"no implicit conversion of String into Integer","errorType":"Function<TypeError>","stackTrace":["/var/task/function.rb:3:in `first'","/var/task/function.rb:3:in `handler'"]}

nota

O código de status 200 (sucesso) na resposta do Lambda indica que não houve um erro na solicitação enviada para o Lambda. Para problemas que resultam em um código de status de erro, consulte Errors.

O Lambda também grava até 256 KB do objeto de erro nos logs de função. Para visualizar logs quando você invoca a função na linha de comando, use a opção --log-type e decodifique a string base64 na resposta.

$ aws lambda invoke --function-name my-function out --log-type Tail \ --query 'LogResult' --output text | base64 -d START RequestId: 5ce6a15a-f156-11e8-b8aa-25371a5ca2a3 Version: $LATEST Processing event... Error raised from handler method { "errorMessage": "no implicit conversion of String into Integer", "errorType": "Function<TypeError>", "stackTrace": [ "/var/task/function.rb:3:in `first'", "/var/task/function.rb:3:in `handler'" ] } END RequestId: 5ce6a15a-f156-11e8-b8aa-25371a5ca2a3 REPORT RequestId: 5ce6a15a-f156-11e8-b8aa-25371a5ca2a3 Duration: 22.74 ms Billed Duration: 100 ms Memory Size: 128 MB Max Memory Used: 18 MB

Para obter mais informações sobre logs, consulte Registro em log da função do AWS Lambda no Ruby.

Dependendo da origem do evento, o AWS Lambda pode executar novamente a função 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 expirem. Para mais informações sobre novas tentativas, consulte Lidar com erros e novas tentativas automáticas no AWS Lambda.