Funciones de Lambda como destinos en VPC Lattice - Amazon VPC Lattice

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 de Lambda como destinos en VPC Lattice

Puede registrar sus funciones de Lambda como destinos con un grupo de destino de VPC Lattice y configurar una regla del oyente para reenviar las solicitudes al grupo de destino de la función de Lambda. Cuando el servicio reenvía la solicitud a un grupo de destino con una función de Lambda como destino, invoca la función de Lambda y pasa el contenido de la solicitud a la función de Lambda, en formato JSON. Para obtener más información, consulte Uso AWS Lambda con Amazon VPC Lattice en la AWS Lambda Guía para desarrolladores.

Limitaciones
  • 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 de Lambda es de 6 MB.

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

  • El protocolo debe ser HTTP o HTTPS.

Preparación de la función de Lambda

Se aplican las siguientes recomendaciones si está utilizando su función de Lambda con un servicio de VPC Lattice.

Permisos para invocar la función de Lambda

Al crear el grupo objetivo y registrar la función Lambda mediante AWS Management Console o el AWS CLI VPC Lattice, agrega los permisos necesarios a la política de funciones de Lambda en su nombre.

También puede añadir permisos por su cuenta mediante la siguiente llamada a la API:

aws lambda add-permission \ --function-name lambda-function-arn-with-alias-name \ --statement-id vpc-lattice \ --principal vpc-lattice.amazonaws.com \ --action lambda:InvokeFunction \ --source-arn target-group-arn
Control de versiones de función de Lambda

Puede registrar una sola función de Lambda por grupo de destino. Para asegurarse de que puede cambiar la función de Lambda y de que el servicio de VPC Lattice siempre invoque la versión actual de la función de Lambda, cree un alias de función e incluya el alias en el ARN de la función cuando registre la función de Lambda en el servicio de VPC Lattice. Para obtener más información, consulte Versiones de funciones de Lambda y Creación de un alias para una función de Lambda en la Guía para desarrolladores.AWS Lambda

Creación de un grupo de destino para la función de Lambda

Cree el grupo de destino que se va a utilizar para el enrutamiento de solicitudes. Si el contenido de la solicitud coincide con una regla del oyente con una acción para reenviarlo a este grupo de destino, el servicio de VPC Lattice invoca la función de Lambda registrada.

Cómo crear un grupo de destino y registrar la función de Lambda mediante la consola
  1. Abra la consola de Amazon VPC en https://console.aws.amazon.com/vpc/.

  2. En el panel de navegación, en VPC Lattice, elija Grupos de destino.

  3. Elija Crear grupo de destino.

  4. En Elegir un tipo de destino, seleccione Función de Lambda.

  5. En Nombre del grupo de destino, escriba el nombre del grupo de destino.

  6. En Versión de estructura de eventos de Lambda, elija una versión. Para obtener más información, consulte Recepción de eventos del servicio de VPC Lattice.

  7. (Opcional) Para agregar etiquetas, expanda Etiquetas, elija Agregar nueva etiqueta e ingrese la clave y el valor de la etiqueta.

  8. Elija Siguiente.

  9. En Función de Lambda, realice alguna de las siguientes acciones:

    • Seleccione una función de Lambda existente.

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

    • Registre la función de Lambda más adelante.

  10. Elija Crear grupo de destino.

Cómo crear un grupo de destino y registrar la función de Lambda mediante la AWS CLI

Utilice los comandos create-target-groupy register-targets.

Recepción de eventos del servicio de VPC Lattice

El servicio de VPC Lattice admite la invocación de Lambda de solicitudes a través de HTTP y HTTPS. El servicio envía un evento en formato JSON y agrega el encabezado X-Forwarded-For a cada solicitud.

Codificación en Base64

El servicio Base64 codifica el cuerpo si el encabezado content-encoding está presente y el tipo de contenido no es uno de los siguientes:

  • text/*

  • application/json

  • application/xml

  • application/javascript

Si el encabezado content-encoding no está presente, la codificación en Base64 depende del tipo de contenido. Para los tipos de contenido anteriores, el servicio envía el cuerpo tal cual, sin la codificación en Base64.

Formato de estructura de evento

Al crear o actualizar un tipo de grupo de destino LAMBDA, puede especificar la versión de la estructura de eventos que recibe la función de Lambda. Las versiones posibles son V1 y V2.

ejemplo Ejemplo de evento: V2
{ "version": "2.0", "path": "/", "method": "GET|POST|HEAD|...", "headers": { "header-key": ["header-value", ...], ... }, "queryStringParameters": { "key": ["value", ...] }, "body": "request-body", "isBase64Encoded": true|false, "requestContext": { "serviceNetworkArn": "arn:aws:vpc-lattice:region:123456789012:servicenetwork/sn-0bf3f2882e9cc805a", "serviceArn": "arn:aws:vpc-lattice:region:123456789012:service/svc-0a40eebed65f8d69c", "targetGroupArn": "arn:aws:vpc-lattice:region:123456789012:targetgroup/tg-6d0ecf831eec9f09", "identity": { "sourceVpcArn": "arn:aws:ec2:region:123456789012:vpc/vpc-0b8276c84697e7339", "type": "AWS_IAM", "principal": "arn:aws:iam::123456789012:assumed-role/my-role/my-session", "principalOrgID": "o-50dc6c495c0c9188", "sessionName": "i-0c7de02a688bde9f7", "x509IssuerOu": "string", "x509SanDns": "string", "x509SanNameCn": "string", "x509SanUri": "string", "x509SubjectCn": "string" }, "region": "region", "timeEpoch": "1690497599177430" } }
body

El cuerpo de la solicitud. Está presente únicamente si el protocolo es HTTP, HTTPS o gRPC.

headers

El encabezado HTTP de la solicitud. Está presente únicamente si el protocolo es HTTP, HTTPS o gRPC.

identity

La información de identidad. A continuación se indican los posibles campos.

  • principal: la entidad principal autenticada. Está presente solo si la AWS autenticación se realiza correctamente.

  • principalOrgID: el ID de la organización para la entidad principal autenticada. Está presente solo si AWS la autenticación se realiza correctamente.

  • sessionName: el nombre de sesión autenticada. Está presente solo si AWS la autenticación se realiza correctamente.

  • sourceVpcArn: el ARN de la VPC en donde se originó la solicitud. Está presente solo si se puede identificar la VPC de origen.

  • type— El valor corresponde a AWS_IAM si se utiliza una política de AWS autenticación y la autenticación se realiza correctamente.

Si se utilizan las credenciales de Roles Anywhere y la autenticación se realiza con éxito, los siguientes campos son posibles.

  • x509IssuerOu: el emisor (OU).

  • x509SanDns: el nombre alternativo del sujeto (DNS).

  • x509SanNameCn: el nombre alternativo del emisor (nombre/CN).

  • x509SanUri: el nombre alternativo del sujeto (URI).

  • x509SubjectCn: el nombre del sujeto (CN).

isBase64Encoded

Indica si el cuerpo tenía codificación en Base64. Está presente solo si el protocolo es HTTP, HTTPS o gRPC y el cuerpo de la solicitud aún no es una cadena.

method

El método HTTP de la solicitud. Está presente únicamente si el protocolo es HTTP, HTTPS o gRPC.

path

La ruta de la solicitud. Está presente únicamente si el protocolo es HTTP, HTTPS o gRPC.

queryStringParameters

Los parámetros de cadenas de consulta HTTP. Está presente únicamente si el protocolo es HTTP, HTTPS o gRPC.

serviceArn

El ARN del servicio que recibe la solicitud.

serviceNetworkArn

El ARN de la red de servicios que entrega la solicitud.

targetGroupArn

El ARN del grupo de destino que recibe la solicitud.

timeEpoch

El tiempo, en microsegundos.

ejemplo Ejemplo de evento: V1
{ "raw_path": "/path/to/resource", "method": "GET|POST|HEAD|...", "headers": {"header-key": "header-value", ... }, "query_string_parameters": {"key": "value", ...}, "body": "request-body", "is_base64_encoded": true|false }

Respuesta al servicio de VPC Lattice

La respuesta de la función de 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 servicio descodifica el contenido para recuperar el contenido binario y lo envía al cliente en el cuerpo de la respuesta HTTP.

El servicio VPC Lattice no respeta hop-by-hop los encabezados, como o. Connection Transfer-Encoding Puede omitir el encabezado Content-Length porque el servicio lo procesa antes de enviar las respuestas a los clientes.

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

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

Encabezados de varios valores

De forma predeterminada, VPC Lattice admite solicitudes de un cliente o las respuestas de una función de Lambda que contienen encabezados con varios valores o contienen el mismo encabezado varias veces. VPC Lattice también admite parámetros de consulta con varios valores para la misma clave.

En el caso de los encabezados de las solicitudes, si varios parámetros comparten el mismo nombre, VPC Lattice pasará ambos valores a los destinos. A continuación se muestra un ejemplo en el que header 1 es el nombre de dos encabezados independientes:

header1 = foo header1 = bar

A continuación, VPC Lattice envía ambos valores a los destinos:

"header1": ["foo", "bar"]

En el caso de las cadenas de consulta, si varios parámetros comparten el mismo nombre, gana el último valor. Esto significa que los parámetros son _not_ coalesced en un único valor si comparten el mismo nombre de clave.

A continuación se muestra un ejemplo en el que foo y bar son los valores de los parámetros con el mismo nombre, QS1:

http://www.example.com?&QS1=foo&QS1=bar

A continuación, VPC Lattice envía el último valor a los destinos:

"QS1": "bar"

Anulación del registro de la función de Lambda

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

Para sustituir una función de 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 oyente para que utilicen el nuevo grupo de destino en lugar del existente.

Cómo anular el registro de la función de Lambda mediante la consola
  1. Abra la consola de Amazon VPC en https://console.aws.amazon.com/vpc/.

  2. En el panel de navegación, en VPC Lattice, elija Grupos de destino.

  3. Elija el nombre del grupo de destino para mostrar sus detalles.

  4. En la pestaña Destinos, elija Anular registro.

  5. Cuando se le pida confirmación, ingrese confirm y luego elija Anular registro.

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

Use el comando deregister-targets.