Invocación de una función de Lambda de forma sincrónica - AWS Lambda

Invocación de una función de Lambda de forma sincrónica

Al invocar una función sincrónicamente, Lambda ejecuta la función y espera una respuesta. Cuando finaliza la función, Lambda devuelve la respuesta desde el código de la función con datos adicionales, como la versión de la función que se invocó. Para invocar una función de forma síncrona con la AWS CLI, utilice el comando invoke.

aws lambda invoke --function-name my-function \ --cli-binary-format raw-in-base64-out \ --payload '{ "key": "value" }' response.json

La opción cli-binary-format es obligatoria si va a utilizar la versión 2 de la AWS CLI. Para que esta sea la configuración predeterminada, ejecute aws configure set cli-binary-format raw-in-base64-out. Para obtener más información, consulte Opciones de la línea de comandos globales compatibles con AWS CLI en la Guía del usuario de la AWS Command Line Interface versión 2.

Debería ver los siguientes datos de salida:

{
    "ExecutedVersion": "$LATEST",
    "StatusCode": 200
}

El siguiente diagrama muestra a los clientes que invocan una función de Lambda de forma sincrónica. Lambda envía los eventos directamente a la función y envía la respuesta de la función al invocador.

Los clientes invocan una función de forma sincrónica y esperan para obtener una respuesta.

El payload es una cadena que contiene un evento en formato JSON. El nombre del archivo donde AWS CLI escribe la respuesta de la función es response.json. Si la función devuelve un objeto o error, el cuerpo de la respuesta es el objeto o error en formato JSON. Si la función sale sin errores, el cuerpo de la respuesta es null.

nota

Lambda no espera a que se completen las extensiones externas para enviar la respuesta. Las extensiones se ejecutan como un proceso independiente en el entorno de ejecución y puede continuar ejecutándose luego de que la invocación de la función se complete. Para obtener más información, consulte Aumente las funciones de Lambda utilizando extensiones de Lambda.

La salida del comando, que se muestra en el terminal, incluye información de los encabezados en la respuesta de Lambda. Esto incluye la versión que ha procesado el evento (útil cuando se utilizan alias) y el código de estado devuelto por Lambda. Si Lambda pudo ejecutar la función, el código de estado es 200, incluso aunque la función devolviera un error.

nota

Para funciones con un tiempo de espera largo, el cliente puede desconectarse durante la invocación síncrona mientras espera una respuesta. Configure el cliente HTTP, SDK, el firewall, el proxy o el sistema operativo para permitir conexiones largas con tiempo de espera o ajustes keep-alive.

Si Lambda no puede ejecutar la función, el error se muestra en la salida.

aws lambda invoke --function-name my-function \ --cli-binary-format raw-in-base64-out \ --payload value response.json

Debería ver los siguientes datos de salida:

An error occurred (InvalidRequestContentException) when calling the Invoke operation: Could not parse request body into json: Unrecognized token 'value': was expecting ('true', 'false' or 'null')
 at [Source: (byte[])"value"; line: 1, column: 11]

La AWS CLI es una herramienta de código abierto que lo habitlita para interactuar con los servicios de AWS mediante el uso de comandos en el shell de la línea de comandos. Para completar los pasos de esta sección, debe disponer de la versión 2 de la AWS CLI.

Puede utilizar la CLI de AWS CLI para recuperar registros de una invocación mediante la opción de comando --log-type. La respuesta contiene un campo LogResult que contiene hasta 4 KB de registros con codificación base64 a partir de la invocación.

ejemplo recuperar un ID de registro

En el ejemplo siguiente se muestra cómo recuperar un ID de registro del campo LogResult para una función denominada my-function.

aws lambda invoke --function-name my-function out --log-type Tail

Debería ver los siguientes datos de salida:

{
    "StatusCode": 200,
    "LogResult": "U1RBUlQgUmVxdWVzdElkOiA4N2QwNDRiOC1mMTU0LTExZTgtOGNkYS0yOTc0YzVlNGZiMjEgVmVyc2lvb...",
    "ExecutedVersion": "$LATEST"
}
ejemplo decodificar los registros

En el mismo símbolo del sistema, utilice la utilidad base64 para decodificar los registros. En el ejemplo siguiente se muestra cómo recuperar registros codificados en base64 para my-function.

aws lambda invoke --function-name my-function out --log-type Tail \ --query 'LogResult' --output text --cli-binary-format raw-in-base64-out | base64 --decode

La opción cli-binary-format es obligatoria si va a utilizar la versión 2 de la AWS CLI. Para que esta sea la configuración predeterminada, ejecute aws configure set cli-binary-format raw-in-base64-out. Para obtener más información, consulte Opciones de la línea de comandos globales compatibles con AWS CLI en la Guía del usuario de la AWS Command Line Interface versión 2.

Debería ver los siguientes datos de salida:

START RequestId: 57f231fb-1730-4395-85cb-4f71bd2b87b8 Version: $LATEST
"AWS_SESSION_TOKEN": "AgoJb3JpZ2luX2VjELj...", "_X_AMZN_TRACE_ID": "Root=1-5d02e5ca-f5792818b6fe8368e5b51d50;Parent=191db58857df8395;Sampled=0"",ask/lib:/opt/lib",
END RequestId: 57f231fb-1730-4395-85cb-4f71bd2b87b8
REPORT RequestId: 57f231fb-1730-4395-85cb-4f71bd2b87b8  Duration: 79.67 ms      Billed Duration: 80 ms         Memory Size: 128 MB     Max Memory Used: 73 MB

La utilidad base64 está disponible en Linux, macOS y Ubuntu en Windows. Es posible que los usuarios de macOS necesiten usar base64 -D.

Para obtener más información acerca de la API Invoke, incluida una lista completa de parámetros, encabezados y errores, consulte Invocar.

Al invocar una función directamente, puede comprobar la respuesta en busca de errores y volver a intentarlo. La AWS CLI y el SDK de AWS también reintentan automáticamente en los tiempos de espera, limitaciones y errores de servicio del cliente. Para obtener más información, consulte Comprender el comportamiento de reintento en Lambda.