Errores de funciones AWS Lambda en Ruby - AWS Lambda

Errores de funciones AWS Lambda en Ruby

Cuando el código devuelve un error, Lambda genera una representación JSON de este. Este documento de error aparece en el registro de invocación y, en el caso de las invocaciones síncronas, en la salida.

ejemplo function.rb

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

Este código da como resultado un error de tipo. Lambda detecta el error y genera un documento JSON con campos para el mensaje de error, el tipo y el seguimiento de la pila.

{ "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'" ] }

Cuando se invoca la función desde la línea de comandos, la AWS CLI divide la respuesta en dos documentos. Para indicar que se ha producido un error en la función, la respuesta que se muestra en el terminal incluye un campo FunctionError. La respuesta o el error que devuelve la función se escribe en el archivo de salida.

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

Examine el archivo de salida para ver el documento de error.

$ cat out.json {"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

El código de estado 200 (correcto) de la respuesta de Lambda indica que no hubo ningún error en la solicitud que envió a Lambda. Para ver los problemas que generan un código de estado de error, consulte Errors.

Lambda también registra hasta 256 KB del objeto de error en los registros de la función. Para ver los registros cuando realice la invocación de la función desde la línea de comandos, utilice la opción --log-type y descodifique la cadena base64 de la respuesta.

$ aws lambda invoke --function-name my-function out.json --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 obtener más información acerca de los registros, consulte Registro de funciones de AWS Lambda en Ruby.

En función del origen de eventos, AWS Lambda podría volver a intentar la ejecución de la función de Lambda que ha generado un error. Por ejemplo, si Kinesis es el origen de eventos, AWS Lambda reintenta la invocación que produce errores hasta que la función de Lambda se ejecute correctamente o hasta que los registros del flujo caduquen. Para obtener más información acerca de los reintentos, consulte Control de errores y reintentos automáticos en AWS Lambda.