Funciones Lambda como destinos - Elastic Load Balancing

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Funciones Lambda como destinos

Puede registrar sus funciones Lambda como destinos y configurar una regla del agente de escucha para reenviar las solicitudes al grupo de destino de la función Lambda. Cuando el balanceador de carga reenvía la solicitud a un grupo de destino con una función Lambda como destino, invoca la función Lambda y pasa el contenido de la solicitud a la función Lambda, en formato JSON.

Limits

  • La función de Lambda y el grupo de destino deben estar en la misma cuenta y en la misma región.

  • El tamaño máximo del cuerpo de la solicitud que puede enviar a una función Lambda es de 1 MB. Para conocer los límites de tamaño relacionados, consulte Límites de los encabezados HTTP.

  • El tamaño máximo del JSON de respuesta que la función Lambda puede enviar es de 1 MB.

  • No se admite WebSockets. Las solicitudes de actualización se rechazan con el código HTTP 400.

Para ver una demostración, consulte Lambda target on Balanceador de carga de aplicaciones.

Preparación de la función Lambda

Se aplican las recomendaciones siguientes si está utilizando su función Lambda con un Balanceador de carga de aplicaciones.

Permisos para invocar la función Lambda

Si crea el grupo de destino y registra la función Lambda utilizando la Consola de administración de AWS, la consola añade los permisos necesarios a la política de su función Lambda en su nombre. De lo contrario, después de crear el grupo de destino y registrar la función utilizando la AWS CLI, debe utilizar el comando add-permission para conceder a Elastic Load Balancing permiso para invocar la función Lambda. Le recomendamos que incluya el parámetro --source-arn para restringir la invocación de la función al grupo de destino especificado.

aws lambda add-permission \ --function-name lambda-function-arn-with-alias-name \ --statement-id elb1 \ --principal elasticloadbalancing.amazonaws.com \ --action lambda:InvokeFunction \ --source-arn target-group-arn

Control de versiones de funciones Lambda

Puede registrar una sola función Lambda por grupo de destino. Para asegurarse de que puede cambiar la función Lambda y de que el balanceador de carga siempre invoque la versión actual de la función Lambda, cree un alias de función e incluya el alias en el ARN de la función cuando registre la función Lambda en el balanceador de carga. Para obtener más información, consulte Control de versiones y alias de las funciones de AWS Lambda y Desvío de tráfico mediante alias en la AWS Lambda Developer Guide.

Tiempo de espera de la función

El balanceador de carga espera hasta que la función Lambda responde o se agota el tiempo de espera. Le recomendamos que configure el tiempo de espera de la función Lambda en función del tiempo de ejecución previsto. Para obtener información sobre el valor de tiempo de espera predeterminado y cómo cambiarlo, consulte Configuración básica de la función de AWS Lambda. Para obtener información sobre el valor de tiempo de espera máximo que puede configurar, consulte Límites de AWS Lambda.

Crear un grupo de destino para la función Lambda

Cree el grupo de destino que se va a utilizar para el direccionamiento de solicitudes. Si el contenido de la solicitud coincide con una regla del agente de escucha con una acción para reenviarlo a este grupo de destino, el balanceador de carga invoca la función Lambda registrada.

New console

Para crear un grupo de destino y registrar la función Lambda mediante la nueva consola

  1. Abra la consola de Amazon EC2 en https://console.aws.amazon.com/ec2/.

  2. En el panel de navegación, en LOAD BALANCING (BALANCEO DE CARGA), elija Target Groups (Grupos de destino).

  3. Elija Create target group.

  4. En Choose a target type (Elegir un tipo de destino), seleccione Lambda function (Función Lambda).

  5. En Target group name (Nombre del grupo de destino), escriba el nombre del grupo de destino.

  6. (Opcional) Para habilitar las comprobaciones de estado, elija Enable (Habilitar) en la sección Health checks (Comprobaciones de estado).

  7. (Opcional) Agregue una o varias etiquetas, como se indica a continuación:

    1. Expanda la sección Tags (Etiquetas).

    2. Elija Add tag (Añadir etiqueta).

    3. Introduzca la clave y el valor de la etiqueta.

  8. Seleccione Next (Siguiente).

  9. Especifique una única función Lambda u omita este paso y especifique una función Lambda más adelante.

  10. Elija Create target group.

Old console

Para crear un grupo de destino y registrar la función Lambda utilizando la consola antigua

  1. Abra la consola de Amazon EC2 en https://console.aws.amazon.com/ec2/.

  2. En el panel de navegación, en LOAD BALANCING (BALANCEO DE CARGA), elija Target Groups (Grupos de destino).

  3. Elija Create target group.

  4. En Target group name (Nombre del grupo de destino), escriba el nombre del grupo de destino.

  5. En Target type (Tipo de destino), seleccione Lambda function (Función Lambda).

  6. En Lambda function (Función Lambda), realice alguna de las siguientes operaciones:

    • Seleccione la función Lambda

    • Cree una nueva función Lambda y selecciónela

    • Registre la función Lambda después de crear el grupo de destino

  7. (Opcional) Para habilitar las comprobaciones, elija Health check (Comprobación de estado), Enable (Habilitar).

  8. Seleccione Create (Crear).

Para crear un grupo de destino y anular el registro de la función Lambda mediante la AWS CLI

Use los comandos create-target-group y register-targets.

Recibir eventos del balanceador de carga

El balanceador de carga admite la invocación Lambda de solicitudes a través de HTTP y HTTPS. El balanceador de carga envía un evento en formato JSON. El balanceador de carga añade los siguientes encabezados a cada solicitud: X-Amzn-Trace-Id , X-Forwarded-For, X-Forwarded-Port y X-Forwarded-Proto.

Si el encabezado content-encoding está presente, el balanceador de carga codifica en Base64 el cuerpo y establece isBase64Encoded en true.

Si el encabezado content-encoding no está presente, la codificación Base64 depende del tipo de contenido. Para los siguientes tipos, el balanceador de carga envía el cuerpo tal y como está y establece isBase64Encoded en false: text/*, application/json, application/javascript y application/xml. De lo contrario, el balanceador de carga codificará el cuerpo en Base64 y establecerá isBase64Encoded en true.

El siguiente es un evento de ejemplo.

{ "requestContext": { "elb": { "targetGroupArn": "arn:aws:elasticloadbalancing:region:123456789012:targetgroup/my-target-group/6d0ecf831eec9f09" } }, "httpMethod": "GET", "path": "/", "queryStringParameters": {parameters}, "headers": { "accept": "text/html,application/xhtml+xml", "accept-language": "en-US,en;q=0.8", "content-type": "text/plain", "cookie": "cookies", "host": "lambda-846800462-us-east-2.elb.amazonaws.com", "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6)", "x-amzn-trace-id": "Root=1-5bdb40ca-556d8b0c50dc66f0511bf520", "x-forwarded-for": "72.21.198.66", "x-forwarded-port": "443", "x-forwarded-proto": "https" }, "isBase64Encoded": false, "body": "request_body" }

Responder al balanceador de carga

La respuesta de la función Lambda debe incluir el estado de codificación en Base64, el código de estado y los encabezados. Puede omitir el cuerpo.

Para incluir contenido binario en el cuerpo de la respuesta, debe codificar en Base64 el contenido y establecer isBase64Encoded en true. El balanceador de carga descodifica el contenido para recuperar el contenido binario y lo envía al cliente en el cuerpo de la respuesta HTTP.

El balanceador de carga no respeta los encabezados de saltos, como Connection o Transfer-Encoding. Puede omitir el encabezado Content-Length, ya que el balanceador de carga lo calcula antes de enviar las respuestas a los clientes.

A continuación, se muestra un ejemplo de la respuesta de una función Lambda.

{ "isBase64Encoded": false, "statusCode": 200, "statusDescription": "200 OK", "headers": { "Set-cookie": "cookies", "Content-Type": "application/json" }, "body": "Hello from Lambda (optional)" }

Para conocer las plantillas de la función Lambda que funcionan con Application Load Balancers, consulte application-load-balancer-serverless-app en github. También puede abrir la consola de Lambda , crear una función y seleccionar una de las siguientes opciones de AWS Serverless Application Repository:

  • ALB-Lambda-Target-HelloWorld

  • ALB-Lambda-Target-UploadFiletoS3

  • ALB-Lambda-Target-BinaryResponse

  • ALB-Lambda-Target-WhatisMyIP

Encabezados de varios valores

Si las solicitudes de un cliente o las respuestas de una función de Lambda incluyen encabezados con varios valores o el mismo encabezado varias veces, o parámetros de consulta con varios valores para la misma clave, puede habilitar la compatibilidad con la sintaxis de encabezados de varios valores. Después de habilitar encabezados de varios valores, los encabezados y los parámetros de consulta intercambiados entre el balanceador de carga y la función de Lambda utilizan matrices en lugar de cadenas. Si no habilita la sintaxis de encabezado de varios valores y un parámetro de encabezado o consulta tiene varios valores, el balanceador de carga utiliza el último valor que reciba.

Instancias de destino que están fuera de línea especificando un grupo de recursos de AWS como destino.Contenido

Solicitudes con encabezados de varios valores

Los nombres de los campos utilizados para los encabezados y los parámetros de cadena de consulta difieren en función de su habilita los encabezados de varios valores para el grupo de destino.

La siguiente solicitud de ejemplo tiene dos parámetros de consulta con la misma clave:

http://www.example.com?&myKey=val1&myKey=val2

Con el formato predeterminado, el balanceador de carga utiliza el último valor enviado por el cliente y le envía un evento que incluye parámetros de cadenas de consulta que utilizan queryStringParameters. Por ejemplo:

"queryStringParameters": { "myKey": "val2"},

Si habilita encabezados de varios valores, el balanceador de carga utiliza ambos valores de clave enviados por el cliente y le envía un evento que incluye parámetros de cadenas de consulta que utilizan multiValueQueryStringParameters. Por ejemplo:

"multiValueQueryStringParameters": { "myKey": ["val1", "val2"] },

De forma similar, suponga que el cliente envía una solicitud con dos cookies en el encabezado:

"cookie": "name1=value1", "cookie": "name2=value2",

Con el formato predeterminado, el balanceador de carga utiliza la última cookie enviada por el cliente y le envía un evento que incluye encabezados que utilizan headers. Por ejemplo:

"headers": { "cookie": "name2=value2", ... },

Si habilita encabezados de varios valores, el balanceador de carga utiliza ambas cookies enviadas por el cliente y le envía un evento que incluye encabezados que utilizan multiValueHeaders. Por ejemplo:

"multiValueHeaders": { "cookie": ["name1=value1", "name2=value2"], ... },

Si los parámetros de consulta están codificados en URL, el balanceador de carga no los decodifica. Debe decodificarlos en la función de Lambda.

Respuestas con encabezados de varios valores

Los nombres de los campos utilizados para los encabezados difieren en función de si habilita encabezados de varios valores para el grupo de destino. Debe utilizar multiValueHeaders si ha habilitado encabezados de varios valores y headers de lo contrario.

Con el formato predeterminado, puede especificar una única cookie:

{ "headers": { "Set-cookie": "cookie-name=cookie-value;Domain=myweb.com;Secure;HttpOnly", "Content-Type": "application/json" }, }

Con los encabezados de varios valores, debe especificar varias cookies tal y como se indica a continuación:

{ "multiValueHeaders": { "Set-cookie": ["cookie-name=cookie-value;Domain=myweb.com;Secure;HttpOnly","cookie-name=cookie-value;Expires=May 8, 2019"], "Content-Type": ["application/json"] }, }

Habilitar encabezados de varios valores

Puede habilitar o deshabilitar los encabezados de varios valores para un grupo de destino con el tipo de destino lambda.

New console

Para habilitar los encabezados de varios valores con la nueva consola

  1. Abra la consola de Amazon EC2 en https://console.aws.amazon.com/ec2/.

  2. En el panel de navegación, en LOAD BALANCING (BALANCEO DE CARGA), elija Target Groups (Grupos de destino).

  3. Seleccione el nombre del grupo de destino para abrir su página de detalles.

  4. En la pestaña Group details (Detalles del grupo), en la sección Attributes (Atributos), elija Edit (Editar).

  5. Seleccione o desactive Multi value headers (Encabezados de varios valores).

  6. Elija Save changes.

Old console

Para habilitar los encabezados de varios valores con la consola antigua

  1. Abra la consola de Amazon EC2 en https://console.aws.amazon.com/ec2/.

  2. En el panel de navegación, en LOAD BALANCING (BALANCEO DE CARGA), elija Target Groups (Grupos de destino).

  3. Seleccione el grupo de destino.

  4. En la pestaña Description (Descripción), elija Edit attributes (Editar atributos).

  5. En Multi value headers (Encabezados de varios valores), seleccione Enable (Habilitar).

  6. Seleccione Save.

Para habilitar los encabezados de varios valores con la AWS CLI

Utilice el comando modify-target-group-attributes con el atributo lambda.multi_value_headers.enabled.

Habilitar comprobaciones de estado

De forma predeterminada, las comprobaciones de estado están deshabilitadas para los grupos de destino de tipo lambda. Puede habilitar las comprobaciones de estado para implementar la recuperación ante errores a nivel de DNS con Amazon Route 53. La función Lambda puede comprobar el estado de un servicio posterior antes de responder a la solicitud de comprobación de estado. Si la respuesta de la función Lambda indica un error en la comprobación de estado, este error se pasa a Route 53. Puede configurar Route 53 para que realice una conmutación por error a una pila de aplicaciones de reserva.

Se aplican cargos por las comprobaciones de estado, al igual que con las invocaciones a funciones Lambda.

A continuación, se muestra el formato del evento de comprobación de estado enviado a la función Lambda. Para comprobar si un evento es un evento de comprobación de estado, compruebe el valor del campo agente-usuario. El agente de usuario de las comprobaciones de estado es ELB-HealthChecker/2.0.

{ "requestContext": { "elb": { "targetGroupArn": "arn:aws:elasticloadbalancing:region:123456789012:targetgroup/my-target-group/6d0ecf831eec9f09" } }, "httpMethod": "GET", "path": "/", "queryStringParameters": {}, "headers": { "user-agent": "ELB-HealthChecker/2.0" }, "body": "", "isBase64Encoded": false }
New console

Para habilitar las comprobaciones de estado para un grupo de destino desde la nueva consola

  1. Abra la consola de Amazon EC2 en https://console.aws.amazon.com/ec2/.

  2. En el panel de navegación, en LOAD BALANCING (BALANCEO DE CARGA), elija Target Groups (Grupos de destino).

  3. Seleccione el nombre del grupo de destino para abrir su página de detalles.

  4. En la pestaña Group details (Detalles del grupo), en la sección Health check settings (Configuración de comprobación de estado), elija Edit (Editar).

  5. En Health checks (Comprobaciones de estado), seleccione Enable (Habilitar).

  6. Elija Save changes.

Old console

Para habilitar las comprobaciones de estado para un grupo de destino mediante la consola antigua

  1. Abra la consola de Amazon EC2 en https://console.aws.amazon.com/ec2/.

  2. En el panel de navegación, en LOAD BALANCING (BALANCEO DE CARGA), elija Target Groups (Grupos de destino).

  3. Seleccione el grupo de destino.

  4. En la pestaña Health checks (Comprobaciones de estado), elija Edit health check (Editar comprobación de estado).

  5. En Health check (Comprobación de estado), seleccione Enable (Habilitar).

  6. Seleccione Save.

Para habilitar las comprobaciones de estado para un grupo de destino mediante la AWS CLI

Utilice el comando modify-target-group-attributes con la opción --health-check-enabled.

Anular el registro de la función Lambda

Si ya no necesita enviar tráfico a la función Lambda, puede anular su registro. Después de anular el registro de una función Lambda, las solicitudes en tránsito producirán errores HTTP 5XX.

Para sustituir una función Lambda, le recomendamos que cree un nuevo grupo de destino, registre la nueva función en el nuevo grupo de destino y actualice las reglas del agente de escucha para que utilicen el nuevo grupo de destino en lugar del existente.

New console

Para anular el registro de la función Lambda utilizando la nueva consola

  1. Abra la consola de Amazon EC2 en https://console.aws.amazon.com/ec2/.

  2. En el panel de navegación, en LOAD BALANCING (BALANCEO DE CARGA), elija Target Groups (Grupos de destino).

  3. Seleccione el nombre del grupo de destino para abrir su página de detalles.

  4. En la pestaña Targets (Destinos), seleccione Deregister (Anular registro).

  5. Cuando se le pida que confirme, elija Deregister (Anular el registro).

Old console

Para anular el registro de la función Lambda utilizando la consola antigua

  1. Abra la consola de Amazon EC2 en https://console.aws.amazon.com/ec2/.

  2. En el panel de navegación, en LOAD BALANCING (BALANCEO DE CARGA), elija Target Groups (Grupos de destino).

  3. Seleccione el grupo de destino.

  4. En la pestaña Targets (Destinos), seleccione Deregister (Anular registro).

  5. Cuando se le pida que confirme, elija Deregister (Anular el registro).

Para anular el registro de la función Lambda mediante la AWS CLI

Use el comando deregister-targets.