

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Les fonctions Lambda sont des cibles dans VPC Lattice
<a name="lambda-functions"></a>

Vous pouvez enregistrer vos fonctions Lambda en tant que cibles auprès d'un groupe cible VPC Lattice et configurer une règle d'écoute pour transmettre les demandes de votre fonction Lambda au groupe cible. Lorsque le service transmet la demande à un groupe cible ayant une fonction Lambda comme cible, il invoque votre fonction Lambda et transmet le contenu de la demande à la fonction Lambda, au format JSON.

**Limitations**
+ La fonction Lambda et le groupe cible doivent être dans le même compte et dans la même région.
+ La taille maximale du corps de requête que vous pouvez envoyer à une fonction Lambda est de 6 Mo.
+ La taille maximale du JSON de réponse que la fonction Lambda peut envoyer est de 6 Mo.
+ Le protocole doit être HTTP ou HTTPS.

## Préparation de la fonction Lambda
<a name="prepare-lambda-function"></a>

Les recommandations suivantes s'appliquent si vous utilisez votre fonction Lambda avec un service VPC Lattice.

**Autorisations pour invoquer la fonction Lambda**  
Lorsque vous créez le groupe cible et que vous enregistrez la fonction Lambda à l'aide du AWS Management Console ou du, AWS CLI VPC Lattice ajoute les autorisations requises à votre politique de fonction Lambda en votre nom. 

Vous pouvez également ajouter vous-même des autorisations à l'aide de l'appel d'API suivant :

```
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
```

**Gestion des versions de fonction Lambda**  
Vous pouvez enregistrer une seule fonction Lambda par groupe cible. Pour vous assurer que vous pouvez modifier votre fonction Lambda et que le service VPC Lattice invoque toujours la version actuelle de la fonction Lambda, créez un alias de fonction et incluez-le dans l'ARN de la fonction lorsque vous enregistrez la fonction Lambda auprès du service VPC Lattice. *Pour plus d'informations, consultez les sections [Versions des fonctions Lambda](https://docs.aws.amazon.com/lambda/latest/dg/configuration-versions.html) et [Création d'un alias pour une fonction Lambda](https://docs.aws.amazon.com/lambda/latest/dg/configuration-aliases.html) dans le Guide du développeur.AWS Lambda *

## Création d'un groupe cible pour la fonction Lambda
<a name="register-lambda-function"></a>

Créez un groupe cible, qui sert à acheminer les demandes. Si le contenu de la demande correspond à une règle d'écoute avec une action pour le transmettre à ce groupe cible, le service VPC Lattice invoque la fonction Lambda enregistrée.

**Pour créer un groupe cible et enregistrer la fonction Lambda à l'aide de la console**

1. Ouvrez la console Amazon VPC à l’adresse [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/).

1. **Dans le volet de navigation, sous **VPC Lattice**, choisissez Target groups.**

1. Sélectionnez **Créer un groupe cible**.

1. Pour **Choisir un type de cible**, sélectionnez **Fonction Lambda**.

1. Pour **Nom du groupe cible**, saisissez un nom pour le groupe cible.

1. Pour la version de **structure d'événement Lambda, choisissez une version**. Pour de plus amples informations, veuillez consulter [Recevez des événements du service VPC Lattice](#receive-event-from-service).

1. (Facultatif) Pour ajouter des balises, développez les **balises**, choisissez **Ajouter une nouvelle balise**, puis entrez la clé et la valeur de la balise.

1. Choisissez **Suivant**.

1. Pour **Lambda function (Fonction Lambda)**, effectuez l'une des opérations suivantes :
   + Sélectionnez une fonction Lambda existante.
   + Créez une nouvelle fonction Lambda et sélectionnez-la.
   + Enregistrez la fonction Lambda ultérieurement.

1. Sélectionnez **Créer un groupe cible**.

**Pour créer un groupe cible et enregistrer la fonction Lambda à l'aide du AWS CLI**  
Utilisez les commandes [create-target-group](https://docs.aws.amazon.com/cli/latest/reference/vpc-lattice/create-target-group.html)et [register-targets](https://docs.aws.amazon.com/cli/latest/reference/vpc-lattice/register-targets.html).

## Recevez des événements du service VPC Lattice
<a name="receive-event-from-service"></a>

Le service VPC Lattice prend en charge l'invocation Lambda pour les requêtes via HTTP et HTTPS. Le service envoie un événement au format JSON et ajoute l'`X-Forwarded-For`en-tête à chaque demande.

**Encodage Base64**  
Le service Base64 code le corps si l'`content-encoding`en-tête est présent et que le type de contenu n'est pas l'un des suivants :
+ `text/*`
+ `application/json`
+ `application/xml`
+ `application/javascript`

Si l'en-tête `content-encoding` n'est pas présent, le codage Base64 dépend du type de contenu. Pour les types de contenu ci-dessus, le service envoie le corps tel quel, sans encodage Base64.

**Format de structure de l'événement**  
Lorsque vous créez ou mettez à jour un groupe cible de type`LAMBDA`, vous pouvez spécifier la version de la structure d'événements que reçoit votre fonction Lambda. Les versions possibles sont `V1` et`V2`.<a name="event-structure-v2"></a>

**Example Exemple d'événement : 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`  
Le corps de la demande. Présent uniquement si le protocole est HTTP, HTTPS ou gRPC.  
`headers`  
Les en-têtes HTTP de la demande. Présent uniquement si le protocole est HTTP, HTTPS ou gRPC.  
`identity`  
Les informations d'identité. Les champs suivants sont possibles.  
+ `principal`— Le principal authentifié. Présent uniquement si AWS l'authentification est réussie.
+ `principalOrgID`— L'identifiant de l'organisation pour le principal authentifié. Présent uniquement si AWS l'authentification est réussie.
+ `sessionName`— Le nom de la session authentifiée. Présent uniquement si AWS l'authentification est réussie.
+ `sourceVpcArn`— L'ARN du VPC d'où provient la demande. Présent uniquement si le VPC source peut être identifié.
+ `type`— La valeur est `AWS_IAM` si une politique d'authentification est utilisée et si AWS l'authentification est réussie.
Si les informations d'identification de Roles Anywhere sont utilisées et que l'authentification est réussie, les champs suivants sont possibles.  
+ `x509IssuerOu`— L'émetteur (OU).
+ `x509SanDns`— Le nom alternatif du sujet (DNS).
+ `x509SanNameCn`— Le nom alternatif de l'émetteur (nom/CN).
+ `x509SanUri`— Le nom alternatif du sujet (URI).
+ `x509SubjectCn`— Le nom du sujet (CN).  
`isBase64Encoded`  
Indique si le corps a été codé en base64. Présent uniquement si le protocole est HTTP, HTTPS ou gRPC et que le corps de la requête n'est pas déjà une chaîne.  
`method`  
Méthode HTTP de la demande. Présent uniquement si le protocole est HTTP, HTTPS ou gRPC.  
`path`  
Le chemin de la demande du client qui inclut les paramètres de chaîne de requête. Présent uniquement si le protocole est HTTP, HTTPS ou gRPC.  
`queryStringParameters`  
Les paramètres de la chaîne de requête HTTP. Présent uniquement si le protocole est HTTP, HTTPS ou gRPC.  
`serviceArn`  
L'ARN du service qui reçoit la demande.  
`serviceNetworkArn`  
L'ARN du réseau de service qui fournit la demande.  
`targetGroupArn`  
L'ARN du groupe cible qui reçoit la demande.  
`timeEpoch`  
Le temps, en microsecondes.<a name="event-structure-v1"></a>

**Example Exemple d'événement : 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
}
```

## Répondre au service VPC Lattice
<a name="respond-to-service"></a>

La réponse de votre fonction Lambda doit inclure le statut d'encodage en Base64, le code de statut et des en-têtes. Vous pouvez omettre le corps.

Pour inclure un contenu binaire dans le corps de la réponse, vous devez encoder le contenu en Base64 et définir `isBase64Encoded` sur `true`. Le service décode le contenu pour récupérer le contenu binaire et l'envoie au client dans le corps de la réponse HTTP.

Le service VPC Lattice n'honore pas hop-by-hop les en-têtes tels que ou. `Connection` `Transfer-Encoding` Vous pouvez omettre l'`Content-Length`en-tête car le service le calcule avant d'envoyer des réponses aux clients.

Voici un exemple de réponse d'une fonction Lambda :

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

## En-têtes à valeurs multiples
<a name="multi-value-headers"></a>

VPC Lattice prend en charge les demandes d'un client ou les réponses d'une fonction Lambda contenant des en-têtes avec plusieurs valeurs ou contenant le même en-tête plusieurs fois. VPC Lattice transmet toutes les valeurs aux cibles.

Dans l'exemple suivant, deux en-têtes portent header1 des valeurs différentes.

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

Avec une structure d'événements V2, VPC Lattice envoie les valeurs dans une liste. Par exemple :

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

Avec une structure d'événements V1, VPC Lattice combine les valeurs en une seule chaîne. Par exemple :

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

## Paramètres de chaîne de requête à valeurs multiples
<a name="multi-value-string-parameters"></a>

VPC Lattice prend en charge les paramètres de requête comportant plusieurs valeurs pour la même clé.

Dans l'exemple suivant, deux paramètres portent QS1 des valeurs différentes.

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

Avec une structure d'événements V2, VPC Lattice envoie les valeurs dans une liste. Par exemple :

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

Avec une structure d'événements V1, VPC Lattice utilise la dernière valeur transmise. Par exemple :

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

## Annulation de l'enregistrement de la fonction Lambda
<a name="deregister-lambda-function"></a>

Si vous n'avez plus besoin d'envoyer le trafic vers votre fonction Lambda, vous pouvez annuler son enregistrement. Lorsque vous annulez l'enregistrement d'une fonction Lambda, les demandes en cours échouent avec des erreurs HTTP 5XX.

Pour remplacer une fonction Lambda, nous vous recommandons de créer un nouveau groupe cible, d'enregistrer la nouvelle fonction auprès du nouveau groupe cible et de mettre à jour les règles d'écouteur pour utiliser le nouveau groupe cible au lieu du groupe existant.

**Pour désenregistrer une fonction Lambda à l'aide de la console**

1. Ouvrez la console Amazon VPC à l’adresse [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/).

1. **Dans le volet de navigation, sous **VPC Lattice**, choisissez Target groups.**

1. Sélectionnez le nom du groupe cible pour afficher sa page de détails.

1. Dans l'onglet **Cibles**, choisissez **Deregister (Annuler l'enregistrement)**.

1. Lorsque vous êtes invité à confirmer, entrez **confirm** puis choisissez **Désenregistrer**.

**Pour annuler l'enregistrement de la fonction Lambda à l'aide du AWS CLI**  
Utilisez la commande [deregister-targets](https://docs.aws.amazon.com/cli/latest/reference/vpc-lattice/deregister-targets.html).