

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
<a name="lambda-functions"></a>

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.

**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
<a name="prepare-lambda-function"></a>

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 Consola de administración de AWS 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](https://docs.aws.amazon.com/lambda/latest/dg/configuration-versions.html) y [Creación de un alias para una función de Lambda](https://docs.aws.amazon.com/lambda/latest/dg/configuration-aliases.html) en la Guía para desarrolladores.AWS Lambda *

## Creación de un grupo de destino para la función de Lambda
<a name="register-lambda-function"></a>

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/](https://console.aws.amazon.com/vpc/).

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

1. Elija **Crear grupo de destino**.

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

1. En **Nombre del grupo de destino**, escriba el nombre del grupo de destino.

1. 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](#receive-event-from-service).

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

1. Elija **Siguiente**.

1. 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.

1. Elija **Crear grupo de destino**.

**Para crear un grupo objetivo y registrar la función Lambda mediante el AWS CLI**  
Utilice los comandos [create-target-group](https://docs.aws.amazon.com/cli/latest/reference/vpc-lattice/create-target-group.html)y [register-targets](https://docs.aws.amazon.com/cli/latest/reference/vpc-lattice/register-targets.html).

## Recepción de eventos del servicio de VPC Lattice
<a name="receive-event-from-service"></a>

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`.<a name="event-structure-v2"></a>

**Example Ejemplo de evento: V2**  

```
{
    "version": "2.0",
    "path": "/?query1=value1&query2=value2",
    "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 del cliente que incluye los parámetros de la cadena de consulta. 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.<a name="event-structure-v1"></a>

**Example Ejemplo de evento: V1**  

```
{
    "raw_path": "/path/to/resource?query1=value1&query2=value2",
    "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
<a name="respond-to-service"></a>

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,
    "headers": {
        "Set-cookie": "cookies",
        "Content-Type": "application/json"
    },
    "body": "Hello from Lambda (optional)"
}
```

## Encabezados de varios valores
<a name="multi-value-headers"></a>

VPC Lattice admite las solicitudes de un cliente o las respuestas de una función Lambda que contienen encabezados con varios valores o contienen el mismo encabezado varias veces. VPC Lattice pasa todos los valores a los objetivos.

En el siguiente ejemplo, hay dos encabezados nombrados header1 con valores diferentes.

```
header1 = value1
header1 = value2
```

Con una estructura de eventos V2, VPC Lattice envía los valores de una lista. Por ejemplo:

```
"header1": ["value1", "value2"]
```

Con una estructura de eventos V1, VPC Lattice combina los valores en una sola cadena. Por ejemplo:

```
"header1": "value1, value2"
```

## Parámetros de cadena de consulta con varios valores
<a name="multi-value-string-parameters"></a>

VPC Lattice admite parámetros de consulta con varios valores para la misma clave.

En el siguiente ejemplo, hay dos parámetros nombrados QS1 con valores diferentes.

```
http://www.example.com?&QS1=value1&QS1=value2
```

Con una estructura de eventos V2, VPC Lattice envía los valores de una lista. Por ejemplo:

```
"QS1": ["value1", "value2"]
```

Con una estructura de eventos V1, VPC Lattice usa el último valor pasado. Por ejemplo:

```
"QS1": "value2"
```

## Anulación del registro de la función de Lambda
<a name="deregister-lambda-function"></a>

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/](https://console.aws.amazon.com/vpc/).

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

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

1. En la pestaña **Destinos**, elija **Anular registro**.

1. 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](https://docs.aws.amazon.com/cli/latest/reference/vpc-lattice/deregister-targets.html).