

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.

# Présentation des méthodes d’invocation des fonctions Lambda
<a name="lambda-invocation"></a>

Après avoir déployé votre fonction Lambda, vous pouvez l’invoquer de plusieurs manières :
+ La [console Lambda](testing-functions.md) : utilisez la console Lambda pour créer rapidement un événement de test pour invoquer votre fonction.
+ Le [AWS SDK](https://aws.amazon.com/developer/tools/) — Utilisez le AWS SDK pour appeler votre fonction par programmation.
+ L’API [Invoke](https://docs.aws.amazon.com/lambda/latest/api/API_Invoke.html) : utilisez l’API Lambda Invoke pour invoquer directement votre fonction.
+ The [AWS Command Line Interface (AWS CLI)](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/invoke.html) — Utilisez la `aws lambda invoke` AWS CLI commande pour appeler directement votre fonction depuis la ligne de commande.
+ Point de [terminaison HTTP (S) d'une URL](urls-configuration.md) de fonction : utilisez la fonction URLs pour créer un point de terminaison HTTP (S) dédié que vous pouvez utiliser pour appeler votre fonction.

Toutes ces méthodes sont des méthodes *directes* pour invoquer votre fonction. Dans Lambda, un cas d’utilisation courant consiste à invoquer votre fonction en fonction d’un événement qui se produit ailleurs dans votre application. Certains services peuvent invoquer une fonction Lambda à chaque nouvel événement. C’est ce qu’on appelle un [déclencheur](lambda-services.md). Pour les services basés sur les flux et les files d’attente, Lambda invoque la fonction avec des lots d’enregistrements. C’est ce qu’on appelle un [mappage des sources d’événements](invocation-eventsourcemapping.md).

Lorsque vous invoquez une fonction, vous pouvez choisir de le faire de façon synchrone ou asynchrone. Avec une [invocation synchrone](invocation-sync.md), vous attendez de la fonction qu'elle traite l'événement et renvoie une réponse. Avec l'invocation [asynchrone](invocation-async.md), Lambda place en file d'attente l'événement à traiter, et renvoie une réponse immédiatement. Le [paramètre de requête `InvocationType` de l’API Invoke](https://docs.aws.amazon.com/lambda/latest/api/API_Invoke.html#API_Invoke_RequestParameters) détermine la manière dont Lambda appelle votre fonction. Une valeur `RequestResponse` indique une invocation synchrone et une valeur `Event` indique une invocation asynchrone.

Pour appeler votre fonction IPv6, utilisez les points de terminaison publics [à double pile](https://docs.aws.amazon.com/general/latest/gr/rande.html#dual-stack-endpoints) de Lambda. Les points de terminaison à double pile prennent en charge les deux et IPv4 . IPv6 Les points de terminaison à double pile de Lambda utilisent la syntaxe suivante :

```
protocol://lambda.us-east-1.api.aws
```

Vous pouvez également utiliser la [fonction Lambda URLs](urls-configuration.md) pour appeler des fonctions. IPv6 Les points de terminaison URL de fonction ont le format suivant :

```
https://url-id.lambda-url.us-east-1.on.aws
```

Pour les invocations synchrones, si l’invocation de la fonction entraîne une erreur, consultez le message d’erreur dans la réponse et réessayez l’invocation manuellement. Pour les invocations asynchrones, Lambda gère les nouvelles tentatives et peut envoyer des enregistrements d’invocation à une [destination](invocation-async-retain-records.md#invocation-async-destinations).

# Invocation d’une fonction Lambda de manière synchrone
<a name="invocation-sync"></a>

Lorsque vous invoquez une fonction de façon synchrone, Lambda l’exécute et attend une réponse. Une fois l’exécution de la fonction terminée, Lambda renvoie la réponse du code de la fonction avec des données supplémentaires, telles que la version de la fonction qui a été invoquée. Pour invoquer une fonction de façon synchrone avec AWS CLI, utilisez la commande `invoke`.

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

L’option **cli-binary-format** est obligatoire si vous utilisez AWS CLI version 2. Pour faire de ce paramètre le paramètre par défaut, exécutez `aws configure set cli-binary-format raw-in-base64-out`. Pour plus d’informations, consultez les [options de ligne de commande globales AWS CLI prises en charge](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-options.html#cli-configure-options-list) dans le *Guide de l’utilisateur AWS Command Line Interface version 2*.

Vous devriez voir la sortie suivante :

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

Le diagramme suivant montre des clients invoquant une fonction Lambda de manière synchrone. Lambda envoie les événements directement à la fonction et renvoie la réponse de la fonction à l’appelant.

![\[\]](http://docs.aws.amazon.com/fr_fr/lambda/latest/dg/images/invocation-sync.png)


`payload` est une chaîne qui contient un événement au format JSON. Le nom du fichier où l’AWS CLI écrit la réponse de la fonction est `response.json`. Si la fonction renvoie un objet ou une erreur, le corps de la réponse est l’objet ou l’erreur au format JSON. Si la fonction se termine sans erreur, le corps de la réponse est `null`.

**Note**  
Lambda n’attend pas que les extensions externes se terminent avant d’envoyer la réponse. Les extensions externes s’exécutent comme des processus indépendants dans l’environnement d’exécution et continuent de s’exécuter après l’invocation de la fonction. Pour plus d’informations, consultez [Utilisation des extensions Lambda pour augmenter vos fonctions Lambda](lambda-extensions.md).

La sortie de la commande qui s’affiche dans le terminal inclut des informations extraites d’en-têtes figurant dans la réponse de Lambda. Ces informations incluent la version qui a traité l’événement (utile lorsque vous utilisez des [alias](configuration-aliases.md)) et le code d’état renvoyé par Lambda. Si Lambda a pu exécuter la fonction, le code d’état est 200, même si la fonction a renvoyé une erreur.

**Note**  
Pour les fonctions avec un long délai d’attente, votre client peut être déconnecté lors d’une invocation synchrone, pendant qu’il attend une réponse. Configurez votre client HTTP, SDK, pare-feu, proxy ou système d’exploitation pour permettre des connexions longues avec des paramètres de délai d’attente ou de keep-alive.

Si Lambda n’a pas pu exécuter la fonction, l’erreur s’affiche dans la sortie.

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

Vous devriez voir la sortie suivante:

```
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 est un outil à code open-source qui vous permet d’interagir avec les services AWS à l’aide de commandes dans votre ligne de commande shell. Pour effectuer les étapes de cette section, vous devez disposer de la [version 2 de l’AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html).

Vous pouvez utiliser [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) pour récupérer les journaux d’une invocation à l’aide de l’option de commande `--log-type`. La réponse inclut un champ `LogResult` qui contient jusqu’à 4 Ko de journaux codés en base64 provenant de l’invocation.

**Example récupérer un ID de journal**  
L’exemple suivant montre comment récupérer un *ID de journal* à partir du champ `LogResult` d’une fonction nommée `my-function`.  

```
aws lambda invoke --function-name my-function out --log-type Tail
```
Vous devriez voir la sortie suivante:  

```
{
    "StatusCode": 200,
    "LogResult": "U1RBUlQgUmVxdWVzdElkOiA4N2QwNDRiOC1mMTU0LTExZTgtOGNkYS0yOTc0YzVlNGZiMjEgVmVyc2lvb...",
    "ExecutedVersion": "$LATEST"
}
```

**Example décoder les journaux**  
Dans la même invite de commandes, utilisez l’utilitaire `base64` pour décoder les journaux. L’exemple suivant montre comment récupérer les journaux encodés en base64 pour `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
```
L’option **cli-binary-format** est obligatoire si vous utilisez AWS CLI version 2. Pour faire de ce paramètre le paramètre par défaut, exécutez `aws configure set cli-binary-format raw-in-base64-out`. Pour plus d’informations, consultez les [options de ligne de commande globales AWS CLI prises en charge](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-options.html#cli-configure-options-list) dans le *Guide de l’utilisateur AWS Command Line Interface version 2*.  
Vous devriez voir la sortie suivante :  

```
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
```
L’utilitaire `base64` est disponible sous Linux, macOS et [Ubuntu sous Windows](https://docs.microsoft.com/en-us/windows/wsl/install-win10). Les utilisateurs de macOS auront peut-être besoin d’utiliser `base64 -D`.

Pour plus d’informations sur l’API `Invoke` et la liste complète des paramètres, en-têtes et erreurs, consultez [Invoquer](https://docs.aws.amazon.com/lambda/latest/api/API_Invoke.html).

Lorsque vous invoquez une fonction directement, vous pouvez vérifier la réponse pour les erreurs et réessayer. AWS CLI et le kit SDK AWS effectuent automatiquement de nouvelles tentatives selon les délais d’expiration du client, les limitations et les erreurs de service. Pour plus d’informations, consultez [Présentation du comportement des nouvelles tentatives dans Lambda](invocation-retries.md).

# Invocation d’une fonction Lambda de manière asynchrone
<a name="invocation-async"></a>

Plusieurs services Services AWS, tels qu’Amazon Simple Storage Service (Amazon S3) et Amazon Simple Notification Service (Amazon SNS), invoquent des fonctions de manière asynchrone pour traiter les événements. Vous pouvez également invoquer une fonction Lambda de manière asynchrone à l’aide d’AWS Command Line Interface (AWS CLI) ou de l’un des kits SDK AWS. Lorsque vous invoquez une fonction de manière asynchrone, vous n’attendez pas de réponse de la part du code de la fonction. Vous remettez l’événement à Lambda qui se charge du reste. Vous pouvez configurer la façon dont Lambda gère les erreurs, et vous pouvez envoyer des enregistrements d’invocation à une ressource en aval telle qu’Amazon Simple Queue Service (Amazon SQS) ou Amazon EventBridge (EventBridge) pour enchaîner les composants de votre application.

Le diagramme suivant montre des clients invoquant une fonction Lambda de manière asynchrone. Lambda place les événements en file d’attente avant de les envoyer à la fonction.

![\[\]](http://docs.aws.amazon.com/fr_fr/lambda/latest/dg/images/features-async.png)


Pour une invocation asynchrone, Lambda place l’événement dans une file d’attente et renvoie une réponse de succès sans plus informations. Un processus distinct lit les événements à partir de la file d’attente et les envoie à votre fonction.

 Pour invoquer une fonction Lambda de manière asynchrone à l’aide de l’AWS Command Line Interface (AWS CLI) ou de l’un des kits SDK AWS, définissez le paramètre [InvocationType](https://docs.aws.amazon.com/lambda/latest/api/API_Invoke.html#lambda-Invoke-request-InvocationType) sur `Event`. L’exemple suivant montre une commande AWS CLI permettant d’invoquer une fonction.

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

Vous devriez voir la sortie suivante :

```
{
    "StatusCode": 202
}
```

L’option **cli-binary-format** est obligatoire si vous utilisez AWS CLI version 2. Pour faire de ce paramètre le paramètre par défaut, exécutez `aws configure set cli-binary-format raw-in-base64-out`. Pour plus d’informations, consultez les [options de ligne de commande globales prises en charge par l’AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-options.html#cli-configure-options-list) dans le *Guide de l’utilisateur AWS Command Line Interface version 2*.

Le fichier de sortie (`response.json`) ne contient pas d’informations, mais il est tout de même créé lorsque vous exécutez cette commande. Si Lambda n’est pas en mesure d’ajouter l’événement à la file d’attente, un message d’erreur s’affiche dans la sortie de la commande.

# Méthode de gestion des erreurs et nouvelles tentatives d’invocation asynchrone par Lambda
<a name="invocation-async-error-handling"></a>

Lambda gère la file d’attente d’événements asynchrones de votre fonction, et effectue de nouvelles tentatives en cas d’erreur. Si la fonction renvoie une erreur, Lambda tente par défaut de l’exécuter deux fois de plus, avec une minute d’attente entre les deux premières tentatives, et deux minutes entre la deuxième et la troisième tentative. Les erreurs de fonction comprennent des erreurs renvoyées par le code de la fonction et des erreurs renvoyées par l’environnement d’exécution de la fonction, comme les délais d’expiration.

Si la fonction n’a pas suffisamment de simultanéité disponible pour traiter tous les événements, des demandes supplémentaires sont bloquées. Pour les erreurs de limitation (429) et les erreurs système (série 500), Lambda renvoie l’événement dans la file d’attente et tente d’exécuter à nouveau la fonction pendant une période pouvant aller jusqu’à 6 heures par défaut. L’intervalle de nouvelle tentative augmente de manière exponentielle de 1 seconde après la première tentative jusqu’à un maximum de 5 minutes. Si la file d’attente contient de nombreuses entrées, Lambda augmente l’intervalle entre les tentatives et réduit la fréquence des événements de lecture à partir de la file d’attente.

Même si votre fonction ne renvoie pas d’erreur, elle peut recevoir plusieurs fois le même événement de Lambda, car la file d’attente elle-même est cohérente à terme. Si la fonction ne peut pas à prendre en charge les événements entrants, ils peuvent également être supprimés de la file d’attente sans être envoyés à la fonction. Assurez-vous que le code de votre fonction gère correctement les événements dupliqués et que vous avez suffisamment de simultanéité disponible pour gérer toutes les invocations.

Lorsque la file d’attente est très longue, il peut arriver que de nouveaux événements expirent avant que Lambda ait la possibilité de les envoyer à votre fonction. Quand un événement expire ou échoue à toutes les tentatives de traitement, Lambda le supprime. Vous pouvez [configurer la gestion des erreurs](invocation-async-configuring.md) pour une fonction de façon à réduire le nombre de nouvelles tentatives que Lambda effectue, ou à supprimer les événements non traités plus rapidement. Pour capturer les événements supprimés, [configurez une file d’attente de lettres mortes](invocation-async-retain-records.md#invocation-dlq) pour la fonction. Pour capturer les enregistrements des invocations ayant échoué (comme les expirations de délai d’expiration ou les erreurs d’environnement d’exécution), [créez une destination en cas d’échec](invocation-async-retain-records.md#invocation-async-destinations). 

# Configuration de la gestion des erreurs pour les invocations asynchrones Lambda
<a name="invocation-async-configuring"></a>

Utilisez les paramètres suivants pour configurer la façon dont Lambda gère les erreurs et les nouvelles tentatives pour les invocations de fonctions asynchrones :
+ [MaximumEventAgeInSeconds](https://docs.aws.amazon.com/lambda/latest/api/API_PutFunctionEventInvokeConfig.html#lambda-PutFunctionEventInvokeConfig-request-MaximumEventAgeInSeconds) : la durée maximale, en secondes, pendant laquelle Lambda conserve un événement dans la file d’attente des événements asynchrones avant de le supprime.
+ [MaximumRetryAttempts](https://docs.aws.amazon.com/lambda/latest/api/API_PutFunctionEventInvokeConfig.html#lambda-PutFunctionEventInvokeConfig-request-MaximumRetryAttempts) : le nombre maximum de nouvelles tentatives que Lambda effectue quand la fonction renvoie une erreur.

Utilisez la console Lambda ou l’AWS CLI pour configurer les paramètres de gestion des erreurs sur une fonction, une version ou un alias.

------
#### [ Console ]

**Pour configurer la gestion des erreurs**

1. Ouvrez la [page Functions](https://console.aws.amazon.com/lambda/home#/functions) (Fonctions) de la console Lambda.

1. Choisissez une fonction.

1. Sélectionnez **Configuration**, puis **Asynchronous invocation (Invocation asynchrone)**.

1. Sous **Asynchronous invocation (Invocation asynchrone)**, choisissez **Edit (Modifier)**.

1. Configurez les paramètres suivants.
   + **Maximum age of event** (Âge maximal de l’événement) – Durée maximale, jusqu’à 6 heures, pendant laquelle Lambda conserve un événement dans la file d’attente d’événements asynchrones.
   + **Retry attempts (Nouvelles tentatives)** – Nombre de nouvelles tentatives, entre 0 et 2, que Lambda effectue lorsque la fonction renvoie une erreur.

1. Choisissez **Enregistrer**.

------
#### [ AWS CLI ]

Pour configurer l’invocation asynchrone avec l’AWS CLI, utilisez la commande [put-function-event-invoke-config](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/put-function-event-invoke-config.html). L’exemple suivant montre comment configurer une fonction avec un âge d’événement maximal de 1 heure et aucune nouvelle tentative.

```
aws lambda put-function-event-invoke-config \ 
  --function-name error \
  --maximum-event-age-in-seconds 3600 \
  --maximum-retry-attempts 0
```

La commande `put-function-event-invoke-config` remplace toute configuration existante sur la fonction, la version ou l’alias. Pour configurer une option sans en réinitialiser d’autres, utilisez [update-function-event-invoke-config](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/update-function-event-invoke-config.html). L’exemple suivant illustre la configuration de Lambda pour l’envoie d’un enregistrement à une file d’attente SQS standard nommée `destination` lorsqu’un événement ne peut pas être traité.

```
aws lambda update-function-event-invoke-config \
  --function-name my-function \
  --destination-config '{"OnFailure":{"Destination": "arn:aws:sqs:us-east-1:123456789012:destination"}}'
```

------

Vous devriez voir la sortie suivante :

```
{
    "LastModified": 1573686021.479,
    "FunctionArn": "arn:aws:lambda:us-east-1:123456789012:function:my-function:$LATEST",
    "MaximumRetryAttempts": 0,
    "MaximumEventAgeInSeconds": 3600,
    "DestinationConfig": {
        "OnSuccess": {},
        "OnFailure": {}
    }
}
```

Quand un événement d’invocation dépasse l’âge maximum ou échoue à toutes les tentatives, Lambda le supprime. Pour conserver une copie des événements supprimés, configurez une [destination](invocation-async-retain-records.md#invocation-async-destinations) pour les événements ayant échoué.

# Capture des enregistrements d’invocations asynchrones Lambda
<a name="invocation-async-retain-records"></a>

Lambda peut envoyer des enregistrements d'appels asynchrones à l'une des entités suivantes. Services AWS
+ **Amazon SQS** : une file d’attente SQS standard
+ **Amazon SNS** : une rubrique SNS standard
+ **Amazon S3** : un compartiment Amazon S3 (uniquement en cas d’échec)
+ **AWS Lambda** : une fonction Lambda
+ **Amazon EventBridge** — Un bus EventBridge événementiel

L’enregistrement d’invocation contient des détails sur la demande et la réponse au format JSON. Vous pouvez configurer des destinations distinctes pour les événements qui ont été traités avec succès et ceux dont le traitement a échoué. Vous pouvez également configurer une file d’attente Amazon SQS ou une rubrique Amazon SNS standard en tant que file d’attente de lettres mortes pour les événements abandonnés. Pour les files d’attente de lettres mortes, Lambda envoie uniquement le contenu de l’événement, sans plus d’informations sur la réponse.

Si Lambda ne parvient pas à envoyer un enregistrement vers une destination que vous avez configurée, il envoie une `DestinationDeliveryFailures` métrique à Amazon. CloudWatch Cela peut se produire si votre configuration inclut un type de destination non pris en charge, tel qu’une file d’attente FIFO Amazon SQS ou une rubrique FIFO Amazon SNS. Des erreurs de remise peuvent également se produire en raison d’erreurs d’autorisations et de limites de taille. Pour plus d’informations sur les métriques d’invocation Lambda, consultez [Métriques d'invocation](monitoring-metrics-types.md#invocation-metrics).

**Note**  
Pour empêcher une fonction de se déclencher, vous pouvez définir la simultanéité réservée de la fonction sur zéro. Lorsque vous définissez la simultanéité réservée sur zéro pour une fonction invoquée de manière asynchrone, Lambda commence à envoyer les nouveaux événements à la [file d’attente de lettres mortes](#invocation-dlq) ou à la [destination d’événement](#invocation-async-destinations) en situation d’échec, sans aucune nouvelle tentative. Pour traiter les événements qui ont été envoyés alors que la simultanéité réservée était définie sur zéro, vous devez consommer les événements de la file d’attente de lettres mortes ou de la destination des événements en situation d’échec.

## Ajout d’une destination
<a name="invocation-async-destinations"></a>

Pour retenir les enregistrements des invocations asynchrones, ajoutez une destination à votre fonction. Vous pouvez choisir d’envoyer les invocations réussies ou non à une destination. Chaque fonction peut avoir plusieurs destinations. Vous pouvez donc configurer des destinations distinctes pour les événements réussis et échoués. Chaque enregistrement envoyé à la destination est un document JSON avec des détails sur l’invocation. Comme les paramètres de gestion des erreurs, vous pouvez configurer des destinations au niveau d’une fonction, d’une version de fonction ou d’un alias.

**Astuce**  
Vous pouvez également conserver les enregistrements des appels ayant échoué pour les types de mappage de sources d'événements suivants : [Amazon Kinesis, Amazon](kinesis-on-failure-destination.md#kinesis-on-failure-destination-console) [DynamoDB et Apache Kafka (Amazon](services-dynamodb-errors.md) MSK [et Apache Kafka autogéré)](kafka-on-failure.md#kafka-onfailure-destination).<a name="destinations-permissions"></a>

Le tableau suivant répertorie les destinations prises en charge pour les enregistrements d’invocation asynchrones. Pour que Lambda envoie correctement les enregistrements vers la destination que vous avez choisie, assurez-vous que le [rôle d’exécution](lambda-intro-execution-role.md) de votre fonction contient également les autorisations appropriées. Le tableau décrit également comment chaque type de destination reçoit l’enregistrement d’invocation JSON.


| Type de destination | Autorisation obligatoire | Format JSON spécifique à la destination | 
| --- | --- | --- | 
|  File d’attente Amazon SQS  |  [sqs : SendMessage](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html)  |  Lambda transmet l’enregistrement d’invocation en tant que `Message` à la destination.  | 
|  Rubrique Amazon SNS  |  [sns:Publish](https://docs.aws.amazon.com/sns/latest/api/API_Publish.html)  |  Lambda transmet l’enregistrement d’invocation en tant que `Message` à la destination.  | 
|  Compartiment Amazon S3 (uniquement en cas d’échec)  |  [s3 : PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html) [s3 : ListBucket](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/lambda/latest/dg/invocation-async-retain-records.html)  | 
|  Fonction Lambda  |  [lambda : InvokeFunction](https://docs.aws.amazon.com/lambda/latest/api/API_Invoke.html)  |  Lambda transmet l’enregistrement d’invocation comme charge utile à la fonction.  | 
|  EventBridge  |  [événements : PutEvents](https://docs.aws.amazon.com/eventbridge/latest/APIReference/API_PutEvents.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/lambda/latest/dg/invocation-async-retain-records.html)  | 

**Note**  
Pour les destinations Amazon S3, si vous avez activé le chiffrement sur le compartiment à l'aide d'une clé KMS, votre fonction a également besoin de l'GenerateDataKeyautorisation [kms :](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html).

**Important**  
Lorsque vous utilisez Amazon SNS comme destination, sachez que la taille maximale des messages d’Amazon SNS est limitée à 256 Ko. Si vos données utiles d’invocation asynchrone approchent 1 Mo, l’enregistrement d’invocation (qui inclut les données utiles d’origine ainsi que des métadonnées supplémentaires) peut dépasser la limite d’Amazon SNS et entraîner des échecs de livraison. Envisagez d’utiliser des destinations Amazon SQS ou Amazon S3 pour des données utiles plus importantes.

Les étapes suivantes expliquent comment configurer une destination pour une fonction à l’aide de la console Lambda et de l’ AWS CLI.

------
#### [ Console ]

1. Ouvrez la [page Functions](https://console.aws.amazon.com/lambda/home#/functions) (Fonctions) de la console Lambda.

1. Choisissez une fonction.

1. Sous **Function overview (Vue d’ensemble de la fonction)**, choisissez **Add destination (Ajouter une destination)**.

1. Pour **Source**, choisissez **Asynchronous invocation (Invocation asynchrone)**.

1. Pour **Condition** choisissez l’une des options suivantes :
   + **On failure (En cas d’échec)** – Envoyer un enregistrement quand l’événement échoue à toutes les tentatives de traitement ou dépasse l’âge maximal.
   + **On success (En cas de succès)** – Envoyer un enregistrement quand la fonction traite avec succès une invocation asynchrone.

1. Pour **Type de destination**, choisissez le type de ressource qui reçoit l’enregistrement d’invocation.

1. Pour **Destination**, choisissez une ressource.

1. Choisissez **Enregistrer**.

------
#### [ AWS CLI ]

Pour configurer une destination à l'aide de AWS CLI, exécutez la commande [update-function-event-invoke-config](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/update-function-event-invoke-config.html). L’exemple suivant illustre la configuration de Lambda pour l’envoie d’un enregistrement à une file d’attente SQS standard nommée `destination` lorsqu’un événement ne peut pas être traité.

```
aws lambda update-function-event-invoke-config \
  --function-name my-function \
  --destination-config '{"OnFailure":{"Destination": "arn:aws:sqs:us-east-1:123456789012:destination"}}'
```

------

### Pratiques exemplaires en matière de sécurité pour les destinations Amazon S3
<a name="s3-destination-security"></a>

La suppression d’un compartiment S3 configuré comme destination sans supprimer la destination de la configuration de votre fonction peut engendrer un risque de sécurité. Si un autre utilisateur connaît le nom de votre compartiment de destination, il peut recréer le compartiment dans son Compte AWS. Les enregistrements des invocations ayant échoué seront envoyés dans son compartiment, exposant potentiellement les données de votre fonction.

**Avertissement**  
Pour vous assurer que les enregistrements d'invocation de votre fonction ne peuvent pas être envoyés vers un compartiment S3 d'un autre Compte AWS, ajoutez une condition au rôle d'exécution de votre fonction qui limite `s3:PutObject` les autorisations aux compartiments de votre compte. 

L’exemple suivant présente une politique IAM qui limite les autorisations `s3:PutObject` de votre fonction aux seuls compartiments de votre compte. Cette politique donne également à Lambda l’autorisation `s3:ListBucket` dont il a besoin pour utiliser un compartiment S3 comme destination.

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "S3BucketResourceAccountWrite",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::*/*",
                "arn:aws:s3:::*"
            ],
            "Condition": {
                "StringEquals": {
                    "s3:ResourceAccount": "111122223333"
                }
            }
        }
    ]
}
```

Pour ajouter une politique d'autorisations au rôle d'exécution de votre fonction à l'aide du AWS Management Console ou AWS CLI, reportez-vous aux instructions des procédures suivantes :

------
#### [ Console ]

**Pour ajouter une politique d’autorisations au rôle d’exécution d’une fonction (console)**

1. Ouvrez la [page Functions](https://console.aws.amazon.com/lambda/home#/functions) (Fonctions) de la console Lambda.

1. Sélectionnez la fonction Lambda dont vous voulez modifier le rôle d’exécution.

1. Sous l’onglet **Configuration**, sélectionnez **Autorisations**.

1. Sous l’onglet **Rôle d’exécution**, sélectionnez le **Nom du rôle** de votre fonction pour ouvrir la page de console IAM du rôle.

1. Ajoutez une politique d’autorisations de au rôle en procédant comme suit :

   1. Dans le volet **Politiques d’autorisations**, choisissez **Ajouter des autorisations**, puis **Créer une politique en ligne**.

   1. Dans l’**Éditeur de politique**, sélectionnez **JSON**.

   1. Collez la politique que vous souhaitez ajouter dans l’éditeur (en remplacement du JSON existant), puis choisissez **Suivant**.

   1. Sous **Détails de la politique**, saisissez un **Nom de la politique**.

   1. Choisissez **Create Policy** (Créer une politique).

------
#### [ AWS CLI ]

**Pour ajouter une politique d’autorisations au rôle d’exécution d’une fonction (CLI)**

1. Créez un document de politique JSON avec les autorisations requises et enregistrez-le dans un répertoire local.

1. Utilisez la commande `put-role-policy` de la CLI IAM pour ajouter des autorisations au rôle d’exécution de votre fonction. Exécutez la commande suivante depuis le répertoire dans lequel vous avez enregistré votre document de politique JSON et remplacez le nom du rôle, le nom de la politique et le document de politique par vos propres valeurs.

   ```
   aws iam put-role-policy \
   --role-name my_lambda_role \
   --policy-name LambdaS3DestinationPolicy \
   --policy-document file://my_policy.json
   ```

------

### Exemple d’enregistrement d’invocation
<a name="destination-example-record"></a>

Quand une invocation correspond à la condition, Lambda envoie à la destination [un document JSON](#destinations-permissions) avec des détails sur l’invocation. L'exemple suivant illustre un enregistrement d’invocation pour un événement dont le traitement a échoué à trois reprises en raison d'une erreur de fonction.

**Example**  

```
{
    "version": "1.0",
    "timestamp": "2019-11-14T18:16:05.568Z",
    "requestContext": {
        "requestId": "e4b46cbf-b738-xmpl-8880-a18cdf61200e",
        "functionArn": "arn:aws:lambda:us-east-1:123456789012:function:my-function:$LATEST",
        "condition": "RetriesExhausted",
        "approximateInvokeCount": 3
    },
    "requestPayload": {
        "ORDER_IDS": [
            "9e07af03-ce31-4ff3-xmpl-36dce652cb4f",
            "637de236-e7b2-464e-xmpl-baf57f86bb53",
            "a81ddca6-2c35-45c7-xmpl-c3a03a31ed15"
        ]
    },
    "responseContext": {
        "statusCode": 200,
        "executedVersion": "$LATEST",
        "functionError": "Unhandled"
    },
    "responsePayload": {
        "errorMessage": "RequestId: e4b46cbf-b738-xmpl-8880-a18cdf61200e Process exited before completing request"
    }
}
```

L’enregistrement d’invocation contient des détails sur l’événement, la réponse et la raison pour laquelle l’enregistrement a été envoyé.

### Suivi des demandes vers les destinations
<a name="destinations-tracing"></a>

Vous pouvez utiliser AWS X-Ray pour visualiser une vue connectée de chaque demande lorsqu’elle est placée en file d’attente, traitée par une fonction Lambda et transmise au service de destination. Lorsque vous activez le suivi X-Ray pour une fonction ou un service qui invoque une fonction, Lambda ajoute un en-tête X-Ray à la demande et transmet l’en-tête au service de destination. Les traces des services en amont sont automatiquement liées aux traces des fonctions Lambda en aval et des services de destination, créant ainsi une end-to-end vue de l'ensemble de l'application. Pour plus d’informations sur le suivi, consultez [Visualisez les invocations de fonctions Lambda à l'aide de AWS X-Ray](services-xray.md).

## Ajout d’une file d’attente de lettres mortes
<a name="invocation-dlq"></a>

Comme alternative à une [destination réservée aux échecs](#invocation-async-destinations), vous pouvez configurer votre fonction avec une file d’attente de lettres mortes pour enregistrer les événements ignorés en vue d’un traitement ultérieur. Une file d’attente de lettres mortes agit de la même manière qu’une destination réservée aux échecs en ce sens qu’elle est utilisée lorsqu’un événement échoue à toutes les tentatives de traitement ou expire sans être traité. Toutefois, vous ne pouvez ajouter ou supprimer une file d’attente de lettres mortes qu’au niveau de la fonction. Les versions de fonctions utilisent les mêmes paramètres de file d’attente de lettres mortes que la version non publiée (\$1LATEST). Les destinations réservées aux échecs prennent également en charge des cibles supplémentaires et incluent des détails sur la réponse de la fonction dans l’enregistrement d’invocation.

Pour retraiter les événements d’une file d’attente de lettres mortes, vous pouvez la définir comme [source d’événements](invocation-eventsourcemapping.md) pour votre fonction Lambda. Vous pouvez également récupérer manuellement les événements.

Vous pouvez choisir une file d’attente Amazon SQS standard ou une rubrique Amazon SNS standanrd pour votre file d’attente de lettres mortes. Les files d’attente FIFO et les rubriques FIFO Amazon SNS ne sont pas prises en charge.
+ [File d’attente Amazon SQS](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-create-queue.html) – Une file d’attente conserve les événements qui ont échoué jusqu’à ce qu’ils soient récupérés. Choisissez une file d'attente standard Amazon SQS si vous vous attendez à ce qu'une seule entité, telle qu'une fonction Lambda ou une CloudWatch alarme, traite l'événement défaillant. Pour de plus amples informations, veuillez consulter [Utilisation de Lambda avec Amazon SQS](with-sqs.md).
+ [Rubrique Amazon SNS](https://docs.aws.amazon.com/sns/latest/gsg/CreateTopic.html) – Une rubrique relaie les événements qui ont échoué vers une ou plusieurs destinations. Choisissez une rubrique Amazon SNS standard si vous voulez que plusieurs entités agissent sur un événement ayant échoué. Par exemple, vous pouvez configurer une rubrique pour envoyer des événements à une adresse e-mail, à une fonction Lambda ou à un point de and/or terminaison HTTP. Pour de plus amples informations, veuillez consulter [Invocation des fonctions Lambda à l’aide des notifications Amazon SNS](with-sns.md).

Pour envoyer des événements à une file d’attente ou une rubrique, votre fonction a besoin d’autorisations supplémentaires. Ajoutez une stratégie avec les [autorisations requises](#destinations-permissions) au [rôle d’exécution](lambda-intro-execution-role.md) de votre fonction. Si la file d'attente ou le sujet cible est chiffré à l'aide d'une AWS KMS clé gérée par le client, assurez-vous que le rôle d'exécution de votre fonction et la [politique basée sur les ressources](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html) de la clé contiennent les autorisations appropriées.

Après avoir créé la cible et mis à jour votre rôle d’exécution de la fonction, ajoutez la file d’attente de lettres mortes à votre fonction. Vous pouvez configurer plusieurs fonctions pour envoyer des événements à la même cible.

------
#### [ Console ]

1. Ouvrez la [page Functions](https://console.aws.amazon.com/lambda/home#/functions) (Fonctions) de la console Lambda.

1. Choisissez une fonction.

1. Sélectionnez **Configuration**, puis **Asynchronous invocation (Invocation asynchrone)**.

1. Sous **Asynchronous invocation (Invocation asynchrone)**, choisissez **Edit (Modifier)**.

1. Définissez le **service de file d’attente des lettres mortes** sur **Amazon SQS** ou sur **Amazon SNS**.

1. Choisissez la file d’attente ou la rubrique cible.

1. Choisissez **Enregistrer**.

------
#### [ AWS CLI ]

Pour configurer une file d'attente contenant des lettres mortes avec le AWS CLI, utilisez la [update-function-configuration](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/update-function-configuration.html)commande.

```
aws lambda update-function-configuration \
  --function-name my-function \
  --dead-letter-config TargetArn=arn:aws:sns:us-east-1:123456789012:my-topic
```

------

Lambda envoie l’événement à la file d’attente de lettres mortes en l’état, avec des informations supplémentaires dans les attributs. Vous pouvez utiliser ces informations pour identifier l’erreur que la fonction a renvoyée ou établir une corrélation entre l’événement et des journaux ou une trace AWS X-Ray .

**Attributs de message de file d’attente de lettres mortes**
+ **RequestID** (Chaîne) – ID de la demande d’invocation. IDsLes demandes apparaissent dans les journaux des fonctions. Vous pouvez également utiliser le kit SDK X-Ray pour enregistrer l’ID de demande sur un attribut dans le suivi. Vous pouvez ensuite rechercher des suivis par ID de demande dans la console X-Ray.
+ **ErrorCode**(Numéro) — Le code d'état HTTP.
+ **ErrorMessage**(String) — Les 1 premiers Ko du message d'erreur.

Si Lambda ne parvient pas à envoyer de message à la file d'attente contenant des lettres mortes, il supprime l'événement et émet la métrique. [DeadLetterErrors](monitoring-metrics-types.md) Cela peut se produire en raison d’un manque d’autorisations ou si la taille totale du message est supérieure à la limite de la file d’attente cible ou rubrique. Supposons, par exemple, qu’une notification Amazon SNS dont le corps est proche de 1 Mo déclenche une fonction qui génère une erreur. Dans ce cas, le message peut dépasser la taille maximale autorisée dans la file d’attente de lettres mortes en raison des données d’événement ajoutées par Amazon SNS et de attributs ajoutés par Lambda.

Si vous utilisez Amazon SQS en tant que source d’événement, configurez une file d’attente de lettres mortes sur la file d’attente Amazon SQS elle-même, non sur la fonction Lambda. Pour de plus amples informations, veuillez consulter [Utilisation de Lambda avec Amazon SQS](with-sqs.md).

# Invoquer des fonctions Lambda durables
<a name="durable-invocation"></a>

Les fonctions Lambda durables peuvent être invoquées en utilisant les mêmes méthodes que les fonctions Lambda par défaut, mais avec des considérations importantes pour les exécutions de longue durée. Cette section couvre les modèles d'invocation, la gestion de l'exécution et les meilleures pratiques pour des fonctions durables.

## Limites d'invocation synchrone
<a name="synchronous-invocation-limits"></a>

Les appels synchrones de fonctions Lambda durables sont limités à 15 minutes, comme les fonctions Lambda par défaut. Si votre fonction durable doit s'exécuter pendant plus de 15 minutes, elle doit être invoquée de manière asynchrone.

**Quand utiliser l'invocation synchrone :** optez pour des fonctions durables qui s'exécutent en 15 minutes et lorsque vous avez besoin de résultats immédiats, telles que des flux de travail d'approbation rapides ou des tâches de traitement de données courtes.

## Invocation asynchrone pour les flux de travail de longue durée
<a name="asynchronous-invocation"></a>

Pour les fonctions durables qui peuvent s'exécuter pendant plus de 15 minutes, utilisez l'invocation asynchrone. Cela permet à la fonction de continuer à fonctionner pendant que votre client reçoit un accusé de réception immédiat.

------
#### [ TypeScript ]

```
import { LambdaClient, InvokeCommand } from "@aws-sdk/client-lambda";

const client = new LambdaClient({});

// Asynchronous invocation
const command = new InvokeCommand({
  FunctionName: "my-durable-function",
  InvocationType: "Event", // Asynchronous
  Payload: JSON.stringify({ orderId: "12345" })
});

await client.send(command);
```

------
#### [ Python ]

```
import boto3
import json

client = boto3.client('lambda')

# Asynchronous invocation
response = client.invoke(
    FunctionName='my-durable-function',
    InvocationType='Event',  # Asynchronous
    Payload=json.dumps({'order_id': '12345'})
)
```

------

## Gestion de l'exécution APIs
<a name="execution-management-apis"></a>

Lambda permet de gérer et APIs de surveiller les exécutions de fonctions durables, notamment en listant les exécutions, en obtenant le statut d'exécution et en arrêtant les exécutions en cours.

------
#### [ TypeScript ]

```
// Get execution status
const statusCommand = new InvokeCommand({
  FunctionName: "my-durable-function",
  InvocationType: "RequestResponse",
  Payload: JSON.stringify({ 
    action: "getStatus", 
    executionId: "exec-123" 
  })
});

const result = await client.send(statusCommand);
```

------
#### [ Python ]

```
# Get execution status
response = client.invoke(
    FunctionName='my-durable-function',
    InvocationType='RequestResponse',
    Payload=json.dumps({
        'action': 'get_status',
        'execution_id': 'exec-123'
    })
)
```

------

# Procédure de traitement par Lambda des enregistrements provenant de sources d’événements basées sur des flux et des files d’attente
<a name="invocation-eventsourcemapping"></a>

Un *mappage des sources d’événements* est une ressource Lambda qui lit des éléments à partir de services basés sur des flux et des files d’attente et qui invoque une fonction avec des lots d’enregistrements. Dans le cadre d’un mappage des sources d’événements, des ressources appelées *sondeurs d’événements* interrogent activement les nouveaux messages et invoquent des fonctions. Par défaut, Lambda adapte automatiquement les sondeurs d’événements, mais pour certains types de sources d’événements, vous pouvez utiliser le [mode alloué](#invocation-eventsourcemapping-provisioned-mode) pour contrôler le nombre minimum et maximum de sondeurs d’événements dédiés votre mappage des sources d’événements.

Les services suivants utilisent des mappages des sources d’événements pour invoquer des fonctions Lambda :
+ [Amazon DocumentDB (compatible avec MongoDB) (Amazon DocumentDB)](with-documentdb.md)
+ [Amazon DynamoDB](with-ddb.md)
+ [Amazon Kinesis](with-kinesis.md)
+ [Amazon MQ](with-mq.md)
+ [Amazon Managed Streaming for Apache Kafka (Amazon MSK)](with-msk.md)
+ [Self-managed Apache Kafka](with-kafka.md)
+ [Amazon Simple Queue Service (Amazon SQS)](with-sqs.md)

**Avertissement**  
Les mappages des sources d’événements Lambda traitent chaque événement au moins une fois, et le traitement des enregistrements peut être dupliqué. Pour éviter les problèmes potentiels liés à des événements dupliqués, nous vous recommandons vivement de rendre votre code de fonction idempotent. Pour en savoir plus, consultez [Comment rendre ma fonction Lambda idempotente](https://repost.aws/knowledge-center/lambda-function-idempotent) dans le Knowledge Center. AWS 

## Différence entre les mappages de sources d’événements et les déclencheurs directs
<a name="eventsourcemapping-trigger-difference"></a>

*Certains Services AWS peuvent appeler directement des fonctions Lambda à l'aide de déclencheurs.* Ces services envoient des événements à Lambda, et la fonction est invoquée aussitôt que l’événement spécifié se produit. Les déclencheurs sont adaptés aux événements discrets et au traitement en temps réel. Lorsque vous [créez un déclencheur à l'aide de la console Lambda](lambda-services.md#lambda-invocation-trigger), celle-ci interagit avec le AWS service correspondant pour configurer la notification d'événement sur ce service. Le déclencheur est en fait stocké et géré par le service qui génère les événements, et non par Lambda. Voici quelques exemples de services qui utilisent des déclencheurs pour invoquer des fonctions Lambda :
+ **Amazon Simple Storage Service (Amazon S3) :** invoque une fonction lorsqu’un objet est créé, supprimé ou modifié dans un compartiment. Pour de plus amples informations, veuillez consulter [Didacticiel : utilisation d’un déclencheur Amazon S3 pour invoquer une fonction Lambda](with-s3-example.md).
+ **Amazon Simple Notification Service (Amazon SNS) :** invoque une fonction lorsqu’un message est publié dans une rubrique SNS. Pour de plus amples informations, veuillez consulter [Tutoriel : Utilisation AWS Lambda avec Amazon Simple Notification Service](with-sns-example.md).
+ **Amazon API Gateway :** invoque une fonction lorsqu’une requête d’API est envoyée à un point de terminaison spécifique. Pour de plus amples informations, veuillez consulter [Invocation d’une fonction Lambda à l’aide d’un point de terminaison Amazon API Gateway](services-apigateway.md).

Les mappages des sources d’événements sont des ressources Lambda créées et gérées au sein du service Lambda. Les mappages des sources d’événements sont conçus pour traiter de gros volumes de données en streaming ou de messages provenant de files d’attente. Le traitement par lots des enregistrements d’un flux ou d’une file d’attente est plus efficace que le traitement individuel des enregistrements. 

## Comportement de traitement par lots
<a name="invocation-eventsourcemapping-batching"></a>

Par défaut, un mappage de source d’événements regroupe des enregistrements dans une même charge utile que Lambda envoie à votre fonction. Pour affiner le comportement du traitement par lots, vous pouvez configurer une fenêtre de traitement par lots ([MaximumBatchingWindowInSeconds](https://docs.aws.amazon.com/lambda/latest/api/API_CreateEventSourceMapping.html#lambda-CreateEventSourceMapping-request-MaximumBatchingWindowInSeconds)) et une taille de lot ([BatchSize](https://docs.aws.amazon.com/lambda/latest/api/API_CreateEventSourceMapping.html#lambda-CreateEventSourceMapping-response-BatchSize)). Une fenêtre de traitement par lots représente l’intervalle de temps maximal pour collecter des enregistrements dans une même charge utile. La taille d’un lot est le nombre maximal d’enregistrements dans un même lot. Lambda invoque votre fonction en présence de l’un des trois critères suivants :
+ **La fenêtre de traitement par lots atteint sa valeur maximale.** Le comportement par défaut de la fenêtre de traitement par lots varie selon la source d’événement spécifique.
  + **Pour les sources d’événements Kinesis, DynamoDB et Amazon SQS :** la fenêtre de traitement par lot par défaut est de 0 seconde. Cela signifie que Lambda invoque votre fonction dès que des enregistrements sont disponibles. Pour définir une fenêtre de traitement par lots, configurez `MaximumBatchingWindowInSeconds`. Vous pouvez configurer ce paramètre à n’importe quelle valeur comprise entre 0 et 300 secondes par incréments d’1 seconde. Si vous configurez une fenêtre de traitement par lots, la fenêtre suivante commence dès que l’invocation de fonction précédente est terminée.
  + **Pour les sources d’événements Amazon MSK, Apache Kafka autogérées, Amazon MQ et Amazon DocumentDB :** la fenêtre de traitement par lots par défaut est de 500 ms. Vous pouvez configurer `MaximumBatchingWindowInSeconds` à n’importe quelle valeur comprise entre 0 et 300 secondes par incréments de secondes. En mode provisionné pour les mappages des sources d’événements Kafka, lorsque vous configurez une fenêtre de traitement par lots, la fenêtre suivante commence dès que le lot précédent est terminé. Dans les mappages des sources d’événements Kafka non provisionnés, si vous configurez une fenêtre de traitement par lots, la fenêtre suivante commence dès que l’invocation de fonction précédente est terminée. Pour minimiser la latence lors de l’utilisation des mappages des sources d’événements Kafka en mode provisionné, définissez `MaximumBatchingWindowInSeconds` sur 0. Ce paramètre garantit que Lambda commencera à traiter le lot suivant immédiatement après avoir terminé l’invocation de fonction en cours. Pour plus d’informations sur le traitement à faible latence, consultez [Apache Kafka à faible latence](with-kafka-low-latency.md).
  + **Pour les sources d’événements Amazon MQ et Amazon DocumentDB :** la fenêtre de traitement par lots par défaut est de 500 ms. Vous pouvez configurer `MaximumBatchingWindowInSeconds` à n’importe quelle valeur comprise entre 0 et 300 secondes par incréments de secondes. Une fenêtre de traitement par lots commence dès l’arrivée du premier registre.
**Note**  
Étant donné que vous ne pouvez modifier `MaximumBatchingWindowInSeconds` que par incréments de secondes, vous ne pouvez pas revenir à la fenêtre de traitement par lots par défaut de 500 ms après l’avoir modifiée. Pour restaurer la fenêtre de traitement par lots par défaut, vous devez créer un mappage de source d’événement.
+ **La taille du lot est atteinte.** La taille minimale du lot est de 1. La taille par défaut et la taille maximale du lot dépendent de la source d’événement. Pour plus d’informations sur ces valeurs, consultez la spécification [BatchSize](https://docs.aws.amazon.com/lambda/latest/api/API_CreateEventSourceMapping.html#lambda-CreateEventSourceMapping-request-BatchSize) pour l’opération de l’API `CreateEventSourceMapping`.
+ **La taille de la charge utile atteint [6 Mo](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html).** Vous ne pouvez pas modifier cette limite.

Le diagramme suivant illustre ces trois conditions. Supposons qu’une fenêtre de traitement par lots commence à `t = 7` secondes. Dans le premier scénario, la fenêtre de traitement par lots atteint son maximum de 40 secondes à `t = 47` secondes après avoir accumulé 5 enregistrements. Dans le second scénario, la taille du lot atteint 10 avant l’expiration de la fenêtre de traitement par lots, de sorte que la fenêtre de traitement par lots se termine plus tôt. Dans le troisième scénario, la taille maximale de la charge utile est atteinte avant l’expiration de la fenêtre de traitement par lots, de sorte que la fenêtre de traitement par lots se termine plus tôt.

![\[\]](http://docs.aws.amazon.com/fr_fr/lambda/latest/dg/images/batching-window.png)


Nous vous recommandons de tester différentes tailles de lots et d’enregistrements afin que la fréquence d’interrogation de chaque source d’événement soit adaptée à la rapidité avec laquelle votre fonction est en mesure d’accomplir sa tâche. Le [CreateEventSourceMapping](https://docs.aws.amazon.com/lambda/latest/api/API_CreateEventSourceMapping.html)`BatchSize`paramètre contrôle le nombre maximum d'enregistrements qui peuvent être envoyés à votre fonction à chaque appel. Une taille de lot plus grande peut souvent absorber plus efficacement l’invocation sur un plus large ensemble d’enregistrements, ce qui accroît votre débit.

Lambda envoi le prochain lot pour traitement sans attendre que les [extensions](lambda-extensions.md) configurées soient terminées. En d’autres termes, vos extensions peuvent continuer à s’exécuter pendant que Lambda traite le prochain lot d’enregistrements. Cela peut causer des problèmes de limitation si vous enfreignez l’un des paramètres ou l’une des limites de [simultanéité](lambda-concurrency.md) de votre compte. Pour détecter s’il s’agit d’un problème éventuel, surveillez vos fonctions et vérifiez si vous observez des [métriques de simultanéité](monitoring-concurrency.md#general-concurrency-metrics) plus élevées que prévu pour votre mappage des sources d’événements. En raison de la brièveté des intervalles entre les invocations, Lambda peut brièvement signaler une utilisation simultanée supérieure au nombre de partitions. Cela peut être vrai même pour les fonctions Lambda sans extensions.

Par défaut, si votre fonction renvoie une erreur, le mappage de la source d’événements retraite l’ensemble du lot jusqu’à ce que la fonction réussisse ou que les éléments du lot arrivent à expiration. Pour s’assurer d’un traitement dans l’ordre, le mappage de la source d’événement met en pause le traitement dans la partition concernée jusqu’à la résolution de l’erreur. Pour les sources de flux (DynamoDB et Kinesis), vous pouvez configurer le nombre maximal de tentatives que Lambda effectue lorsque votre fonction renvoie une erreur. Les erreurs de service ou les limitations où le lot n’atteint pas votre fonction ne comptent pas dans les tentatives de réessai. Vous pouvez également configurer le mappage des sources d’événements pour qu’il envoie un enregistrement d’invocation à une [destination](invocation-async-retain-records.md#invocation-async-destinations) lorsqu’il rejette un lot d’événements.

## Mode alloué
<a name="invocation-eventsourcemapping-provisioned-mode"></a>

Les mappages des sources d’événements Lambda utilisent des sondeurs d’événements pour interroger votre source d’événements à la recherche de nouveaux messages. Par défaut, Lambda gère le dimensionnement automatique de ces sondeurs en fonction du volume des messages. Lorsque le trafic de messages augmente, Lambda augmente automatiquement le nombre de sondeurs d’événements pour gérer la charge, et le réduit lorsque le trafic diminue.

En mode provisionné, vous pouvez affiner le débit du mappage de vos sources d'événements en définissant des limites minimales et maximales pour les ressources de sondage dédiées qui restent prêtes à gérer les modèles de trafic attendus. Ces ressources évoluent automatiquement 3 fois plus vite pour faire face aux pics soudains de trafic d'événements et fournissent une capacité 16 fois supérieure pour traiter des millions d'événements. Cela vous permet de créer des charges de travail hautement réactives axées sur les événements avec des exigences de performance strictes.

Dans Lambda, un sondeur d'événements est une unité de calcul dont les capacités de débit varient selon le type de source d'événements. Pour Amazon MSK et Apache Kafka autogéré, chaque sondeur d'événements peut gérer jusqu'à 5 % MB/sec du débit ou jusqu'à 5 appels simultanés. Par exemple, si la source de votre événement produit une charge utile moyenne de 1 Mo et que la durée moyenne de votre fonction est de 1 seconde, un seul sondeur d'événements Kafka peut prendre en charge 5 MB/sec débits et 5 appels Lambda simultanés (en supposant qu'il n'y ait aucune transformation de charge utile). Pour Amazon SQS, chaque sondeur d'événements peut gérer jusqu'à 1 % MB/sec du débit ou jusqu'à 10 appels simultanés. L'utilisation du mode provisionné entraîne des coûts supplémentaires en fonction de l'utilisation de votre sondeur d'événements. Pour plus d’informations sur la tarification, consultez [Tarification AWS Lambda](https://aws.amazon.com/lambda/pricing/).

Le mode provisionné est disponible pour les sources d'événements Amazon MSK, Apache Kafka autogérées et Amazon SQS. Alors que les paramètres de simultanéité vous permettent de contrôler la mise à l’échelle de votre fonction, le mode alloué vous permet de contrôler le débit de votre mappage des sources d’événements. Pour garantir des performances optimales, vous devrez peut-être ajuster les deux paramètres indépendamment.

Le mode provisionné est idéal pour les applications en temps réel nécessitant une latence constante pour le traitement des événements, telles que les sociétés de services financiers traitant les flux de données du marché, les plateformes de commerce électronique fournissant des recommandations personnalisées en temps réel et les sociétés de jeux gérant les interactions avec les joueurs en direct.

Chaque sondeur d'événements prend en charge une capacité de débit différente :
+ Pour Amazon MSK et Apache Kafka autogéré : jusqu'à 5 % MB/sec du débit ou jusqu'à 5 appels simultanés
+ Pour Amazon SQS : jusqu'à 1 % MB/sec de débit ou jusqu'à 10 appels simultanés ou jusqu'à 10 appels d'API d'interrogation SQS par seconde.

Pour les mappages de sources d'événements Amazon SQS, vous pouvez définir le nombre minimum de sondeurs entre 2 et 200 avec une valeur par défaut de 2, et le nombre maximum entre 2 et 2 000 avec une valeur par défaut de 200. Lambda adapte le nombre de sondeurs d'événements entre le minimum et le maximum configurés, en ajoutant rapidement jusqu'à 1 000 appels simultanés par minute afin de fournir un traitement cohérent et à faible latence de vos événements.

Pour les mappages de sources d'événements Kafka, vous pouvez définir le nombre minimum de sondeurs entre 1 et 200 avec une valeur par défaut de 1, et le nombre maximum entre 1 et 2 000 avec une valeur par défaut de 200. Lambda adapte le nombre de sondeurs d'événements entre le minimum et le maximum configurés en fonction de votre historique d'événements dans votre rubrique afin de garantir un traitement à faible latence de vos événements.

Notez que pour les sources d'événements Amazon SQS, le paramètre de simultanéité maximale ne peut pas être utilisé en mode provisionné. Lorsque vous utilisez le mode provisionné, vous contrôlez la simultanéité par le biais du paramètre Nombre maximal de sondeurs d'événements.

Pour plus d’informations sur la configuration du mode alloué, reportez-vous aux sections suivantes :
+ [Configuration du mode alloué pour les mappages des sources d’événements Amazon MSK](kafka-scaling-modes.md)
+ [Configuration du mode alloué pour les mappages des source d’événement Apache Kafka autogéré](kafka-scaling-modes.md#kafka-provisioned-mode)
+ [Utilisation du mode provisionné avec les mappages de sources d'événements Amazon SQS](with-sqs.md#sqs-provisioned-mode)

Pour minimiser le temps de latence en mode provisionné, définissez ce paramètre `MaximumBatchingWindowInSeconds` sur 0. Ce paramètre garantit que Lambda commencera à traiter le lot suivant immédiatement après avoir terminé l’invocation de fonction en cours. Pour plus d’informations sur le traitement à faible latence, consultez [Apache Kafka à faible latence](with-kafka-low-latency.md).

Après avoir configuré le mode alloué, vous pouvez observer l’utilisation des sondeurs d’événements pour votre charge de travail en surveillant la métrique `ProvisionedPollers`. Pour de plus amples informations, veuillez consulter [Métriques de mappage des sources d’événements](monitoring-metrics-types.md#event-source-mapping-metrics).

## API de mappage de la source d’événement
<a name="event-source-mapping-api"></a>

Pour gérer une source d’événement à l’aide de la [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) ou d’un [AWS SDK](https://aws.amazon.com/getting-started/tools-sdks/), vous pouvez utiliser les opérations d’API suivantes :
+ [CreateEventSourceMapping](https://docs.aws.amazon.com/lambda/latest/api/API_CreateEventSourceMapping.html)
+ [ListEventSourceMappings](https://docs.aws.amazon.com/lambda/latest/api/API_ListEventSourceMappings.html)
+ [GetEventSourceMapping](https://docs.aws.amazon.com/lambda/latest/api/API_GetEventSourceMapping.html)
+ [UpdateEventSourceMapping](https://docs.aws.amazon.com/lambda/latest/api/API_UpdateEventSourceMapping.html)
+ [DeleteEventSourceMapping](https://docs.aws.amazon.com/lambda/latest/api/API_DeleteEventSourceMapping.html)

# Utilisation des balises dans les mappages des sources d’événements
<a name="tags-esm"></a>

Vous pouvez étiqueter les mappages des sources d’événements pour organiser et gérer vos ressources. Les balises sont des paires clé-valeur de forme libre associées à vos ressources prises en charge par l’ensemble des ressources  Services AWS. Pour plus d'informations sur les cas d'utilisation des balises, consultez la section [Stratégies de balisage courantes dans le guide des AWS](https://docs.aws.amazon.com//tag-editor/latest/userguide/best-practices-and-strats.html#tag-strategies) *ressources de balisage et de l'éditeur de balises*. 

Les mappages des sources d’événements sont associés à des fonctions, qui peuvent avoir leurs propres balises. Les mappages des sources d’événements n’héritent pas automatiquement des balises des fonctions. Vous pouvez utiliser l' AWS Lambda API pour afficher et mettre à jour les balises. Vous pouvez également consulter et mettre à jour les balises tout en gérant un mappage de source d'événement spécifique dans la console Lambda, y compris ceux utilisant le mode provisionné pour Amazon SQS.

## Autorisations requises pour l’utilisation des balises
<a name="esm-tags-required-permissions"></a>

Pour autoriser une identité Gestion des identités et des accès AWS (IAM) – utilisateur, groupe ou rôle – à afficher ou marquer les ressources, accordez-lui les autorisations correspondantes :
+ **lambda : ListTags** —Lorsqu' une ressource possède des balises, accordez cette autorisation à tous ceux qui ont besoin de `ListTags` l'utiliser. Pour les fonctions balisées, cette autorisation est également nécessaire pour `GetFunction`.
+ **lambda : TagResource** —Accordez cette autorisation à toute personne ayant besoin d'appeler `TagResource` ou d'exécuter un tag lors de la création.

Vous pouvez éventuellement envisager d'accorder également l'UntagResourceautorisation **lambda :** pour autoriser les `UntagResource` appels à la ressource.

Pour de plus amples informations, veuillez consulter [Politiques IAM basées sur l’identité pour Lambda](access-control-identity-based.md).

## Utilisation des balises avec la console Lambda
<a name="tags-esm-console"></a>

Vous pouvez utiliser la console Lambda pour créer des mappages de sources d'événements comportant des balises, ajouter des balises aux mappages de sources d'événements existants et filtrer les mappages de sources d'événements par balise, y compris ceux configurés en mode provisionné pour Amazon SQS.

Lorsque vous ajoutez un déclencheur pour les services basés sur les flux et les files d’attente pris en charge à l’aide de la console Lambda, Lambda crée automatiquement un mappage des sources d’événements. Pour plus d’informations sur ces sources d’événements, consultez [Procédure de traitement par Lambda des enregistrements provenant de sources d’événements basées sur des flux et des files d’attente](invocation-eventsourcemapping.md). Pour créer un mappage des sources d’événement dans la console, vous devez disposer des éléments suivants :
+ Une fonction .
+ Une source d’événement provenant d’un service concerné.

Vous pouvez ajouter les balises dans le cadre de l’interface utilisateur que vous utilisez pour créer ou mettre à jour des déclencheurs.

**Pour ajouter une balise lors de la création d’un mappage des sources d’événements**

1. Ouvrez la [page Functions](https://console.aws.amazon.com/lambda/home#/functions) (Fonctions) de la console Lambda.

1. Choisissez le nom de votre fonction .

1. Sous **Function overview** (Vue d’ensemble de la fonction), choisissez **Add trigger** (Ajouter un déclencheur).

1. Sous **Configuration du déclencheur**, dans la liste déroulante, choisissez le nom du service dont provient votre source d’événement.

1. Fournissez la configuration de base de votre source d’événements. Pour plus d’informations sur la configuration de votre source d’événements, consultez la section relative au service correspondant dans [Invoquer Lambda avec des événements provenant d'autres services AWS](lambda-services.md).

1. Sous **Configuration du mappage des sources d’événements**, sélectionnez **Paramètres supplémentaires**.

1. Sous **Balises**, choisissez **Ajouter une nouvelle balise**.

1. Dans le champ **Clé**, saisissez la clé de votre balise. Pour plus d'informations sur les restrictions relatives au balisage, consultez la section [Limites et exigences relatives au nommage des balises](https://docs.aws.amazon.com//tag-editor/latest/userguide/best-practices-and-strats.html#id_tags_naming_best_practices) dans le Guide des * AWS ressources de balisage et de l'éditeur de balises*.

1. Choisissez **Ajouter**.

**Pour ajouter des balises à un mappage des sources d’événements existant**

1. Ouvrez la page [Mappages des sources d’événements](https://console.aws.amazon.com/lambda/home#/event-source-mappings) dans la console Lambda.

1. Dans la liste des ressources, choisissez l’**UUID** du mappage des sources d’événements correspondant à l’**ARN de la source d’événement** et de la **fonction**.

1. Dans la liste des onglets située sous le **volet de configuration générale**, choisissez **Balises**.

1. Choisissez **Gérer les balises**.

1. Choisissez **Add new tag** (Ajouter une nouvelle balise).

1. Dans le champ **Clé**, saisissez la clé de votre balise. Pour plus d'informations sur les restrictions relatives au balisage, consultez la section [Limites et exigences relatives au nommage des balises](https://docs.aws.amazon.com//tag-editor/latest/userguide/best-practices-and-strats.html#id_tags_naming_best_practices) dans le Guide des * AWS ressources de balisage et de l'éditeur de balises*.

1. Choisissez **Enregistrer**.

**Pour filtrer les mappages des sources d’événements par balise**

1. Ouvrez la page [Mappages des sources d’événements](https://console.aws.amazon.com/lambda/home#/event-source-mappings) dans la console Lambda.

1. Cliquez sur la barre de recherche.

1. Dans la liste déroulante, sélectionnez votre clé de balise sous le sous-titre **Balises**.

1. Sélectionnez **Utiliser : « tag-name »** pour afficher tous les mappages des sources d’événéments étiquetés avec cette touche, ou choisissez un **Opérateur** pour affiner le filtrage en fonction de la valeur.

1. Sélectionnez votre valeur de balise pour appliquer un filtre combinant la clé et la valeur de la balise.

La zone de recherche prend également en charge la recherche de clés de balise. Saisissez le nom d’une clé pour la rechercher dans la liste.

## Utilisation de balises avec AWS CLI
<a name="tags-esm-cli"></a>

Vous pouvez ajouter et supprimer des balises sur les ressources Lambda existantes, mappages de sources d’événéments inclus, avec l’API Lambda. Il est également possible d’ajouter des balises lors de la création d’un mappage des sources d’événements, vous permettant ainsi de conserver une ressource balisée tout au long de son cycle de vie.

### Mise à jour des balises avec la balise Lambda APIs
<a name="tags-esm-api-config"></a>

Vous pouvez ajouter et supprimer des balises pour les ressources Lambda prises en charge par le biais des opérations [TagResource](https://docs.aws.amazon.com/lambda/latest/api/API_TagResource.html)et de l'[UntagResource](https://docs.aws.amazon.com/lambda/latest/api/API_UntagResource.html)API.

Vous pouvez appeler ces opérations par l’intermédiaire de l’ AWS CLI. Pour ajouter des balises à une ressource existante, utilisez la commande `tag-resource`. Cet exemple ajoute deux balises, l'une avec la clé *Department* et l'autre avec la clé*CostCenter*.

```
aws lambda tag-resource \
--resource arn:aws:lambda:us-east-2:123456789012:resource-type:my-resource \
--tags Department=Marketing,CostCenter=1234ABCD
```

Pour supprimer des balises, utilisez la commande `untag-resource`. Cet exemple supprime la balise contenant la clé*Department*.

```
aws lambda untag-resource --resource arn:aws:lambda:us-east-1:123456789012:resource-type:resource-identifier \
--tag-keys Department
```

### Ajout de balises lors de la création d’un mappage des sources d’événements
<a name="tags-esm-on-create"></a>

Pour créer un nouveau mappage de source d'événements Lambda avec des balises, utilisez l'opération [CreateEventSourceMapping](https://docs.aws.amazon.com/lambda/latest/api/API_CreateEventSourceMapping.html)API. Spécifiez le paramètre `Tags`. Vous pouvez appeler cette opération à l'aide de la `create-event-source-mapping` AWS CLI commande et de l'`--tags`option. Pour plus d'informations sur la commande CLI, consultez [create-event-source-mapping](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/create-event-source-mapping.html)la *référence des AWS CLI commandes*.

Avant d’utiliser le paramètre `Tags` avec `CreateEventSourceMapping`, vérifiez que votre rôle dispose de l’autorisation d’étiqueter les ressources en plus des autorisations habituelles nécessaires à cette opération. Pour plus d’informations sur les autorisations requises pour l’étiquetage, consultez [Autorisations requises pour l’utilisation des balises](#esm-tags-required-permissions).

### Afficher les tags avec le tag Lambda APIs
<a name="tags-esm-api-view"></a>

Pour afficher les balises associées à une ressource Lambda spécifique, utilisez l’opération d’API `ListTags`. Pour de plus amples informations, veuillez consulter [ListTags](https://docs.aws.amazon.com/lambda/latest/api/API_ListTags.html).

Vous pouvez appeler cette opération à l'aide de la `list-tags` AWS CLI commande en fournissant un ARN (Amazon Resource Name).

```
aws lambda list-tags --resource arn:aws:lambda:us-east-1:123456789012:resource-type:resource-identifier
```

### Filtrage de ressources par balise
<a name="tags-esm-filtering"></a>

Vous pouvez utiliser le fonctionnement de l' AWS Resource Groups Tagging API [GetResources](https://docs.aws.amazon.com/resourcegroupstagging/latest/APIReference/API_GetResources.html)API pour filtrer vos ressources par balises. L’opération `GetResources` reçoit jusqu’à 10 filtres, chaque filtre contenant une clé de balise et jusqu’à 10 valeurs de balise. Vous fournissez `GetResources`avec un `ResourceType` pour filtrer par certains types de ressources.

Vous pouvez appeler cette opération à l'aide de la `get-resources` AWS CLI commande. Pour des exemples d’utilisation de `get-resources`, consultez [get-resources](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/resourcegroupstaggingapi/get-resources.html#examples) dans la *Référence des commandes de l’AWS  CLI*. 

# Contrôle des événements envoyés par Lambda à votre fonction
<a name="invocation-eventfiltering"></a>

Vous pouvez utiliser le filtrage d’événements pour contrôler les enregistrements d’un flux ou d’une file d’attente que Lambda envoie à votre fonction. Par exemple, vous pouvez ajouter un filtre pour que votre fonction ne traite que les messages Amazon SQS contenant certains paramètres de données. Le filtrage des sources d’événements ne fonctionne qu’avec certains mappages des sources d’événements. Vous pouvez ajouter des filtres aux mappages de sources d'événements pour les éléments suivants : Services AWS
+ Amazon DynamoDB
+ Amazon Kinesis Data Streams
+ Amazon MQ
+ Amazon Managed Streaming for Apache Kafka (Amazon MSK)
+ Self-managed Apache Kafka
+ Amazon Simple Queue Service (Amazon SQS)

Pour obtenir des informations spécifiques sur le filtrage avec des sources d’événements précises, consultez [Utilisation de filtres avec différents Services AWS](#filtering-by-service). Lambda ne prend pas en charge le filtrage d’événements pour Amazon DocumentDB.

Par défaut, vous pouvez définir jusqu’à cinq filtres différents pour un seul mappage des sources d’événements. Vos filtres sont logiquement ORed combinés. Si un enregistrement de votre source d’événement satisfait un ou plusieurs de vos filtres, Lambda inclut l’enregistrement dans le prochain événement qu’il envoie à votre fonction. Si aucun de vos filtres n’est satisfait, Lambda rejette l’enregistrement.

**Note**  
Si vous avez besoin de définir plus de cinq filtres pour une source d’événement, vous pouvez demander une augmentation de quota jusqu’à dix filtres pour chaque source d’événement. Si vous tentez d’ajouter plus de filtres que votre quota actuel ne le permet, Lambda renvoie une erreur lorsque vous essayez de créer la source d’événement.

**Topics**
+ [

## Présentation des principes de base du filtrage d’événements
](#filtering-basics)
+ [

## Traitement des enregistrements ne répondant pas aux critères de filtrage
](#filtering-criteria-not-met)
+ [

## Syntaxe des règles de filtrage
](#filtering-syntax)
+ [

## Attacher des critères de filtre à un mappage de sources d’événements (console)
](#filtering-console)
+ [

## Attacher des critères de filtre à un mappage de sources d’événements (AWS CLI)
](#filtering-cli)
+ [

## Attacher des critères de filtre à un mappage de sources d’événements (AWS SAM)
](#filtering-sam)
+ [

## Chiffrement des critères de filtre
](#filter-criteria-encryption)
+ [

## Utilisation de filtres avec différents Services AWS
](#filtering-by-service)

## Présentation des principes de base du filtrage d’événements
<a name="filtering-basics"></a>

Un objet (`FilterCriteria`) de critères de filtre est une structure composée d’une liste de filtres (`Filters`). Chaque filtre est une structure qui définit un modèle de filtrage d’événements (`Pattern`). Un modèle est une représentation sous forme de chaîne d’une règle de filtre JSON. La structure d’un objet `FilterCriteria` est la suivante.

```
{
   "Filters": [
        {
            "Pattern": "{ \"Metadata1\": [ rule1 ], \"data\": { \"Data1\": [ rule2 ] }}"
        }
    ]
}
```

Pour plus de clarté, voici la valeur du `Pattern` de filtre étendu en JSON simple :

```
{
    "Metadata1": [ rule1 ],
    "data": {
        "Data1": [ rule2 ]
    }
}
```

Votre modèle de filtrage peut inclure des propriétés de métadonnées, des propriétés de données ou les deux. Les paramètres de métadonnées disponibles et le format des paramètres de données varient en fonction de l’objet Service AWS qui sert de source d’événements. Par exemple, supposons que votre mappage des sources d’événements reçoit l’enregistrement suivant d’une file d’attente Amazon SQS :

```
{
    "messageId": "059f36b4-87a3-44ab-83d2-661975830a7d",
    "receiptHandle": "AQEBwJnKyrHigUMZj6rYigCgxlaS3SLy0a...",
    "body": "{\\n \"City\": \"Seattle\",\\n \"State\": \"WA\",\\n \"Temperature\": \"46\"\\n}",
    "attributes": {
        "ApproximateReceiveCount": "1",
        "SentTimestamp": "1545082649183",
        "SenderId": "AIDAIENQZJOLO23YVJ4VO",
        "ApproximateFirstReceiveTimestamp": "1545082649185"
    },
    "messageAttributes": {},
    "md5OfBody": "e4e68fb7bd0e697a0ae8f1bb342846b3",
    "eventSource": "aws:sqs",
    "eventSourceARN": "arn:aws:sqs:us-east-2:123456789012:my-queue",
    "awsRegion": "us-east-2"
}
```
+ Les **propriétés de métadonnées** sont les champs contenant des informations sur l’événement qui a créé l’enregistrement. Dans l’exemple d’enregistrement Amazon SQS, les propriétés de métadonnées comprennent des champs tels que `messageID`, `eventSourceArn` et `awsRegion`.
+ Les **propriétés de données** sont les champs de l’enregistrement contenant les données de votre flux ou file d’attente. Dans l’exemple d’événement Amazon SQS, la clé du champ de données est `body` et les propriétés de données sont les champs `City` `State` et `Temperature`.

Les différents types de sources d’événements utilisent des valeurs clés différentes pour leurs champs de données. Pour filtrer sur les propriétés de données, assurez-vous d’utiliser la bonne clé dans le modèle de votre filtre. Pour obtenir la liste des clés de filtrage des données et des exemples de modèles de filtre pris en charge pour chacune d'entre elles Service AWS, reportez-vous à[Utilisation de filtres avec différents Services AWS](#filtering-by-service).

Le filtrage d’événements peut gérer le filtrage JSON à plusieurs niveaux. Par exemple, considérez le fragment suivant d’un enregistrement provenant d’un flux DynamoDB :

```
"dynamodb": {
    "Keys": {
        "ID": {
            "S": "ABCD"
        }
        "Number": {
            "N": "1234"
    },
    ...
}
```

Supposons que vous vouliez traiter uniquement les enregistrements dont la valeur de la clé de tri `Number` est 4 567. Dans ce cas, votre objet `FilterCriteria` se présente comme suit :

```
{
    "Filters": [
        {
            "Pattern": "{ \"dynamodb\": { \"Keys\": { \"Number\": { \"N\": [ "4567" ] } } } }"
        }
    ]
}
```

Pour plus de clarté, voici la valeur du `Pattern` de filtre étendu en JSON simple : 

```
{
    "dynamodb": {
        "Keys": {
            "Number": {
                "N": [ "4567" ]
                }
            }
        }
}
```

## Traitement des enregistrements ne répondant pas aux critères de filtrage
<a name="filtering-criteria-not-met"></a>

La manière dont Lambda gère les enregistrements qui ne répondent pas à vos critères de filtre dépend de la source de l’événement.
+ Pour **Amazon SQS**, si un message ne répond pas à vos critères de filtre, Lambda supprime automatiquement le message de la file d’attente. Vous n’avez pas besoin de supprimer manuellement ces messages dans Amazon SQS.
+ Pour **Kineses** et **DynamoDB**, après que vos critères de filtre ont évalué un enregistrement, l’itérateur de flux avance au-delà de cet enregistrement. Si l’enregistrement ne répond pas à vos critères de filtre, vous n’avez pas besoin de supprimer manuellement l’enregistrement de la source de votre événement. Après la période de conservation, Kinesis et DynamoDB suppriment automatiquement ces anciens enregistrements. Si vous souhaitez que les enregistrements soient supprimés plus tôt, consultez [Modification de la période de conservation des données](https://docs.aws.amazon.com/streams/latest/dev/kinesis-extended-retention.html).
+ Pour les messages **Amazon MSK**, **Apache Kafka autogéré** et **Amazon MQ**, Lambda supprime les messages qui ne correspondent pas à tous les champs inclus dans le filtre. Pour Amazon MSK et Apache Kafka autogéré, Lambda valide les décalages pour les messages correspondants et non correspondants après avoir invoqué la fonction avec succès. Pour Amazon MQ, Lambda accuse réception des messages correspondants après avoir correctement invoqué la fonction et reconnaît les messages non correspondants lors du filtrage.

## Syntaxe des règles de filtrage
<a name="filtering-syntax"></a>

Pour les règles de filtrage, Lambda prend en charge EventBridge les règles Amazon et utilise la même syntaxe que. EventBridge Pour plus d'informations, consultez les [modèles EventBridge d'événements Amazon](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-event-patterns.html) dans le *guide de EventBridge l'utilisateur Amazon*.

Voici un récapitulatif de tous les opérateurs de comparaison disponibles pour le filtrage d’événement Lambda.


| Opérateur de comparaison | Exemple | Syntaxe des règles | 
| --- | --- | --- | 
|  Null  |  UserID est null  |  "UserID": [ null ]  | 
|  Vide  |  LastName est vide  |  "LastName": [""]  | 
|  Égal à  |  Le nom est « Alice »  |  "Name": [ "Alice" ]  | 
|  Est égal à (ignorer les majuscules)  |  Le nom est « Alice »  |  « Nom » : [\$1"equals-ignore-case« : « alice »\$1]  | 
|  Et  |  Le lieu est « New York » et le jour est « Monday »  |  "Location": [ "New York" ], "Day": ["Monday"]  | 
|  Or  |  PaymentType est « Crédit » ou « Débit »  |  PaymentType« : [« Crédit », « Débit"]  | 
|  Ou (plusieurs champs)  |  Location est « New York », ou Day est « Monday ».  |  "\$1or": [ \$1 "Location": [ "New York" ] \$1, \$1 "Day": [ "Monday" ] \$1 ]   | 
|  Pas  |  La météo est tout sauf « Raining »  |  "Weather": [ \$1 "anything-but": [ "Raining" ] \$1 ]  | 
|  Numérique (égal)  |  Le prix est de 100  |  "Price": [ \$1 "numeric": [ "=", 100 ] \$1 ]  | 
|  Numérique (plage)  |  Le prix est supérieur à 10 et inférieur ou égal à 20  |  "Price": [ \$1 "numeric": [ ">", 10, "<=", 20 ] \$1 ]  | 
|  Existe  |  ProductName existe  |  ProductName« : [\$1« existe » : vrai\$1]  | 
|  N’existe pas  |  ProductName n'existe pas  |  ProductName« : [\$1« existe » : faux\$1]  | 
|  Commence par  |  La région se trouve aux États-Unis  |  "Region": [ \$1"prefix": "us-" \$1 ]  | 
|  Termine par  |  FileName se termine par une extension .png.  |  FileName« : [\$1« suffixe » : « .png »\$1]   | 

**Note**  
Comme pour les chaînes EventBridge, Lambda utilise une character-by-character correspondance exacte sans pliage en majuscules ni aucune autre normalisation des chaînes. Pour les nombres, Lambda utilise également une représentation par chaîne. Par exemple, 300, 300,0 et 3.0e2 ne sont pas considérés égaux.

Notez que l’opérateur Exists ne fonctionne que sur les nœuds feuilles de votre source d’événements JSON. Il ne tient pas compte des nœuds intermédiaires. Par exemple, avec le JSON suivant, le modèle de filtre `{ "person": { "address": [ { "exists": true } ] } }"` ne trouverait aucune correspondance, car `"address"` est un nœud intermédiaire.

```
{
  "person": {
    "name": "John Doe",
    "age": 30,
    "address": {
      "street": "123 Main St",
      "city": "Anytown",
      "country": "USA"
    }
  }
}
```

## Attacher des critères de filtre à un mappage de sources d’événements (console)
<a name="filtering-console"></a>

Suivez ces étapes pour créer un nouveau mappage de source d’événement avec des critères de filtre à l’aide de la console Lambda.

**Pour créer un nouveau mappage de sources d’événements avec des critères de filtre (console)**

1. Ouvrez la [page Functions](https://console.aws.amazon.com/lambda/home#/functions) (Fonctions) de la console Lambda.

1. Choisissez le nom d’une fonction pour laquelle créer un mappage de source d’événements.

1. Sous **Function overview** (Vue d’ensemble de la fonction), choisissez **Add trigger** (Ajouter un déclencheur).

1. Pour **Trigger configuration (Configuration du déclencheur)**, choisissez un type de déclencheur qui prend en charge le filtrage des événements. Pour obtenir la liste des services pris en charge, reportez-vous à la liste figurant au début de cette page.

1. Développer **Additional settings (Paramètres supplémentaires)**.

1. Sous **Filter criteria (Critères de filtre)**, choisissez **Add (Ajouter)** puis définissez et saisissez vos filtres. Par exemple, vous pouvez saisir ce qui suit.

   ```
   { "Metadata" : [ 1, 2 ] }
   ```

   Cela indique à Lambda de traiter uniquement les enregistrements où le champ `Metadata` est égal à 1 ou 2. Vous pouvez continuer à sélectionner **Ajouter** pour ajouter d’autres filtres jusqu’à la quantité maximale autorisée.

1. Lorsque vous avez terminé d’ajouter vos filtres, sélectionnez **Enregistrer**.

Lorsque vous saisissez des critères de filtrage à l’aide de la console, vous n’entrez que le modèle de filtrage et n’avez pas besoin d’indiquer la touche `Pattern` ni d’échapper aux guillemets. À l’étape 6 des instructions précédentes, `{ "Metadata" : [ 1, 2 ] }` correspond à ce qui suit `FilterCriteria`.

```
{
   "Filters": [
      {
          "Pattern": "{ \"Metadata\" : [ 1, 2 ] }"
      }
   ]
}
```

Après avoir créé le mappage de la source d’événements dans la console, vous pouvez voir les `FilterCriteria` formatés dans les détails du déclencheur. Pour plus d’exemples de création de filtres d’événements à l’aide de la console, consultez [Utilisation de filtres avec différents Services AWS](#filtering-by-service).

## Attacher des critères de filtre à un mappage de sources d’événements (AWS CLI)
<a name="filtering-cli"></a>

Supposons que vous souhaitiez que le mappage d’une source d’événements comporte les suivants  `FilterCriteria`:

```
{
   "Filters": [
      {
          "Pattern": "{ \"Metadata\" : [ 1, 2 ] }"
      }
   ]
}
```

Pour créer un nouveau mappage de source d'événements avec ces critères de filtre à l'aide de AWS Command Line Interface (AWS CLI), exécutez la commande suivante.

```
aws lambda create-event-source-mapping \
    --function-name my-function \
    --event-source-arn arn:aws:sqs:us-east-2:123456789012:my-queue \
    --filter-criteria '{"Filters": [{"Pattern": "{ \"Metadata\" : [ 1, 2 ]}"}]}'
```

Cette [ create-event-source-mapping](https://docs.aws.amazon.com/cli/latest/reference/lambda/create-event-source-mapping.html)commande crée un nouveau mappage de source d'événements Amazon SQS pour la fonction `my-function` avec la valeur spécifiée. `FilterCriteria`

Pour ajouter ces critères de filtre à un mappage des sources d’événements existant, exécutez la commande suivante.

```
aws lambda update-event-source-mapping \
    --uuid "a1b2c3d4-5678-90ab-cdef-11111EXAMPLE" \
    --filter-criteria '{"Filters": [{"Pattern": "{ \"Metadata\" : [ 1, 2 ]}"}]}'
```

Notez que pour mettre à jour un mappage de source d’événements, vous avez besoin de son UUID. Vous pouvez obtenir l'UUID lors d'un [ list-event-source-mappings](https://docs.aws.amazon.com/cli/latest/reference/lambda/list-event-source-mappings.html)appel. Lambda renvoie également l'UUID dans la réponse de la CLI. [ create-event-source-mapping](https://docs.aws.amazon.com/cli/latest/reference/lambda/create-event-source-mapping.html)

Pour supprimer les critères de filtre d'une source d'événement, vous pouvez exécuter la [ update-event-source-mapping](https://docs.aws.amazon.com/cli/latest/reference/lambda/update-event-source-mapping.html)commande suivante avec un `FilterCriteria` objet vide.

```
aws lambda update-event-source-mapping \
    --uuid "a1b2c3d4-5678-90ab-cdef-11111EXAMPLE" \
    --filter-criteria "{}"
```

Pour plus d'exemples de création de filtres d'événements à l'aide du AWS CLI, voir[Utilisation de filtres avec différents Services AWS](#filtering-by-service).

## Attacher des critères de filtre à un mappage de sources d’événements (AWS SAM)
<a name="filtering-sam"></a>

 Supposons que vous souhaitiez configurer une source d'événements AWS SAM pour utiliser les critères de filtre suivants : 

```
{
   "Filters": [
      {
          "Pattern": "{ \"Metadata\" : [ 1, 2 ] }"
      }
   ]
}
```

 Pour ajouter ces critères de filtre à votre mappage des sources d’événements, insérez l’extrait suivant dans le modèle YAML de votre source d’événements.

```
FilterCriteria: 
  Filters: 
    - Pattern: '{"Metadata": [1, 2]}'
```

 Pour plus d'informations sur la création et la configuration d'un AWS SAM modèle pour un mappage de sources d'événements, consultez la [ EventSource](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-property-function-eventsource.html)section du guide du AWS SAM développeur. Pour plus d'exemples de création de filtres d'événements à l'aide AWS SAM de modèles, consultez[Utilisation de filtres avec différents Services AWS](#filtering-by-service). 

## Chiffrement des critères de filtre
<a name="filter-criteria-encryption"></a>

Par défaut, Lambda ne chiffre pas votre objet de critères de filtre. Dans les cas d’utilisation où vous pouvez inclure des informations sensibles dans votre objet de critères de filtre, vous pouvez utiliser votre propre [clé KMS](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#kms_keys) pour les chiffrer.

Une fois que vous avez chiffré votre objet de critères de filtre, vous pouvez afficher sa version en texte brut à l'aide d'un appel d'[GetEventSourceMapping](https://docs.aws.amazon.com/lambda/latest/api/API_GetEventSourceMapping.html)API. Vous devez disposer des autorisations `kms:Decrypt` nécessaires pour afficher correctement les critères de filtre en texte brut.

**Note**  
Si votre objet de critères de filtre est chiffré, Lambda expédie la valeur du `FilterCriteria` champ dans la réponse aux appels. [ListEventSourceMappings](https://docs.aws.amazon.com/lambda/latest/api/API_ListEventSourceMappings.html) Ce champ s’affiche plutôt sous la forme `null`. Pour connaître la vraie valeur de`FilterCriteria`, utilisez l'[GetEventSourceMapping](https://docs.aws.amazon.com/lambda/latest/api/API_GetEventSourceMapping.html)API.  
Pour afficher la valeur déchiffrée de `FilterCriteria` dans la console, assurez-vous que votre rôle IAM contient des autorisations pour. [GetEventSourceMapping](https://docs.aws.amazon.com/lambda/latest/api/API_GetEventSourceMapping.html)

Vous pouvez spécifier votre propre clé KMS via la console, l’API/CLI ou CloudFormation.

**Pour chiffrer les critères de filtre à l’aide d’une clé KMS appartenant au client (console)**

1. Ouvrez la [page Functions](https://console.aws.amazon.com/lambda/home#/functions) (Fonctions) de la console Lambda.

1. Choisissez **Add trigger (Ajouter déclencheur)**. Si vous possédez déjà un déclencheur, choisissez l’onglet **Configuration**, puis sur **Déclencheurs**. Sélectionnez le déclencheur existant, puis choisissez **Modifier**.

1. Cochez la case en regard de **Chiffrer avec une clé KMS gérée par le client**.

1. Pour **Choisir une clé de chiffrement KMS gérée par le client**, sélectionnez une clé activée existante ou créez-en une. Selon l’opération, vous avez besoin de certaines ou de toutes les autorisations suivantes : `kms:DescribeKey`, `kms:GenerateDataKey` et `kms:Decrypt`. Utilisez la stratégie de clé KMS pour octroyer ces autorisations.

Si vous utilisez votre propre clé KMS, les opérations d’API suivantes doivent être autorisées dans la [stratégie de clé](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html) :
+ `kms:Decrypt` : doit être octroyé au principal du service Lambda régional (`lambda.AWS_region.amazonaws.com`). Cela permet à Lambda de déchiffrer les données avec cette clé KMS.
  + Pour éviter un [problème des adjoints confus entre services](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html), la stratégie de clé utilise la clé de condition globale [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn). La valeur correcte de la clé `aws:SourceArn` est l’ARN de votre ressource de mappage des sources d’événements. Vous ne pouvez donc l’ajouter à votre stratégie qu’une fois que vous connaissez son ARN. Lambda transmet également les clés `aws:lambda:FunctionArn` et `aws:lambda:EventSourceArn`, ainsi que leurs valeurs respectives dans le [contexte de chiffrement](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#encrypt_context) lors d’une requête de déchiffrement à KMS. Ces valeurs doivent correspondre aux conditions spécifiées dans la stratégie de clé pour que la requête de déchiffrement aboutisse. Vous n'avez pas besoin d'inclure EventSourceArn les sources d'événements Kafka autogérées car elles n'ont pas de. EventSourceArn
+ `kms:Decrypt`— Doit également être accordé au principal qui a l'intention d'utiliser la clé pour afficher les critères de filtrage en texte brut dans les appels [GetEventSourceMapping](https://docs.aws.amazon.com/lambda/latest/api/API_GetEventSourceMapping.html)d'[DeleteEventSourceMapping](https://docs.aws.amazon.com/lambda/latest/api/API_DeleteEventSourceMapping.html)API.
+ `kms:DescribeKey` : fournit les détails des clés gérées par le client pour permettre au principal spécifié d’utiliser la clé.
+ `kms:GenerateDataKey` :permet à Lambda de générer une clé de données pour chiffrer les critères de filtre, au nom du principal spécifié ([chiffrement d’enveloppe](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#enveloping)).

Vous pouvez l'utiliser AWS CloudTrail pour suivre les AWS KMS demandes que Lambda fait en votre nom. Pour des exemples CloudTrail d'événements, voir[Surveillance de vos clés de chiffrement pour Lambda](security-encryption-at-rest.md#encryption-key-monitoring).

Nous recommandons également d’utiliser la clé de condition [https://docs.aws.amazon.com/kms/latest/developerguide/conditions-kms.html#conditions-kms-via-service](https://docs.aws.amazon.com/kms/latest/developerguide/conditions-kms.html#conditions-kms-via-service) pour limiter l’utilisation de la clé KMS aux requêtes ne provenant que de Lambda. La valeur de cette clé est le principal de service Lambda régional (`lambda.AWS_region.amazonaws.com`). Voici un exemple de stratégie de clé qui accorde toutes les autorisations pertinentes :

**Example AWS KMS politique clé**    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "example-key-policy-1",
    "Statement": [
        {
            "Sid": "Allow Lambda to decrypt using the key",
            "Effect": "Allow",
            "Principal": {
                "Service": "lambda.us-east-1.amazonaws.com"
            },
            "Action": [
                "kms:Decrypt"
            ],
            "Resource": "*",
            "Condition": {
                "ArnEquals" : {
                    "aws:SourceArn": [
                        "arn:aws:lambda:us-east-1:123456789012:event-source-mapping:<esm_uuid>"
                    ]
                },
                "StringEquals": {
                    "kms:EncryptionContext:aws:lambda:FunctionArn": "arn:aws:lambda:us-east-1:123456789012:function:test-function",
                    "kms:EncryptionContext:aws:lambda:EventSourceArn": "arn:aws:sqs:us-east-1:123456789012:test-queue"
                }
            }
        },
        {
            "Sid": "Allow actions by an AWS account on the key",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:root"
            },
            "Action": "kms:*",
            "Resource": "*"
        },
        {
            "Sid": "Allow use of the key to specific roles",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:role/ExampleRole"
            },
            "Action": [
                "kms:Decrypt",
                "kms:DescribeKey",
                "kms:GenerateDataKey"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals" : {
                    "kms:ViaService": "lambda.us-east-1.amazonaws.com"
                }
            }
        }
    ]
}
```

Pour utiliser votre propre clé KMS afin de chiffrer les critères de filtre, vous pouvez également utiliser la [CreateEventSourceMapping](https://docs.aws.amazon.com/lambda/latest/api/API_CreateEventSourceMapping.html) AWS CLI commande suivante. Spécifiez l’ARN de la clé KMS avec l’option `--kms-key-arn`.

```
aws lambda create-event-source-mapping --function-name my-function \
    --maximum-batching-window-in-seconds 60 \
    --event-source-arn arn:aws:sqs:us-east-1:123456789012:my-queue \
    --filter-criteria "{\"filters\": [{\"pattern\": \"{\"a\": [\"1\", \"2\"]}\" }]}" \
    --kms-key-arn arn:aws:kms:us-east-1:123456789012:key/055efbb4-xmpl-4336-ba9c-538c7d31f599
```

Si vous disposez déjà d'un mappage de source d'événements, utilisez plutôt la [UpdateEventSourceMapping](https://docs.aws.amazon.com/lambda/latest/api/API_UpdateEventSourceMapping.html) AWS CLI commande. Spécifiez l’ARN de la clé KMS avec l’option `--kms-key-arn`.

```
aws lambda update-event-source-mapping --function-name my-function \
    --maximum-batching-window-in-seconds 60 \
    --event-source-arn arn:aws:sqs:us-east-1:123456789012:my-queue \
    --filter-criteria "{\"filters\": [{\"pattern\": \"{\"a\": [\"1\", \"2\"]}\" }]}" \
    --kms-key-arn arn:aws:kms:us-east-1:123456789012:key/055efbb4-xmpl-4336-ba9c-538c7d31f599
```

Cette opération remplace toute clé KMS précédemment spécifiée. Si vous spécifiez l’option `--kms-key-arn` avec un argument vide, Lambda cesse d’utiliser votre clé KMS pour chiffrer les critères de filtre. Au lieu de cela, Lambda revient par défaut à l’utilisation d’une clé appartenant à Amazon.

Pour spécifier votre propre clé KMS dans un CloudFormation modèle, utilisez la `KMSKeyArn` propriété du type de `AWS::Lambda::EventSourceMapping` ressource. Par exemple, vous pouvez insérer l’extrait de code suivant dans le modèle YAML de votre source d’événement.

```
MyEventSourceMapping:
  Type: AWS::Lambda::EventSourceMapping
  Properties:
    ...
    FilterCriteria:
      Filters:
        - Pattern: '{"a": [1, 2]}'
    KMSKeyArn: "arn:aws:kms:us-east-1:123456789012:key/055efbb4-xmpl-4336-ba9c-538c7d31f599"
    ...
```

Pour pouvoir afficher vos critères de filtre chiffrés en texte clair dans un appel d'[DeleteEventSourceMapping](https://docs.aws.amazon.com/lambda/latest/api/API_DeleteEventSourceMapping.html)API [GetEventSourceMapping](https://docs.aws.amazon.com/lambda/latest/api/API_GetEventSourceMapping.html)ou un appel d'API, vous devez disposer d'`kms:Decrypt`autorisations.

À compter du 6 août 2024, le `FilterCriteria` champ n'apparaît plus dans les AWS CloudTrail journaux provenant de [CreateEventSourceMapping](https://docs.aws.amazon.com/lambda/latest/api/API_CreateEventSourceMapping.html)et dans [UpdateEventSourceMapping](https://docs.aws.amazon.com/lambda/latest/api/API_UpdateEventSourceMapping.html)les appels d'[DeleteEventSourceMapping](https://docs.aws.amazon.com/lambda/latest/api/API_DeleteEventSourceMapping.html)API si votre fonction n'utilise pas le filtrage des événements. Si votre fonction utilise le filtrage des événements, le champ `FilterCriteria` apparaît vide (`{}`). Vous pouvez toujours afficher vos critères de filtre en texte clair en réponse aux appels d'[GetEventSourceMapping](https://docs.aws.amazon.com/lambda/latest/api/API_GetEventSourceMapping.html)API si vous êtes autorisé à `kms:Decrypt` utiliser la bonne clé KMS.

### Exemple d'entrée de CloudTrail journal pour les Create/Update/DeleteEventSourceMapping appels
<a name="filter-criteria-encryption-cloudtrail"></a>

Dans l' AWS CloudTrail exemple d'entrée de journal suivant pour un CreateEventSourceMapping appel, `FilterCriteria` apparaît comme vide (`{}`) car la fonction utilise le filtrage des événements. C’est le cas même si l’objet `FilterCriteria` contient des critères de filtre valides que votre fonction utilise activement. Si la fonction n'utilise pas le filtrage des événements, le `FilterCriteria` champ CloudTrail n'apparaîtra pas du tout dans les entrées du journal.

```
{
    "eventVersion": "1.08",
    "userIdentity": {
        "type": "AssumedRole",
        "principalId": "AROA123456789EXAMPLE:userid1",
        "arn": "arn:aws:sts::123456789012:assumed-role/Example/example-role",
        "accountId": "123456789012",
        "accessKeyId": "ASIAIOSFODNN7EXAMPLE",
        "sessionContext": {
            "sessionIssuer": {
                "type": "Role",
                "principalId": "AROA987654321EXAMPLE",
                "arn": "arn:aws:iam::123456789012:role/User1",
                "accountId": "123456789012",
                "userName": "User1"
            },
            "webIdFederationData": {},
            "attributes": {
                "creationDate": "2024-05-09T20:35:01Z",
                "mfaAuthenticated": "false"
            }
        },
        "invokedBy": "AWS Internal"
    },
    "eventTime": "2024-05-09T21:05:41Z",
    "eventSource": "lambda.amazonaws.com",
    "eventName": "CreateEventSourceMapping20150331",
    "awsRegion": "us-east-2",
    "sourceIPAddress": "AWS Internal",
    "userAgent": "AWS Internal",
    "requestParameters": {
        "eventSourceArn": "arn:aws:sqs:us-east-2:123456789012:example-queue",
        "functionName": "example-function",
        "enabled": true,
        "batchSize": 10,
        "filterCriteria": {},
        "kMSKeyArn": "arn:aws:kms:us-east-2:123456789012:key/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111",
        "scalingConfig": {},
        "maximumBatchingWindowInSeconds": 0,
        "sourceAccessConfigurations": []
    },
    "responseElements": {
        "uUID": "a1b2c3d4-5678-90ab-cdef-EXAMPLEaaaaa",
        "batchSize": 10,
        "maximumBatchingWindowInSeconds": 0,
        "eventSourceArn": "arn:aws:sqs:us-east-2:123456789012:example-queue",
        "filterCriteria": {},
        "kMSKeyArn": "arn:aws:kms:us-east-2:123456789012:key/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111",
        "functionArn": "arn:aws:lambda:us-east-2:123456789012:function:example-function",
        "lastModified": "May 9, 2024, 9:05:41 PM",
        "state": "Creating",
        "stateTransitionReason": "USER_INITIATED",
        "functionResponseTypes": [],
        "eventSourceMappingArn": "arn:aws:lambda:us-east-2:123456789012:event-source-mapping:a1b2c3d4-5678-90ab-cdef-EXAMPLEbbbbb"
    },
    "requestID": "a1b2c3d4-5678-90ab-cdef-EXAMPLE33333",
    "eventID": "a1b2c3d4-5678-90ab-cdef-EXAMPLE22222",
    "readOnly": false,
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "recipientAccountId": "123456789012",
    "eventCategory": "Management",
    "sessionCredentialFromConsole": "true"
}
```

## Utilisation de filtres avec différents Services AWS
<a name="filtering-by-service"></a>

Les différents types de sources d’événements utilisent des valeurs clés différentes pour leurs champs de données. Pour filtrer sur les propriétés de données, assurez-vous d’utiliser la bonne clé dans le modèle de votre filtre. Le tableau suivant indique les clés de filtrage pour chacune des clés prises en charge Service AWS.


| Service AWS | Clé de filtrage | 
| --- | --- | 
| DynamoDB | dynamodb | 
| Kinesis | data | 
| Amazon MQ | data | 
| Amazon MSK | value | 
| Self-managed Apache Kafka | value | 
| Amazon SQS | body | 

Les sections suivantes donnent des exemples de modèles de filtre pour différents types de sources d’événements. Elles fournissent également des définitions des formats de données entrantes pris en charge et des formats de corps de modèle de filtre pour chaque service pris en charge.
+ [Utilisation du filtrage des événements avec une source d’événement DynamoDB](with-ddb-filtering.md)
+ [Utilisation du filtrage des événements avec une source d’événement Kinesis](with-kinesis-filtering.md)
+ [Filtrer les événement à partir d’une source d’événements Amazon MQ](with-mq-filtering.md)
+ [Filtrage des événements provenant d’Amazon MSK et sources d’événements Apache Kafka autogéré](kafka-filtering.md)
+ [Utilisation du filtrage des événements avec une source d’événement Amazon SQS](with-sqs-filtering.md)

# Test des fonctions Lambda dans la console
<a name="testing-functions"></a>

Vous pouvez tester votre fonction Lambda dans la console en invoquant votre fonction avec un événement de test. Un *événement de test* est une entrée JSON pour votre fonction. Si votre fonction ne nécessite pas d’entrée, l’événement peut être un document vide `({})`.

Lorsque vous exécutez un test dans la console, Lambda invoque votre fonction de manière synchrone avec l’événement de test. L’exécution de la fonction convertit le JSON de l’événement en un objet et le transmet à la méthode du gestionnaire de votre code afin qu’il soit traité.

**Créer un événement de test**  
Avant de pouvoir tester dans la console, vous devez créer un événement de test privé ou partageable.

## Invocation de fonctions avec des événements de test
<a name="invoke-with-event"></a>

**Pour tester une fonction**

1. Ouvrez la [page Functions](https://console.aws.amazon.com/lambda/home#/functions) (Fonctions) de la console Lambda.

1. Choisissez le nom de la fonction que vous voulez tester.

1. Choisissez l’onglet **Test**.

1. Sous **Test event** (Événement de test), sélectionnez **Create new event** (Créer un nouvel événement) ou **Edit saved event** (Modifier un événement sauvegardé), puis sélectionnez l’événement sauvegardé que vous voulez utiliser.

1. En option, choisissez un **modèle** pour le JSON de l’événement.

1. Sélectionnez **Tester)**.

1. Pour examiner les résultats du test, sous **Execution result** (Résultat de l’exécution), développez **Details** (Détails).

Pour invoquer votre fonction sans enregistrer votre événement de test, choisissez **Tester** avant d’enregistrer. Cela crée un événement de test non sauvegardé que Lambda ne conserve que pour la durée de la session.

Pour les environnements d’exécution Node.js, Python et Ruby, vous pouvez également accéder à vos événements de test enregistrés et non enregistrés dans l’onglet **Code**. Utilisez la section **ÉVÉNEMENTS DE TEST** pour créer, modifier et exécuter des tests.

## Création d’événements de test privés
<a name="creating-private-events"></a>

Les événements de test privés sont disponibles uniquement pour le créateur de l’événement et ils ne nécessitent aucune autorisation supplémentaire pour être utilisés. Vous pouvez créer et enregistrer jusqu’à 10 événements de test privés par fonction.

**Pour créer un événement de test privé**

1. Ouvrez la [page Functions](https://console.aws.amazon.com/lambda/home#/functions) (Fonctions) de la console Lambda.

1. Choisissez le nom de la fonction que vous voulez tester.

1. Choisissez l’onglet **Test**.

1. Sous **Test event** (Événement de test), procédez comme suit :

   1. Choisissez un **Template** (Modèle).

   1. Saisissez un **Name** (Nom) pour le test.

   1. Dans la zone de saisie de texte, entrez l’événement de test JSON.

   1. Sous **Event sharing settings** (Paramètres de partage de l’événement), choisissez **Private** (Privé).

1. Sélectionnez **Enregistrer les modifications**.

Pour les environnements d’exécution Node.js, Python et Ruby, vous pouvez également créer des événements de test dans l’onglet **Code**. Utilisez la section **ÉVÉNEMENTS DE TEST** pour créer, modifier et exécuter des tests.

## Création d’événements de test partageables
<a name="creating-shareable-events"></a>

Les événements de test partageables sont des événements de test que vous pouvez partager avec d'autres utilisateurs du même AWS compte. Vous pouvez modifier les événements de test partageables des autres utilisateurs et invoquer votre fonction avec eux.

Lambda enregistre les événements de test partageables sous forme de schémas dans un registre de schémas [Amazon EventBridge (CloudWatch Events) nommé.](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-schema-registry.html) `lambda-testevent-schemas` Comme Lambda utilise ce registre pour stocker et appeler les événements de test partageables que vous créez, nous vous recommandons de ne pas modifier ce registre ou de créer un registre utilisant le nom `lambda-testevent-schemas`.

Pour consulter, partager et modifier des événements de test partageables, vous devez disposer d'autorisations pour toutes les [opérations d'API de registre de schéma EventBridge (CloudWatch événements)](https://docs.aws.amazon.com/eventbridge/latest/schema-reference/operations.html) suivantes :
+ [https://docs.aws.amazon.com/eventbridge/latest/schema-reference/v1-registries-name-registryname.html#CreateRegistry](https://docs.aws.amazon.com/eventbridge/latest/schema-reference/v1-registries-name-registryname.html#CreateRegistry)
+ [https://docs.aws.amazon.com/eventbridge/latest/schema-reference/v1-registries-name-registryname-schemas-name-schemaname.html#CreateSchema](https://docs.aws.amazon.com/eventbridge/latest/schema-reference/v1-registries-name-registryname-schemas-name-schemaname.html#CreateSchema)
+ [https://docs.aws.amazon.com/eventbridge/latest/schema-reference/v1-registries-name-registryname-schemas-name-schemaname.html#DeleteSchema](https://docs.aws.amazon.com/eventbridge/latest/schema-reference/v1-registries-name-registryname-schemas-name-schemaname.html#DeleteSchema)
+ [https://docs.aws.amazon.com/eventbridge/latest/schema-reference/v1-registries-name-registryname-schemas-name-schemaname-version-schemaversion.html#DeleteSchemaVersion](https://docs.aws.amazon.com/eventbridge/latest/schema-reference/v1-registries-name-registryname-schemas-name-schemaname-version-schemaversion.html#DeleteSchemaVersion)
+ [https://docs.aws.amazon.com/eventbridge/latest/schema-reference/v1-registries-name-registryname.html#DescribeRegistry](https://docs.aws.amazon.com/eventbridge/latest/schema-reference/v1-registries-name-registryname.html#DescribeRegistry)
+ [https://docs.aws.amazon.com/eventbridge/latest/schema-reference/v1-registries-name-registryname-schemas-name-schemaname.html#DescribeSchema](https://docs.aws.amazon.com/eventbridge/latest/schema-reference/v1-registries-name-registryname-schemas-name-schemaname.html#DescribeSchema)
+ [https://docs.aws.amazon.com/eventbridge/latest/schema-reference/v1-discover.html#GetDiscoveredSchema](https://docs.aws.amazon.com/eventbridge/latest/schema-reference/v1-discover.html#GetDiscoveredSchema)
+ [https://docs.aws.amazon.com/eventbridge/latest/schema-reference/v1-registries-name-registryname-schemas-name-schemaname-versions.html#ListSchemaVersions](https://docs.aws.amazon.com/eventbridge/latest/schema-reference/v1-registries-name-registryname-schemas-name-schemaname-versions.html#ListSchemaVersions)
+ [https://docs.aws.amazon.com/eventbridge/latest/schema-reference/v1-registries-name-registryname-schemas-name-schemaname.html#UpdateSchema](https://docs.aws.amazon.com/eventbridge/latest/schema-reference/v1-registries-name-registryname-schemas-name-schemaname.html#UpdateSchema)

Notez que l’enregistrement des modifications apportées à un événement de test partageable remplace cet événement.

Si vous ne pouvez pas créer, modifier ou consulter des événements de test partageables, vérifiez que votre compte dispose des autorisations requises pour ces opérations. Si vous disposez des autorisations requises mais que vous ne pouvez toujours pas accéder aux événements de test partageables, vérifiez s'il existe des [politiques basées sur les ressources](access-control-resource-based.md) susceptibles de limiter l'accès au registre EventBridge (des CloudWatch événements).

**Pour créer un événement de test partageable**

1. Ouvrez la [page Functions](https://console.aws.amazon.com/lambda/home#/functions) (Fonctions) de la console Lambda.

1. Choisissez le nom de la fonction que vous voulez tester.

1. Choisissez l’onglet **Test**.

1. Sous **Test event** (Événement de test), procédez comme suit :

   1. Choisissez un **Template** (Modèle).

   1. Saisissez un **Name** (Nom) pour le test.

   1. Dans la zone de saisie de texte, entrez l’événement de test JSON.

   1. Sous **Event sharing settings** (Paramètres de partage de l’événement), choisissez **Shareable** (Partageable).

1. Sélectionnez **Enregistrer les modifications**.

**Utilisez des événements de test partageables avec AWS Serverless Application Model.**  
Vous pouvez l'utiliser AWS SAM pour invoquer des événements de test partageables. Pour en savoir plus, consultez [https://docs.aws.amazon.com//serverless-application-model/latest/developerguide/using-sam-cli-remote-test-event.html](https://docs.aws.amazon.com//serverless-application-model/latest/developerguide/using-sam-cli-remote-test-event.html) le [Guide du développeur de AWS Serverless Application Model](https://docs.aws.amazon.com//serverless-application-model/latest/developerguide/using-sam-cli-remote-test-event.html)

## Suppression des schémas d’événements de test partageables
<a name="deleting-test-schemas"></a>

Lorsque vous supprimez des événements de test partageables, Lambda les supprime du registre `lambda-testevent-schemas`. Si vous supprimez le dernier événement de test partageable du registre, Lambda supprime le registre.

Si vous supprimez la fonction, Lambda ne supprime pas les schémas d’événements de test partageables associés. Vous devez nettoyer ces ressources manuellement depuis la [console EventBridge (CloudWatch Events)](https://console.aws.amazon.com/events).

# États de la fonction Lambda
<a name="functions-states"></a>

Lambda inclut un champ [État](https://docs.aws.amazon.com/lambda/latest/api/API_GetFunctionConfiguration.html#lambda-GetFunctionConfiguration-response-State) dans la configuration de la fonction pour toutes les fonctions, afin d’indiquer quand la fonction est prête à être invoquée. `State` fournit des informations sur l’état actuel de la fonction, y compris si vous pouvez invoquer la fonction avec succès. Les états de la fonction ne modifient pas le comportement des appels de la fonction ou la façon dont votre fonction exécute le code.

**Note**  
Les définitions de l'état des fonctions diffèrent légèrement selon les [SnapStart](snapstart.md)fonctions. Pour de plus amples informations, veuillez consulter [Lambda SnapStart et états des fonctions](snapstart-activate.md#snapstart-function-states).

Dans de nombreux cas, une table DynamoDB constitue un moyen idéal de conservation d’état entre invocations, car elle fournit un accès aux données à faible latence et peut se mettre à l’échelle avec le service Lambda. Vous pouvez également stocker des données dans [Amazon EFS pour Lambda](https://aws.amazon.com/blogs/compute/using-amazon-efs-for-aws-lambda-in-your-serverless-applications/) si vous utilisez ce service, ce qui permet un accès à faible latence au stockage du système de fichiers.

Les états de la fonction incluent :
+ `Pending` : une fois que Lambda crée la fonction, il définit l’état comme « en attente ». Lorsqu’elle est en attente, Lambda tente de créer ou de configurer des ressources pour la fonction, telles que des ressources VPC ou EFS. Lambda n’appelle pas de fonction pendant que l’état est en attente. Les appels ou autres actions d’API qui agissent sur la fonction échoueront.
+ `Active` – La fonction passera à l’état actif lorsque Lambda aura terminé la configuration et l’approvisionnement des ressources. Les fonctions peuvent uniquement être appelées avec succès lorsqu’elles sont actives.
+ `Failed` : indique que la configuration ou l’approvisionnement des ressources ont rencontré une erreur. Lorsque la création d'une fonction échoue, Lambda définit l'état de la fonction sur échec, et vous devez supprimer et recréer la fonction.
+ `Inactive` : une fonction devient inactive lorsqu’elle a été inactive suffisamment longtemps afin que Lambda puisse récupérer les ressources externes qui ont été configurées pour elle. Lorsque vous essayez d’appeler une fonction qui est inactive, l’invocation échoue et Lambda définit la fonction à l’état « en attente » jusqu’à ce que les ressources de la fonction soient recréées. Si Lambda ne parvient pas à recréer les ressources, la fonction retourne à l’état inactif. Il se peut que vous deviez résoudre les erreurs et redéployer votre fonction pour la rétablir à l’état actif.

Si vous utilisez des flux de travail automatisés basés sur le SDK ou si vous appelez APIs directement le service Lambda, assurez-vous de vérifier l'état d'une fonction avant de l'invoquer pour vérifier qu'elle est active. Vous pouvez le faire à l'aide de l'action [GetFunction](https://docs.aws.amazon.com/lambda/latest/api/API_GetFunction.html)de l'API Lambda ou en configurant un serveur à l'aide du [SDK pour AWS Java 2.0](https://github.com/aws/aws-sdk-java-v2).

```
aws lambda get-function --function-name my-function --query 'Configuration.[State, LastUpdateStatus]'
```

Vous devriez voir la sortie suivante :

```
[
 "Active",
 "Successful" 
]
```

Les opérations suivantes échouent lorsque la création de fonction est en attente :
+ [Invoke](https://docs.aws.amazon.com/lambda/latest/api/API_Invoke.html)
+ [UpdateFunctionCode](https://docs.aws.amazon.com/lambda/latest/api/API_UpdateFunctionCode.html)
+ [UpdateFunctionConfiguration](https://docs.aws.amazon.com/lambda/latest/api/API_UpdateFunctionConfiguration.html)
+ [PublishVersion](https://docs.aws.amazon.com/lambda/latest/api/API_PublishVersion.html)

## États de fonction lors des mises à jour
<a name="functions-states-updating"></a>

Lambda effectue deux opérations pour la mise à jour des fonctions :
+ [UpdateFunctionCode](https://docs.aws.amazon.com/lambda/latest/api/API_UpdateFunctionCode.html): met à jour le package de déploiement de la fonction
+ [UpdateFunctionConfiguration](https://docs.aws.amazon.com/lambda/latest/api/API_UpdateFunctionConfiguration.html): met à jour la configuration de la fonction

Lambda utilise [LastUpdateStatus](https://docs.aws.amazon.com/lambda/latest/api/API_FunctionConfiguration.html#lambda-Type-FunctionConfiguration-LastUpdateStatus)cet attribut pour suivre la progression de ces opérations de mise à jour. Quand une mise à jour est en cours (`"LastUpdateStatus": "InProgress"`) :
+ L’[État](https://docs.aws.amazon.com/lambda/latest/api/API_GetFunctionConfiguration.html#lambda-GetFunctionConfiguration-response-State) de la fonction reste `Active`.
+ Les invocations continuent d’utiliser le code et la configuration précédents de la fonction jusqu’à ce que la mise à jour soit terminée.
+ Les opérations suivantes échouent :
  + [UpdateFunctionCode](https://docs.aws.amazon.com/lambda/latest/api/API_UpdateFunctionCode.html)
  + [UpdateFunctionConfiguration](https://docs.aws.amazon.com/lambda/latest/api/API_UpdateFunctionConfiguration.html)
  + [PublishVersion](https://docs.aws.amazon.com/lambda/latest/api/API_PublishVersion.html)
  + [TagResource](https://docs.aws.amazon.com/lambda/latest/api/API_TagResource.html)

Lorsqu'une mise à jour échoue (quand`"LastUpdateStatus": "Failed"`) :
+ L’[État](https://docs.aws.amazon.com/lambda/latest/api/API_GetFunctionConfiguration.html#lambda-GetFunctionConfiguration-response-State) de la fonction reste `Active`.
+ Les invocations continuent d'utiliser le code et la configuration précédents de la fonction.

**Example GetFunctionConfiguration réponse**  
L'exemple suivant est le résultat d'une [GetFunctionConfiguration](https://docs.aws.amazon.com/lambda/latest/api/API_GetFunctionConfiguration.html)demande sur une fonction en cours de mise à jour.  

```
{
    "FunctionName": "my-function",
    "FunctionArn": "arn:aws:lambda:us-east-1:123456789012:function:my-function",
    "Runtime": "nodejs24.x",
    "VpcConfig": {
        "SubnetIds": [
            "subnet-071f712345678e7c8",
            "subnet-07fd123456788a036",
            "subnet-0804f77612345cacf"
        ],
        "SecurityGroupIds": [
            "sg-085912345678492fb"
        ],
        "VpcId": "vpc-08e1234569e011e83"
    },
    "State": "Active",
    "LastUpdateStatus": "InProgress",
    ...
}
```

# Présentation du comportement des nouvelles tentatives dans Lambda
<a name="invocation-retries"></a>

Lorsque vous invoquez une fonction directement, vous déterminez la stratégie de gestion des erreurs liées au code de votre fonction. Lambda ne réessaie pas automatiquement ce type d'erreur en votre nom. Pour réessayer, vous pouvez manuellement invoquer à nouveau votre fonction, envoyer l'événement échoué à une file d'attente pour le débogage, ou ignorer l'erreur. Le code de votre fonction peut s'exécuter entièrement, partiellement ou pas du tout. Si vous recommencez, assurez-vous que le code de votre fonction peut gérer le même événement plusieurs fois, sans provoquer des transactions en double ou d’autres effets secondaires.

Lorsque vous appelez une fonction indirectement, vous devez connaître le comportement de la nouvelle tentative de l’appelant et tout service que la demande rencontre sur le chemin. Cela inclut les scénarios suivants.
+ **Appel asynchrone** – Lambda réessaie deux fois les erreurs de fonction. Si la fonction ne dispose pas de la capacité suffisante pour gérer toutes les requêtes entrantes, des événements peuvent attendre dans la file d’attente pendant des heures ou des jours avant d’être envoyés à la fonction. Vous pouvez configurer une file d'attente de lettres mortes sur la fonction pour capturer les événements qui n'ont pas été traitées avec succès. Pour de plus amples informations, consultez [Ajout d’une file d’attente de lettres mortes](invocation-async-retain-records.md#invocation-dlq).
+ **Mappages de source d'événement** – Les mappages de source d'événement qui lisent à partir de flux réessaient la totalité du lot d'événements. Les erreurs répétées bloquent le traitement de la partition concernée jusqu'à la résolution de l'erreur ou l'expiration des éléments. Pour détecter des partitions bloquées, vous pouvez surveiller la métrique [Âge de l'itérateur](monitoring-metrics.md).

  Pour les mappages de source d'événement qui lisent à partir d'une file d'attente, vous devez déterminer l'intervalle entre les nouvelles tentatives et la destination pour les événements ayant échoué, en configurant le délai de visibilité et la stratégie de redirection dans la file d'attente source. Pour plus d'informations, consultez [Procédure de traitement par Lambda des enregistrements provenant de sources d’événements basées sur des flux et des files d’attente](invocation-eventsourcemapping.md) ainsi que les rubriques spécifiques du service dans [Invoquer Lambda avec des événements provenant d'autres services AWS](lambda-services.md).
+ **Services AWS** – Des services AWS peuvent appeler votre fonction [de manière synchrone](invocation-sync.md) ou asynchrone. Dans le cas des appels synchrones, le service décide s'il convient d'effectuer une nouvelle tentative. Par exemple, les opérations par lot Amazon S3 retentent l'opération si la fonction Lambda renvoie un code de réponse `TemporaryFailure`. Les services avec requêtes proxy d’un utilisateur ou client en amont peuvent également avoir une stratégie de nouvelle tentative ou relayer la réponse d’erreur au demandeur. Par exemple, API Gateway transmet toujours la réponse d’erreur au demandeur. 

  Pour une invocation asynchrone, la logique de nouvelle tentative est la même, quelle que soit la source de l’invocation. Par défaut, Lambda réessaie une invocation asynchrone qui a échoué jusqu’à deux fois. Pour de plus amples informations, consultez [Méthode de gestion des erreurs et nouvelles tentatives d’invocation asynchrone par Lambda](invocation-async-error-handling.md).
+ **Autres comptes et clients** – Lorsque vous accordez l'accès à d'autres comptes, vous pouvez utiliser des [stratégies basées sur une ressource](access-control-resource-based.md) afin de restreindre les services ou ressources qu'ils peuvent configurer pour appeler votre fonction. Pour protéger votre fonction de toute surcharge, envisagez de placer une couche d'API devant votre fonction avec [Amazon API Gateway](services-apigateway.md).

Pour vous aider à gérer les erreurs dans les applications Lambda, Lambda s'intègre avec des services tels que Amazon CloudWatch et AWS X-Ray. Vous pouvez utiliser une combinaison de journaux, de mesures, d'alarmes et de suivi, pour détecter rapidement et d'identifier les problèmes dans le code de votre fonction, de l'API ou d'autres ressources qui prennent en charge votre application. Pour de plus amples informations, consultez [Surveillance, débogage et dépannage des fonctions Lambda](lambda-monitoring.md).

# Utilisation de la détection de boucle récursive Lambda pour prévenir les boucles infinies
<a name="invocation-recursion"></a>

Lorsque vous configurez une fonction Lambda pour qu'elle envoie une sortie au même service ou à la même ressource que celui ou celle qui l'invoque, il est possible de créer une boucle récursive infinie. Par exemple, une fonction Lambda peut écrire un message dans une file d'attente Amazon Simple Queue Service (Amazon SQS), qui invoque ensuite la même fonction. Cette invocation amène la fonction à écrire un autre message dans la file d'attente, qui à son tour invoque à nouveau la fonction.

Les boucles récursives involontaires peuvent entraîner la facturation de frais imprévus à votre charge. Compte AWS Les boucles peuvent également entraîner la [mise à l'échelle](lambda-concurrency.md) de Lambda et l'utilisation de toute la simultanéité disponible de votre compte. Pour réduire l’impact des boucles non intentionnelles, Lambda détecte certains types de boucles récursives peu de temps après leur apparition. Par défaut, lorsque Lambda détecte une boucle récursive, il arrête l’invocation de votre fonction et vous en informe. Si votre conception utilise intentionnellement des schémas récursifs, vous pouvez modifier la configuration par défaut d’une fonction pour permettre à celle-ci d’être invoquée de manière récursive. Pour plus d’informations, consultez [Octroi d’exécution d’une fonction Lambda dans une boucle récursive](#invocation-recursion-disable).

**Topics**
+ [

## Comprendre la détection de boucles récursives
](#invocation-recursion-concepts)
+ [

## Soutenu Services AWS et SDKs
](#invocation-recursion-supported)
+ [

## Notifications de boucles récursives
](#invocation-recursion-monitoring)
+ [

## Répondre aux notifications de détection de boucles récursives
](#invocation-recursion-responding)
+ [

## Octroi d’exécution d’une fonction Lambda dans une boucle récursive
](#invocation-recursion-disable)
+ [

## Régions prises en charge pour la détection des boucles récursives de Lambda
](#invocation-recursion-regions)

## Comprendre la détection de boucles récursives
<a name="invocation-recursion-concepts"></a>

La détection de boucles récursives dans Lambda fonctionne en suivant les événements. Lambda est un service de calcul piloté par les événements qui exécute le code de votre fonction lorsque certains événements se produisent. Par exemple, lorsqu'un élément est ajouté à une file d'attente Amazon SQS ou à une rubrique Amazon Simple Notification Service (Amazon SNS). Lambda transmet les événements à votre fonction sous forme d'objets JSON, qui contiennent des informations sur la modification d'état du système. Lorsqu'un événement provoque l'exécution de votre fonction, cela s'appelle une *invocation*.

Pour détecter les boucles récursives, Lambda utilise des en-têtes de suivi [AWS X-Ray](https://docs.aws.amazon.com/xray/latest/devguide/aws-xray.html). Lorsque les [Services AWS qui prennent en charge cette la détection des boucles récursives](#invocation-recursion-supportedservices) envoient des événements à Lambda, ces événements sont automatiquement annotés avec des métadonnées. Lorsque votre fonction Lambda écrit l'un de ces événements dans un autre événement pris en charge à Service AWS l'aide d'une [version prise en charge d'un AWS SDK](#invocation-recursion-supportedsdks), elle met à jour ces métadonnées. Les métadonnées mises à jour comprennent un décompte du nombre de fois où l'événement a invoqué la fonction.

**Note**  
Il n'est pas nécessaire d'activer le suivi actif de X-Ray pour que cette fonctionnalité soit active. La détection des boucles récursives est activée par défaut pour tous les clients AWS . L'utilisation de cette fonctionnalité est gratuite.

Une *chaîne de requêtes* est une séquence d'invocations Lambda provoquée par le même événement déclencheur. Par exemple, imaginez qu'une file d'attente Amazon SQS invoque votre fonction Lambda. Votre fonction Lambda renvoie ensuite l'événement traité à la même file d'attente Amazon SQS, qui invoque à nouveau votre fonction. Dans cet exemple, chaque invocation de votre fonction appartient à la même chaîne de requêtes.

Si votre fonction est invoquée environ 16 fois dans la même chaîne de requêtes, Lambda arrête automatiquement l’invocation de fonction suivante dans cette chaîne de requêtes et vous en informe. Si votre fonction est configurée avec plusieurs déclencheurs, les invocations provenant d'autres déclencheurs ne sont pas affectées.

**Note**  
Même lorsque le paramètre `maxReceiveCount` de la politique de redirection de la file d’attente source est supérieur à 16, la protection contre la récursion Lambda n’empêche pas Amazon SQS de réessayer le message après la détection et l’arrêt d’une boucle récursive. Lorsque Lambda détecte une boucle récursive et interrompt les invocations suivantes, il renvoie une `RecursiveInvocationException` au mappage des sources d'événements. Cela augmente la valeur `receiveCount` du message. Lambda continue de réessayer le message et de bloquer les invocations de fonctions jusqu’à ce qu’Amazon SQS détermine que le délai `maxReceiveCount` est dépassé et envoie le message à la file d’attente de lettres mortes configurée.

Si vous avez configuré une [destination en cas d'échec](invocation-async-retain-records.md#invocation-async-destinations) ou une [file d'attente de lettres mortes](invocation-async-retain-records.md#invocation-dlq) pour votre fonction, Lambda envoie également l'événement de l'invocation arrêtée vers votre destination ou votre file d'attente de lettres mortes. Lorsque vous configurez une file d’attente de destination ou une file d’attente de lettres mortes pour votre fonction, assurez-vous de ne pas utiliser un déclencheur d’événement ou mappage des sources d'événements que votre fonction utilise également. Si vous envoyez des événements à la même ressource qui invoque votre fonction, vous pouvez créer une autre boucle récursive, et cette boucle sera également résiliée. Si vous désactivez la détection des boucles récursives, cette boucle ne sera pas interrompue.

## Soutenu Services AWS et SDKs
<a name="invocation-recursion-supported"></a>

Lambda ne peut détecter que les boucles récursives dont certaines sont prises en charge. Services AWS Pour que les boucles récursives soient détectées, votre fonction doit également utiliser l'une des boucles prises en charge AWS SDKs.

### Soutenu Services AWS
<a name="invocation-recursion-supportedservices"></a>

Lambda détecte actuellement les boucles récursives entre vos fonctions, Amazon SQS, Amazon S3 et Amazon SNS. Lambda détecte également les boucles composées uniquement de fonctions Lambda, qui peuvent s'invoquer de manière synchrone ou asynchrone. Les schémas suivants montrent quelques exemples de boucles que Lambda peut détecter :

![\[Schémas de boucles récursives entre une fonction Lambda, Amazon SNS, Amazon S3 et une file d’attente Amazon SQS.\]](http://docs.aws.amazon.com/fr_fr/lambda/latest/dg/images/RunawayWorkloadDetected_v3.png)


Lorsqu'une autre Service AWS , telle qu'Amazon DynamoDB, fait partie de la boucle, Lambda ne peut actuellement pas la détecter ni l'arrêter.

Comme Lambda ne détecte actuellement que les boucles récursives impliquant Amazon SQS, Amazon S3 et Amazon SNS, il est toujours possible que des boucles impliquant d' Services AWS autres boucles entraînent une utilisation involontaire de vos fonctions Lambda.

Pour éviter que des frais imprévus ne vous soient facturés Compte AWS, nous vous recommandons de configurer les [ CloudWatchalarmes Amazon](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html) pour vous avertir des habitudes d'utilisation inhabituelles. Par exemple, vous pouvez configurer pour vous CloudWatch avertir des pics de simultanéité ou d'invocation des fonctions Lambda. Vous pouvez également configurer une [alarme de facturation](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/monitor_estimated_charges_with_cloudwatch.html) pour vous avertir lorsque les dépenses sur votre compte dépassent un seuil que vous avez spécifié. Vous pouvez également utiliser [AWS Cost Anomaly Detection](https://docs.aws.amazon.com/cost-management/latest/userguide/manage-ad.html)pour vous alerter en cas de schémas de facturation inhabituels.

### Soutenu AWS SDKs
<a name="invocation-recursion-supportedsdks"></a>

Pour que Lambda détecte les boucles récursives, votre fonction doit utiliser l'une des versions suivantes ou plus récentes du kit SDK :


| Environnement d’exécution | Version minimale du AWS SDK requise | 
| --- | --- | 
|  Node.js  |  2.1147.0 (kit SDK version 2) 3.105.0 (kit SDK version 3)  | 
|  Python  |  1.24.46 (boto3) 1.27.46 (botocore)  | 
|  Java 8 et Java 11  |  2,17135  | 
|  Java 17  |  2,20,81  | 
|  Java 21  |  2,21,24  | 
|  .NET  |  3,7,293,0  | 
|  Ruby  |  3,134,0  | 
|  PHP  |  3,232,0  | 
|  Go  |  SDK V2 1.57.0  | 

Certains environnements d'exécution Lambda tels que Python et Node.js incluent une version du SDK. AWS Si la version du kit SDK incluse dans l'exécution de votre fonction est inférieure au minimum requis, vous pouvez ajouter une version prise en charge du kit SDK au package de déploiement de votre fonction. Vous pouvez également ajouter une version du kit SDK compatible à votre fonction à l'aide d'une [couche Lambda](chapter-layers.md). Pour obtenir la liste des composants SDKs inclus dans chaque environnement d'exécution Lambda, consultez. [Environnements d’exécution (runtimes) Lambda](lambda-runtimes.md)

## Notifications de boucles récursives
<a name="invocation-recursion-monitoring"></a>

Lorsque Lambda arrête une boucle récursive, vous recevez des notifications le [Tableau de bord Health](https://aws.amazon.com/premiumsupport/technology/aws-health-dashboard/) et par e-mail. Vous pouvez également utiliser CloudWatch des métriques pour surveiller le nombre d'appels récursifs interrompus par Lambda.

### Tableau de bord Health notifications
<a name="invocation-recursion-phd"></a>

Lorsque Lambda arrête un appel récursif, une notification s' Tableau de bord Health affiche sur la page de **santé de votre compte**, sous Problèmes [ouverts](https://health.aws.amazon.com/health/home#/account/dashboard/open-issues) et récents. Notez qu’il peut s’écouler jusqu’à trois heures et demie après l’arrêt d’une invocation récursive par Lambda avant que cette notification ne s’affiche. Pour plus d'informations sur l'affichage des événements du compte dans le Tableau de bord Health, consultez [Getting started with your AWS Health Dashboard — Your account health](https://docs.aws.amazon.com/health/latest/ug/getting-started-health-dashboard.html) dans le *AWS Health User Guide*.

### Alertes par e-mail
<a name="invocation-recursion-email"></a>

Lorsque Lambda arrête pour la première fois une invocation récursive de votre fonction, il vous envoie une alerte par e-mail. Lambda envoie au maximum un e-mail toutes les 24 heures pour chaque fonction de votre Compte AWS. Une fois que Lambda a envoyé une notification par e-mail, vous ne recevrez plus d'e-mails pour cette fonction pendant 24 heures, même si Lambda arrête d'autres invocations récursives de la fonction. Notez qu’il peut s’écouler jusqu’à trois heures et demie après l’arrêt d’une invocation récursive par Lambda avant que vous ne receviez cette alerte par e-mail.

Lambda envoie des alertes par e-mail en boucle récursive au contact principal Compte AWS de votre compte et au contact opérationnel alternatif. Pour plus d'informations sur l'affichage ou la mise à jour des adresses e-mail de votre compte, consultez la section [Mise à jour des informations de contact](https://docs.aws.amazon.com/accounts/latest/reference/manage-acct-update-contact.html) dans la *Référence générale AWS *.

### CloudWatch Métriques Amazon
<a name="invocation-recursion-cloudwatch"></a>

La [CloudWatch métrique](monitoring-metrics-types.md) `RecursiveInvocationsDropped` enregistre le nombre d'invocations de fonctions que Lambda a arrêtées parce que votre fonction a été invoquée plus de 16 fois environ au cours d'une même chaîne de requêtes. Lambda émet cette métrique dès qu'il arrête une invocation récursive. Pour afficher cette métrique, suivez les instructions relatives à l'[affichage des métriques sur la CloudWatch console](https://docs.aws.amazon.com/lambda/latest/dg/monitoring-metrics.html#monitoring-metrics-console) et choisissez la métrique`RecursiveInvocationsDropped`.

## Répondre aux notifications de détection de boucles récursives
<a name="invocation-recursion-responding"></a>

Lorsque votre fonction est invoquée environ plus de 16 fois par le même événement déclencheur, Lambda arrête l’invocation de la prochaine fonction pour cet événement afin de mettre fin à la boucle récursive. Pour éviter qu'une boucle récursive interrompue par Lambda ne se reproduise, procédez comme suit : 
+ Réduisez la [simultanéité](lambda-concurrency.md) disponible de votre fonction à zéro, ce qui limite toutes les invocations futures.
+ Supprimez ou désactivez le déclencheur ou le mappage des sources d'événements qui invoque votre fonction.
+ Identifiez et corrigez les défauts de code qui réécrivent les événements dans la AWS ressource qui appelle votre fonction. Une source fréquente de défauts survient lorsque vous utilisez des variables pour définir la source et la cible des événements d'une fonction. Vérifiez que vous n'utilisez pas la même valeur pour les deux variables.

En outre, si la source d'événements pour votre fonction Lambda est une file d'attente Amazon SQS, envisagez de [configurer une file d'attente de lettres mortes](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-configure-dead-letter-queue.html) dans la file d'attente source.

**Note**  
Veillez à configurer la file d’attente de lettres mortes sur la file d’attente source, non sur la fonction Lambda. La file d’attente de lettres mortes que vous configurez dans une fonction est utilisée pour la [file d’attente d’invocation asynchrone](invocation-async.md) et non pour les files d’attente source d’événement.

Si la source de l'événement est une rubrique Amazon SNS, pensez à ajouter une [destination en cas d'échec](invocation-async-retain-records.md#invocation-async-destinations) pour votre fonction.

**Pour réduire à zéro la simultanéité disponible de votre fonction (console)**

1. Ouvrez la [page Functions](https://console.aws.amazon.com/lambda/home#/functions) (Fonctions) de la console Lambda.

1. Choisissez le nom de votre fonction .

1. Choisissez **Limiter**.

1. Dans la boîte de dialogue **Limiter votre fonction**, choisissez **Confirmer**.

**Pour supprimer un déclencheur ou un mappage des sources d'événements pour votre fonction (console)**

1. Ouvrez la [page Functions](https://console.aws.amazon.com/lambda/home#/functions) (Fonctions) de la console Lambda.

1. Choisissez le nom de votre fonction .

1. Choisissez l'onglet **Configuration**, puis **Déclencheurs**.

1. Sous **Déclencheurs**, sélectionnez le déclencheur ou le mappage des sources d'événements que vous souhaitez supprimer, puis choisissez **Supprimer**.

1. Dans la boîte de dialogue **Supprimer des déclencheurs**, choisissez **Supprimer**.

**Pour désactiver un mappage des sources d'événements pour votre fonction (AWS CLI)**

1. Pour trouver l'UUID du mappage des sources d'événements que vous souhaitez désactiver, exécutez la commande AWS Command Line Interface (AWS CLI). [list-event-source-mappings](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/list-event-source-mappings.html)

   ```
   aws lambda list-event-source-mappings
   ```

1. Pour désactiver le mappage des sources d'événements, exécutez la AWS CLI [update-event-source-mapping](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/update-event-source-mapping.html)commande suivante.

   ```
   aws lambda update-event-source-mapping --function-name MyFunction \
   --uuid a1b2c3d4-5678-90ab-cdef-EXAMPLE11111 --no-enabled
   ```

## Octroi d’exécution d’une fonction Lambda dans une boucle récursive
<a name="invocation-recursion-disable"></a>

Si votre conception utilise intentionnellement une boucle récursive, vous pouvez configurer une fonction Lambda pour permettre son invocation récursive. Nous vous recommandons d’éviter d’utiliser des boucles récursives dans votre conception. Les erreurs de mise en œuvre peuvent entraîner des appels récursifs utilisant toutes les données disponibles simultanément et des frais imprévus facturés sur votre Compte AWS compte.

**Important**  
Si vous utilisez des boucles récursives, traitez-les avec prudence. Mettez en œuvre des barrières de protection conformes aux pratiques exemplaires afin de minimiser les risques d’erreurs de mise en œuvre. Pour en savoir plus sur les pratiques exemplaires en matière d’utilisation de modèles d’invocation récursifs, consultez [Recursive patterns that cause run-away Lambda functions](https://serverlessland.com/content/service/lambda/guides/aws-lambda-operator-guide/recursive-runaway) sur Serverless Land.

Vous pouvez configurer des fonctions pour autoriser les boucles récursives à l'aide de la console Lambda, AWS Command Line Interface du AWS CLI() et [PutFunctionRecursionConfig](https://docs.aws.amazon.com//lambda/latest/api/API_PutFunctionRecursionConfig.html)de l'API. Vous pouvez également configurer le paramètre de détection de boucle récursive d'une fonction dans AWS SAM et CloudFormation. 

Par défaut, Lambda détecte et arrête les boucles récursives. À moins que votre conception n’utilise intentionnellement une boucle récursive, nous vous recommandons de ne pas modifier la configuration par défaut de vos fonctions.

Notez que lorsque vous configurez une fonction pour autoriser les boucles récursives, la [CloudWatch métrique](monitoring-metrics-types.md#invocation-metrics) `RecursiveInvocationsDropped` n'est pas émise.

------
#### [ Console ]

**Pour autoriser l’exécution d’une fonction dans une boucle récursive (console)**

1. Ouvrez la [page Functions](https://console.aws.amazon.com/lambda/home#/functions) (Fonctions) de la console Lambda.

1. Choisissez le nom de votre fonction pour ouvrir la page détaillée de votre fonction.

1. Choisissez l’onglet **Configuration**, puis sélectionnez **Concurrence et détection de récursivité**.

1. En regard de **Détection de boucle récursive**, choisissez **Modifier**.

1. Sélectionnez **Autoriser les boucles récursives**.

1. Choisissez **Enregistrer**.

------
#### [ AWS CLI ]

Vous pouvez utiliser l'[PutFunctionRecursionConfig](https://docs.aws.amazon.com/lambda/latest/api/API_PutFunctionRecursionConfig.html)API pour permettre à votre fonction d'être invoquée dans une boucle récursive. Spécifiez `Allow` pour le paramètre de boucle récursive. Par exemple, vous pouvez appeler cette API avec la `put-function-recursion-config` AWS CLI commande suivante :

```
aws lambda put-function-recursion-config --function-name yourFunctionName --recursive-loop Allow
```

------

Vous pouvez rétablir la configuration par défaut de votre fonction afin que Lambda mette fin aux boucles récursives lorsqu’il les détecte. Modifiez la configuration de votre fonction à l’aide de la console Lambda ou de l’ AWS CLI.

------
#### [ Console ]

**Pour configurer une fonction de manière à ce que les boucles récursives soient interrompues (console)**

1. Ouvrez la [page Functions](https://console.aws.amazon.com/lambda/home#/functions) (Fonctions) de la console Lambda.

1. Choisissez le nom de votre fonction pour ouvrir la page détaillée de votre fonction.

1. Choisissez l’onglet **Configuration**, puis sélectionnez **Concurrence et détection de récursivité**.

1. En regard de **Détection de boucle récursive**, choisissez **Modifier**.

1. Sélectionnez **Mettre fin aux boucles récursives**.

1. Choisissez **Enregistrer**.

------
#### [ AWS CLI ]

Vous pouvez utiliser l'[PutFunctionRecursionConfig](https://docs.aws.amazon.com/lambda/latest/api/API_PutFunctionRecursionConfig.html)API pour configurer votre fonction afin que Lambda mette fin aux boucles récursives lorsqu'il les détecte. Spécifiez `Terminate` pour le paramètre de boucle récursive. Par exemple, vous pouvez appeler cette API avec la `put-function-recursion-config` AWS CLI commande suivante :

```
aws lambda put-function-recursion-config --function-name yourFunctionName --recursive-loop Terminate
```

------

## Régions prises en charge pour la détection des boucles récursives de Lambda
<a name="invocation-recursion-regions"></a>

La détection des boucles récursives Lambda est prise en charge dans toutes les [régions commerciales](https://docs.aws.amazon.com/general/latest/gr/glos-chap.html#region), à l’exception des régions Mexique (Centre) et Asie-Pacifique (Nouvelle-Zélande).

# Création et gestion de la fonction Lambda URLs
<a name="urls-configuration"></a>

Une URL de fonction est un point de terminaison HTTP(S) dédié pour votre fonction Lambda. Vous pouvez créer et configurer une URL de fonction via la console Lambda ou l’API Lambda.

**Astuce**  
Lambda propose deux méthodes pour appeler votre fonction via un point de terminaison HTTP : function URLs et Amazon API Gateway. Si vous ne savez pas quelle est la meilleure méthode pour votre cas d’utilisation, consultez [Sélection d’une méthode pour invoquer votre fonction Lambda à l’aide d’une requête HTTP](furls-http-invoke-decision.md).

Lorsque vous créez une URL de fonction, Lambda génère automatiquement un point de terminaison URL unique pour vous. Une fois que vous avez créé une URL de fonction, son point de terminaison URL ne change jamais. Les points de terminaison URL de fonction ont le format suivant :

```
https://<url-id>.lambda-url.<region>.on.aws
```

**Note**  
 URLs Les fonctions ne sont pas prises en charge dans les pays suivants Régions AWS : Asie-Pacifique (Hyderabad`ap-south-2`) (), Asie-Pacifique (Malaisie`ap-southeast-4`) (), Asie-Pacifique (Nouvelle Zélande`ap-southeast-5`) (), Asie-Pacifique (Thaïlande) (`ap-southeast-6`), Asie-Pacifique (Thaïlande) (), Asie-Pacifique (Taipei`ap-southeast-7`) ()`ap-east-2`, Canada Ouest (Calgary) (), Europe (Espagne) ()`ca-west-1`, Europe (Zurich`eu-south-2`) (), Israël (Tel Aviv ()`eu-central-2`, et Moyen-Orient (Émirats arabes unis`il-central-1`) (). `me-central-1`

 URLs Les fonctions sont compatibles avec le double empilage, prenant en charge et. IPv4 IPv6 Après avoir configuré une URL de fonction pour votre fonction, vous pouvez invoquer cette fonction via son point de terminaison HTTP(S), via un navigateur web, curl, Postman ou n’importe quel client HTTP.

**Note**  
Vous pouvez accéder à l’URL de votre fonction via l’Internet public uniquement. Bien que les fonctions Lambda soient compatibles AWS PrivateLink, les fonctions ne le sont URLs pas.

La fonction Lambda URLs utilise des [politiques basées sur les ressources](access-control-resource-based.md) pour la sécurité et le contrôle d'accès. La fonction prend URLs également en charge les options de configuration de partage de ressources entre origines (CORS).

Vous pouvez appliquer une fonction URLs à n'importe quel alias de fonction ou à la version de fonction `$LATEST` non publiée. Vous ne pouvez pas ajouter d’URL de fonction à une autre version de fonction.

La section suivante explique comment créer et gérer une URL de fonction à l'aide de la console Lambda et du AWS CLI modèle CloudFormation 

**Topics**
+ [

## Création d’une URL de fonction (console)
](#create-url-console)
+ [

## Création d’URL de fonction (AWS CLI)
](#create-url-cli)
+ [

## Ajouter une URL de fonction à un CloudFormation modèle
](#urls-cfn)
+ [

## Partage des ressources cross-origin (CORS)
](#urls-cors)
+ [

## Fonction d'étranglement URLs
](#urls-throttling)
+ [

## Fonction de désactivation URLs
](#urls-deactivating)
+ [

## Fonction de suppression URLs
](#w2aac39c81c53)
+ [

# Contrôler l'accès à la fonction Lambda URLs
](urls-auth.md)
+ [

# Invocation d’URL de fonctions Lambda
](urls-invocation.md)
+ [

# Surveillance des URL de fonctions Lambda
](urls-monitoring.md)
+ [

# Sélection d’une méthode pour invoquer votre fonction Lambda à l’aide d’une requête HTTP
](furls-http-invoke-decision.md)
+ [

# Didacticiel : création d’un point de terminaison webhook à l’aide d’une URL de fonction Lambda
](urls-webhook-tutorial.md)

## Création d’une URL de fonction (console)
<a name="create-url-console"></a>

Suivez ces étapes pour créer une URL de fonction à l’aide de la console.

### Créer une URL de fonction pour une fonction existante
<a name="create-url-existing-function"></a>

1. Ouvrez la [page Functions](https://console.aws.amazon.com/lambda/home#/functions) (Fonctions) de la console Lambda.

1. Choisissez le nom de la fonction pour laquelle vous souhaitez créer l’URL de fonction.

1. Choisissez l’onglet **Configuration**, puis **Function URL** (URL de fonction).

1. Choisissez **Create function URL** (Créer une URL de fonction).

1. Pour **le type d'authentification**, choisissez **AWS\$1IAM****NONE**. Pour plus d’informations sur l’authentification de l’URL de fonction, consultez [Contrôle d’accès](urls-auth.md).

1. (Facultatif) Sélectionnez **Configure cross-origin resource sharing (CORS)** (Configurer le partage des ressources cross-origin [CORS]), puis configurez les paramètres CORS pour l’URL de votre fonction. Pour plus d’informations sur le CORS, consultez [Partage des ressources cross-origin (CORS)](#urls-cors).

1. Choisissez **Save** (Enregistrer).

Une URL de fonction est créée pour la version non publiée `$LATEST` de votre fonction. L’URL de la fonction s’affiche dans la section **Function overview** (Présentation de la fonction) de la console.

### Créer une URL de fonction pour un alias existant
<a name="create-url-existing-alias"></a>

1. Ouvrez la [page Functions](https://console.aws.amazon.com/lambda/home#/functions) (Fonctions) de la console Lambda.

1. Choisissez le nom de la fonction avec l’alias pour lequel vous souhaitez créer l’URL de fonction.

1. Choisissez l’onglet **Aliases** (Alias), puis le nom de l’alias pour lequel vous souhaitez créer l’URL de fonction.

1. Choisissez l’onglet **Configuration**, puis **Function URL** (URL de fonction).

1. Choisissez **Create function URL** (Créer une URL de fonction).

1. Pour **le type d'authentification**, choisissez **AWS\$1IAM****NONE**. Pour plus d’informations sur l’authentification de l’URL de fonction, consultez [Contrôle d’accès](urls-auth.md).

1. (Facultatif) Sélectionnez **Configure cross-origin resource sharing (CORS)** (Configurer le partage des ressources cross-origin [CORS]), puis configurez les paramètres CORS pour l’URL de votre fonction. Pour plus d’informations sur le CORS, consultez [Partage des ressources cross-origin (CORS)](#urls-cors).

1. Choisissez **Enregistrer**.

Cela crée une URL de fonction pour votre alias de fonction. L’URL de fonction s’affiche dans la section **Function overview** (Présentation des fonctions) de la console.

### Créer une nouvelle fonction avec une URL de fonction
<a name="create-url-new-function"></a>

**Pour créer une nouvelle fonction avec une URL de fonction (console)**

1. Ouvrez la [page Functions](https://console.aws.amazon.com/lambda/home#/functions) (Fonctions) de la console Lambda.

1. Choisissez **Créer une fonction**.

1. Sous **Basic information** (Informations de base), procédez comme suit :

   1. Dans **Function name** (nom de la fonction), saisissez un nom pour votre fonction, par exemple **my-function**.

   1. Pour **Runtime**, choisissez le langage d'exécution que vous préférez, tel que **Node.js 24**.

   1. Pour **Architecture**, choisissez **x86\$164** ou **arm64**.

   1. Développez **Permissions** (Autorisations), puis choisissez si vous souhaitez créer un nouveau rôle d’exécution ou utiliser un rôle existant.

1. Développez **Advanced settings** (Paramètres avancés), puis sélectionnez **Function URL** (URL de fonction).

1. Pour **le type d'authentification**, choisissez **AWS\$1IAM****NONE**. Pour plus d’informations sur l’authentification de l’URL de fonction, consultez [Contrôle d’accès](urls-auth.md).

1. (Facultatif) Sélectionnez **Configure cross-origin resource sharing (CORS)** (Configuration du partage des ressources cross-origin). En sélectionnant cette option lors de la création de la fonction, l’URL de votre fonction autorise par défaut les demandes de toutes les origines. Vous pouvez modifier les paramètres CORS de l’URL de votre fonction après avoir créé la fonction. Pour plus d’informations sur le CORS, consultez [Partage des ressources cross-origin (CORS)](#urls-cors).

1. Sélectionnez **Create function** (Créer une fonction).

Ceci crée une nouvelle fonction avec une URL de fonction pour la `$LATEST` version non publiée de la fonction. L’URL de la fonction s’affiche dans la section **Function overview** (Présentation des fonctions) de la console.

## Création d’URL de fonction (AWS CLI)
<a name="create-url-cli"></a>

Pour créer une URL de fonction pour une fonction Lambda existante à l'aide de AWS Command Line Interface (AWS CLI), exécutez la commande suivante :

```
aws lambda create-function-url-config \
    --function-name my-function \
    --qualifier prod \ // optional
    --auth-type AWS_IAM
    --cors-config {AllowOrigins="https://example.com"} // optional
```

Une URL de fonction est ajoutée au qualificateur **prod** pour la fonction **my-function**. Pour plus d'informations sur ces paramètres de configuration, consultez [CreateFunctionUrlConfig](https://docs.aws.amazon.com/lambda/latest/api/API_CreateFunctionUrlConfig.html) dans la référence d'API.

**Note**  
Pour créer une URL de fonction via le AWS CLI, la fonction doit déjà exister.

## Ajouter une URL de fonction à un CloudFormation modèle
<a name="urls-cfn"></a>

Pour ajouter une `AWS::Lambda::Url` ressource à votre CloudFormation modèle, utilisez la syntaxe suivante :

### JSON
<a name="urls-cfn-json"></a>

```
{
  "Type" : "AWS::Lambda::Url",
  "Properties" : {
      "AuthType" : String,
      "Cors" : Cors,
      "Qualifier" : String,
      "TargetFunctionArn" : String
    }
}
```

### YAML
<a name="urls-cfn-yaml"></a>

```
Type: AWS::Lambda::Url
Properties: 
  AuthType: String
  Cors: 
    Cors
  Qualifier: String
  TargetFunctionArn: String
```

### Parameters
<a name="urls-cfn-params"></a>
+ (Obligatoire) `AuthType` – Définit le type d’authentification pour l’URL de votre fonction. Les valeurs possibles sont soit `AWS_IAM`, soit `NONE`. Pour limiter l’accès aux utilisateurs authentifiés uniquement, définissez la valeur sur `AWS_IAM`. Pour contourner l’authentification IAM et autoriser n’importe quel utilisateur à envoyer des demandes à votre fonction, définissez la valeur `NONE`.
+ (Facultatif) `Cors` – Définit les [paramètres CORS](#urls-cors) de l’URL de votre fonction. Pour ajouter `Cors` des éléments à votre `AWS::Lambda::Url` ressource CloudFormation, utilisez la syntaxe suivante.

    
**Example AWS::Lambda::Url.Cors (JSON)**  

  ```
  {
    "AllowCredentials" : Boolean,
    "AllowHeaders" : [ String, ... ],
    "AllowMethods" : [ String, ... ],
    "AllowOrigins" : [ String, ... ],
    "ExposeHeaders" : [ String, ... ],
    "MaxAge" : Integer
  }
  ```  
**Example AWS::Lambda::Url.Cors (YAML)**  

  ```
    AllowCredentials: Boolean
    AllowHeaders: 
      - String
    AllowMethods: 
      - String
    AllowOrigins: 
      - String
    ExposeHeaders: 
      - String
    MaxAge: Integer
  ```
+ (Facultatif) `Qualifier` – Le nom de l’alias.
+ (Obligatoire) `TargetFunctionArn` – Le nom ou l’ARN (Amazon Resource Name) de la fonction Lambda. Les formats de nom valides sont notamment les suivants :
  + **Nom de fonction** – `my-function`
  + **ARN de fonction** – `arn:aws:lambda:us-west-2:123456789012:function:my-function`
  + **ARN partiel** – `123456789012:function:my-function`

## Partage des ressources cross-origin (CORS)
<a name="urls-cors"></a>

Pour définir comment différentes origines peuvent accéder à l’URL de votre fonction, utilisez le [partage de ressources cross-origin (CORS)](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS). Nous vous recommandons de configurer CORS si vous avez l’intention d’appeler l’URL de votre fonction à partir d’un autre domaine. Lambda prend en charge les en-têtes CORS suivants pour les fonctions. URLs


| En-têtes CORS | Propriété de configuration CORS | Exemples de valeur | 
| --- | --- | --- | 
|  [ Access-Control-Allow-Origin](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)  |  `AllowOrigins`  |  `*` (autoriser toutes les origines) `https://www.example.com` `http://localhost:60905`  | 
|  [ Access-Control-Allow-Methods](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Methods)  |  `AllowMethods`  |  `GET`, `POST`, `DELETE`, `*`  | 
|  [ Access-Control-Allow-Headers](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Headers)  |  `AllowHeaders`  |  `Date`, `Keep-Alive`, `X-Custom-Header`  | 
|  [ Access-Control-Expose-Headers](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Expose-Headers)  |  `ExposeHeaders`  |  `Date`, `Keep-Alive`, `X-Custom-Header`  | 
|  [ Access-Control-Allow-Credentials](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Credentials)  |  `AllowCredentials`  |  `TRUE`  | 
|  [ Access-Control-Max-Age](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Max-Age)  |  `MaxAge`  |  `5` (par défaut), `300`  | 

Lorsque vous configurez CORS pour une URL de fonction à l'aide de la console Lambda ou du AWS CLI, Lambda ajoute automatiquement les en-têtes CORS à toutes les réponses via l'URL de la fonction. Vous pouvez également ajouter manuellement des en-têtes CORS à la réponse de votre fonction. En cas de conflit d’en-têtes, le comportement attendu dépend du type de la requête :
+ Pour les requêtes en amont, telles que les requêtes OPTIONS, les en-têtes CORS configurés sur l’URL de la fonction ont priorité. Lambda renvoie uniquement ces en-têtes CORS dans la réponse.
+ Pour les requêtes autres que celles effectuées en amont, telles que les requêtes GET ou POST, Lambda renvoie à la fois les en-têtes CORS configurés sur l’URL de la fonction, ainsi que les en-têtes CORS renvoyés par la fonction. Cela peut entraîner une duplication d’en-têtes CORS dans la réponse. Vous pouvez voir une erreur similaire à ce qui suit : `The 'Access-Control-Allow-Origin' header contains multiple values '*, *', but only one is allowed`.

En général, nous recommandons de configurer tous les paramètres CORS sur l’URL de la fonction, plutôt que d’envoyer les en-têtes CORS manuellement dans la réponse de la fonction.

## Fonction d'étranglement URLs
<a name="urls-throttling"></a>

La limitation limite le débit auquel la fonction traite les demandes. Cette fonction est utile dans de nombreuses situations, notamment pour empêcher votre fonction de surcharger les ressources en aval ou pour gérer une augmentation soudaine des demandes.

Vous pouvez limiter le débit des demandes traitées par votre fonction Lambda via une URL de fonction en configurant la simultanéité réservée. La simultanéité réservée limite le nombre maximal d’invocations simultanées pour votre fonction. Le débit de demandes maximal par seconde (RPS) de votre fonction est équivalent à 10 fois la simultanéité réservée configurée. Par exemple, si vous configurez votre fonction avec une simultanéité réservée de 100, le RPS maximal est de 1 000.

Lorsque la simultanéité de la fonction dépasse la simultanéité réservée, l’URL de votre fonction renvoie un code d’état HTTP `429`. Si votre fonction reçoit une demande qui dépasse le maximum de 10 fois le RPS par rapport à la simultanéité réservée configurée, vous recevez également une erreur HTTP `429`. Pour de plus amples informations sur la simultanéité réservée, consultez [Configuration de la simultanéité réservée pour une fonction](configuration-concurrency.md).

## Fonction de désactivation URLs
<a name="urls-deactivating"></a>

En cas d’urgence, vous pouvez rejeter tout le trafic vers l’URL de fonction. Pour désactiver votre URL de fonction, définissez la simultanéité réservée sur zéro. Cela limite toutes les demandes envoyées à l’URL de votre fonction, ce qui entraîne des réponses d’état HTTP `429`. Pour réactiver l’URL de votre fonction, supprimez la configuration de simultanéité réservée ou définissez la configuration sur un montant supérieur à zéro.

## Fonction de suppression URLs
<a name="w2aac39c81c53"></a>

Lorsque vous supprimez une URL de fonction, vous ne pouvez pas la récupérer. La création d’une nouvelle URL de fonction entraînera une adresse URL différente.

**Note**  
Si vous supprimez une URL de fonction avec un type d’authentification `NONE`, Lambda ne supprime pas automatiquement la politique basée sur les ressources associée. Si vous souhaitez supprimer cette politique, vous devez le faire manuellement.

1. Ouvrez la [page Functions](https://console.aws.amazon.com/lambda/home#/functions) (Fonctions) de la console Lambda.

1. Choisissez le nom de la fonction.

1. Choisissez l’onglet **Configuration**, puis **Function URL** (URL de fonction).

1. Sélectionnez **Delete** (Supprimer).

1. Entrez le mot *delete* dans le champ pour confirmer la suppression.

1. Sélectionnez **Delete (Supprimer)**.

**Note**  
Lorsque vous supprimez une fonction qui possède une URL de fonction, Lambda supprime cette URL de manière asynchrone. Si vous créez immédiatement une nouvelle fonction portant le même nom dans le même compte, il est possible que l’URL de la fonction d’origine soit mappée à la nouvelle fonction au lieu d’être supprimée.

# Contrôler l'accès à la fonction Lambda URLs
<a name="urls-auth"></a>

**Note**  
À compter d'octobre 2025, la nouvelle fonction URLs nécessitera à la fois des `lambda:InvokeFunction` autorisations `lambda:InvokeFunctionUrl` et des autorisations.

Vous pouvez contrôler l'accès à votre fonction Lambda à URLs l'aide du [AuthType](https://docs.aws.amazon.com/lambda/latest/api/API_CreateFunctionUrlConfig.html#lambda-CreateFunctionUrlConfig-request-AuthType)paramètre combiné aux [politiques basées sur les ressources](access-control-resource-based.md) associées à votre fonction spécifique. La configuration de ces deux composants détermine qui peut invoquer ou exécuter d’autres actions administratives sur l’URL de votre fonction.

Le paramètre `AuthType` détermine comment Lambda authentifie ou autorise les demandes vers l’URL de votre fonction. Lorsque vous configurez l’URL de votre fonction, vous devez spécifier l’une des options `AuthType` suivantes :
+ `AWS_IAM`— Lambda utilise Gestion des identités et des accès AWS (IAM) pour authentifier et autoriser les demandes en fonction de la politique d'identité du principal IAM et de la politique basée sur les ressources de la fonction. Choisissez cette option si vous souhaitez que seuls les utilisateurs et les rôles authentifiés invoquent votre fonction via l’URL de la fonction.
+ `NONE` – Lambda n’effectue aucune authentification avant d’invoquer votre fonction. Toutefois, la stratégie basée sur les ressources de votre fonction est toujours en vigueur et doit accorder un accès public avant que l’URL de votre fonction puisse recevoir des demandes. Choisissez cette option pour autoriser un accès public et non authentifié à l’URL de votre fonction.

Pour obtenir des informations supplémentaires sur la sécurité, vous pouvez AWS Identity and Access Management Access Analyzer obtenir une analyse complète de l'accès externe à l'URL de votre fonction. IAM Access Analyzer surveille également les autorisations nouvelles ou mises à jour sur vos fonctions Lambda afin de vous aider à identifier les autorisations accordant un accès public et entre comptes. Vous pouvez utiliser IAM Access Analyzer sans frais. Pour démarrer avec IAM Access Analyzer, consultez [Utilisation d’ AWS IAM Access Analyzer](https://docs.aws.amazon.com/IAM/latest/UserGuide/what-is-access-analyzer.html).

Cette page contient des exemples de politiques basées sur les ressources pour les deux types d'authentification et explique comment créer ces politiques à l'aide de l'opération [AddPermission](https://docs.aws.amazon.com/lambda/latest/api/API_AddPermission.html)API ou de la console Lambda. Pour plus d’informations sur la procédure d’invocation de l’URL de votre fonction après avoir configuré les autorisations, consultez [Invocation d’URL de fonctions Lambda](urls-invocation.md).

**Topics**
+ [

## Utilisation du type d’authentification `AWS_IAM`
](#urls-auth-iam)
+ [

## Utilisation du type d’authentification `NONE`
](#urls-auth-none)
+ [

## Gouvernance et contrôle d’accès
](#urls-governance)

## Utilisation du type d’authentification `AWS_IAM`
<a name="urls-auth-iam"></a>

Si vous choisissez le type d’authentification `AWS_IAM`, les utilisateurs qui ont besoin d’invoquer l’URL de votre fonction Lambda doivent avoir les autorisations `lambda:InvokeFunctionUrl` et `lambda:InvokeFunction`. Selon la personne qui effectue la demande d’invocation, vous devrez peut-être accorder cette autorisation à l’aide d’une [stratégie basée sur les ressources](access-control-resource-based.md).

Si le principal qui fait la demande se trouve dans la même URL Compte AWS que l'URL de la fonction, il doit **soit** disposer `lambda:InvokeFunctionUrl` d'`lambda:InvokeFunction`autorisations dans sa [politique basée sur l'identité, **soit** avoir des autorisations qui lui sont accordées dans le cadre de la politique basée sur](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_identity-vs-resource.html) les ressources de la fonction. En d’autres termes, une stratégie basée sur les ressources est facultative si l’utilisateur possède déjà des autorisations `lambda:InvokeFunctionUrl` et `lambda:InvokeFunction` dans sa stratégie basée sur l’identité. L’évaluation des politiques suit les règles décrites dans la [Logique d’évaluation des politiques](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html).

Si le principal qui fait la demande se trouve dans un autre compte, il doit avoir **à la fois** une stratégie basée sur l’identité qui lui donne des autorisations `lambda:InvokeFunctionUrl` et `lambda:InvokeFunction`, **et** des autorisations qui lui sont accordées dans une stratégie basée sur les ressources de la fonction qu’il essaie d’invoquer. L’évaluation des stratégies suit les règles décrites dans [Comment déterminer si une demande d’accès entre comptes est autorisée](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic-cross-account.html#policy-eval-cross-account).

La politique basée sur les ressources suivante permet au `example` rôle in d'invoquer l'URL Compte AWS `444455556666` de la fonction associée à la fonction. `my-function` La touche de InvokedViaFunctionUrl contexte [lambda :](https://docs.aws.amazon.com/lambda/latest/api/API_AddPermission.html#lambda-AddPermission-request-InvokedViaFunctionUrl) limite l'`lambda:InvokeFunction`action aux appels d'URL de fonction. Cela signifie que le principal doit utiliser l’URL de la fonction pour invoquer la fonction. Si vous n’incluez pas `lambda:InvokedViaFunctionUrl`, le principal peut invoquer votre fonction via d’autres méthodes d’invocation, en plus de l’URL de la fonction.

**Example – Stratégie intercompte basée sur une ressource**    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::444455556666:role/example"
      },
      "Action": "lambda:InvokeFunctionUrl",
      "Resource": "arn:aws:lambda:us-east-1:123456789012:function:my-function",
      "Condition": {
        "StringEquals": {
          "lambda:FunctionUrlAuthType": "AWS_IAM"
        }
      }
    },
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::444455556666:role/example"
      },
      "Action": "lambda:InvokeFunction",
      "Resource": "arn:aws:lambda:us-east-1:123456789012:function:my-function",
      "Condition": {
        "Bool": {
          "lambda:InvokedViaFunctionUrl": "true"
        }
      }
    }
  ]
}
```

Vous pouvez créer cette politique basée sur les ressources via la console en suivant les étapes suivantes :

**Comment accorder des autorisations d’invocation d’URL à un autre compte (console)**

1. Ouvrez la [page Functions](https://console.aws.amazon.com/lambda/home#/functions) (Fonctions) de la console Lambda.

1. Choisissez le nom de la fonction pour laquelle vous souhaitez accorder des autorisations d’invocation d’URL.

1. Choisissez l’onglet **Configuration**, puis **Permissions** (Autorisations).

1. Sous **Resource-based policy** (stratégie basée sur une ressource), choisissez **Add permissions** (Ajouter des autorisations).

1. Choisissez **Function URL** (URL de fonction).

1. Pour le **type d'authentification**, choisissez **AWS\$1IAM**.

1. Entrez un **ID de déclaration** pour votre déclaration de politique.

1. Pour **Principal**, saisissez l’ID de compte ou l’Amazon Resource Name (ARN) de l’utilisateur ou du rôle auquel vous souhaitez accorder des autorisations. Par exemple : **444455556666**.

1. Choisissez **Enregistrer**.

Vous pouvez également créer cette politique à l'aide des commandes [add permission](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/add-permission.html) AWS Command Line Interface (AWS CLI) suivantes. Lorsque vous utilisez le AWS CLI, vous devez ajouter les `lambda:InvokeFunction` instructions `lambda:InvokeFunctionUrl` et séparément. Par exemple :

```
aws lambda add-permission --function-name my-function \
  --statement-id UrlPolicyInvokeURL \
  --action lambda:InvokeFunctionUrl \
  --principal 444455556666 \
  --function-url-auth-type AWS_IAM
```

```
aws lambda add-permission --function-name my-function \
  --statement-id UrlPolicyInvokeFunction \
  --action lambda:InvokeFunction \
  --principal 444455556666 \
  --invoked-via-function-url
```

## Utilisation du type d’authentification `NONE`
<a name="urls-auth-none"></a>

**Important**  
Lorsque le type d’authentification de votre URL de fonction est `NONE` et que vous disposez d’une [politique basée sur les ressources](access-control-resource-based.md) qui accorde un accès public, tout utilisateur non authentifié ayant de votre URL de fonction peut invoquer votre fonction.

Dans certains cas, vous pouvez souhaiter que votre URL de fonction soit publique. Vus pourriez souhaiter répondre aux demandes envoyées directement à partir d’un navigateur Web. Pour autoriser l’accès public à votre URL de fonction, choisissez le type d’authentification `NONE`.

Si vous choisissez le `NONE` type d’authentification, Lambda n’utilise pas IAM pour authentifier les demandes vers votre URL de fonction. Toutefois, votre fonction doit disposer d’une politique basée sur les ressources qui autorise `lambda:InvokeFunctionUrl` et `lambda:InvokeFunction`. Lorsque vous créez une URL de fonction avec un type d'authentification à `NONE` l'aide de la console ou AWS Serverless Application Model (AWS SAM), Lambda crée automatiquement la politique basée sur les ressources pour vous. Si vous utilisez directement l'API AWS CLI AWS CloudFormation, ou l'API Lambda, vous devez [ajouter la politique vous-même](#policy-cli).

Nous vous recommandons d'inclure la clé de InvokedViaFunctionUrl contexte [lambda :](https://docs.aws.amazon.com/lambda/latest/api/API_AddPermission.html#lambda-AddPermission-request-InvokedViaFunctionUrl) dans vos politiques basées sur les ressources lorsque vous utilisez le `NONE` type d'authentification. Cette clé de contexte garantit que la fonction ne peut être invoquée que via l’URL de la fonction et non via d’autres méthodes d’invocation.

Notez ce qui suit concernant cette politique :
+ Toutes les entités peuvent appeler `lambda:InvokeFunctionUrl` et `lambda:InvokeFunction`. Cela signifie que toute personne disposant de votre URL de fonction peut invoquer votre fonction.
+ La valeur de la clé de condition `lambda:FunctionUrlAuthType` est `NONE`. Cela signifie que la déclaration de stratégie n’autorise l’accès que lorsque le type d’authentification de votre URL de fonction est également `NONE`.
+ La condition `lambda:InvokedViaFunctionUrl` garantit que la fonction ne peut être invoquée que via l’URL de la fonction et non via d’autres méthodes d’invocation.

**Example – Politique basée sur les ressources par défaut pour le type d’authentification NONE**    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "FunctionURLAllowPublicAccess",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "lambda:InvokeFunctionUrl",
      "Resource": "arn:aws:lambda:us-east-2:123456789012:function:my-function",
      "Condition": {
        "StringEquals": {
          "lambda:FunctionUrlAuthType": "NONE"
        }
      }
    },
    {
      "Sid": "FunctionURLInvokeAllowPublicAccess",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "lambda:InvokeFunction",
      "Resource": "arn:aws:lambda:us-east-2:123456789012:function:my-function",
      "Condition": {
        "Bool": {
          "lambda:InvokedViaFunctionUrl": "true"
        }
      }
    }
  ]
}
```

**Créez la politique basée sur les ressources à l'aide du AWS CLI**  
À moins que vous n'utilisiez la console ou AWS SAM que vous ne créiez une URL de fonction avec un type d'authentification`NONE`, vous devez ajouter vous-même la politique basée sur les ressources. Utilisez les commandes suivantes pour créer des instructions pour les autorisations `lambda:InvokeFunctionUrl` et `lambda:InvokeFunction`. Chaque instruction doit être ajoutée dans une commande distincte.

```
aws lambda add-permission \
  --function-name UrlTestFunction \
  --statement-id UrlPolicyInvokeURL \
  --action lambda:InvokeFunctionUrl \
  --principal * \
  --function-url-auth-type NONE
```

```
aws lambda add-permission \
  --function-name UrlTestFunction \
  --statement-id UrlPolicyInvokeFunction \
  --action lambda:InvokeFunction \
  --principal * \
  --invoked-via-function-url
```

**Note**  
Si vous supprimez une URL de fonction avec un type d’authentification `NONE`, Lambda ne supprime pas automatiquement la politique basée sur les ressources associée. Si vous souhaitez supprimer cette politique, vous devez le faire manuellement.

Si la stratégie basée sur les ressources d’une fonction n’accorde pas les autorisations `lambda:invokeFunctionUrl` et `lambda:InvokeFunction`, les utilisateurs obtiendront alors un code d’erreur 403 Forbidden lorsqu’ils essaient d’invoquer l’URL de votre fonction. Cela se produira même si l’URL de la fonction utilise le type d’authentification `NONE`.

## Gouvernance et contrôle d’accès
<a name="urls-governance"></a>

Outre les autorisations d'appel d'URL de fonction, vous pouvez également contrôler l'accès aux actions utilisées pour configurer la fonction URLs. Lambda prend en charge les actions de politique IAM suivantes pour les fonctions : URLs
+ `lambda:InvokeFunctionUrl` – Invoquer une fonction Lambda à l’aide de l’URL de fonction.
+ `lambda:CreateFunctionUrlConfig` – Créer une URL de fonction et définir son `AuthType`.
+ `lambda:UpdateFunctionUrlConfig` – Mettre à jour la configuration d’une URL de fonction et son `AuthType`.
+ `lambda:GetFunctionUrlConfig` – Affichez les détails d’une URL de fonction.
+ `lambda:ListFunctionUrlConfigs` – Répertorier les configurations d’URL de fonction.
+ `lambda:DeleteFunctionUrlConfig` – Supprimer une URL de fonction.

Pour autoriser ou refuser l'accès à l'URL des fonctions à d'autres AWS entités, incluez ces actions dans les politiques IAM. Par exemple, la politique suivante accorde au `example` rôle dans les Compte AWS `444455556666` autorisations de mettre à jour l'URL de la fonction pour la fonction **my-function** dans le compte`123456789012`.

**Example exemple de stratégie d’URL de fonction inter-comptes**    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": { 
                "AWS": "arn:aws:iam::444455556666:role/example"
            },
            "Action": "lambda:UpdateFunctionUrlConfig",
            "Resource": "arn:aws:lambda:us-east-2:123456789012:function:my-function"
        }
    ]
}
```

### Clés de condition
<a name="urls-condition-keys"></a>

Pour un contrôle d'accès précis à votre fonction URLs, utilisez les touches contextuelles de condition. Lambda prend en charge les clés de contexte suivantes pour la fonction : URLs
+ `lambda:FunctionUrlAuthType` : définit une valeur d’énumération décrivant le type d’authentification utilisé par l’URL de votre fonction. La valeur peut être `AWS_IAM` ou `NONE`.
+ `lambda:InvokedViaFunctionUrl` : limite l’action `lambda:InvokeFunction` aux appels effectués via l’URL de la fonction. Cela garantit que la fonction ne peut être invoquée que via l’URL de la fonction et non via d’autres méthodes d’invocation. Pour des exemples de politiques basées sur les ressources qui utilisent la clé de contexte `lambda:InvokedViaFunctionUrl`, consultez les exemples dans [Utilisation du type d’authentification `AWS_IAM`](#urls-auth-iam) et [Utilisation du type d’authentification `NONE`](#urls-auth-none).

Vous pouvez utiliser ces clés de contexte dans les stratégies associées à votre fonction. Par exemple, vous souhaiterez peut-être limiter les personnes autorisées à modifier la configuration de votre fonction URLs. Pour rejeter toutes les demandes `UpdateFunctionUrlConfig` à n’importe quelle fonction avec un type d’authentification URL `NONE`, vous pouvez définir la stratégie suivante :

**Example exemple de stratégie d’URL de fonction avec refus explicite**    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Deny",
            "Principal": "*",
            "Action":[
                "lambda:UpdateFunctionUrlConfig"
            ],
            "Resource": "arn:aws:lambda:us-east-1:123456789012:function:*",
            "Condition": {
                "StringEquals": {
                    "lambda:FunctionUrlAuthType": "NONE"
                }
            }
        }
    ]
}
```

Pour accorder le `example` rôle dans Compte AWS `444455556666` les autorisations de création `CreateFunctionUrlConfig` et de `UpdateFunctionUrlConfig` requêtes sur les fonctions avec un type d'authentification URL`AWS_IAM`, vous pouvez définir la politique suivante :

**Example exemple de stratégie d’URL de fonction avec autorisation explicite**    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": { 
                "AWS": "arn:aws:iam::444455556666:role/example"
            },
            "Action":[
                "lambda:CreateFunctionUrlConfig",
                "lambda:UpdateFunctionUrlConfig"
            ],
            "Resource": "arn:aws:lambda:us-east-1:123456789012:function:*",
            "Condition": {
                "StringEquals": {
                    "lambda:FunctionUrlAuthType": "AWS_IAM"
                }
            }
        }
    ]
}
```

Vous pouvez également utiliser cette clé de condition dans une [stratégie de contrôle de service](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html) (SCP). SCPs À utiliser pour gérer les autorisations dans l'ensemble d'une organisation dans AWS Organizations. Par exemple, pour empêcher les utilisateurs de créer ou de mettre à jour des fonctions URLs utilisant autre chose que le type d'`AWS_IAM`authentification, appliquez la politique de contrôle des services suivante :

**Example exemple d’URL de fonction SCP avec refus explicite**    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Deny",
            "Action":[
                "lambda:CreateFunctionUrlConfig",
                "lambda:UpdateFunctionUrlConfig"
            ],
            "Resource": "arn:aws:lambda:*:123456789012:function:*",
            "Condition": {
                "StringNotEquals": {
                    "lambda:FunctionUrlAuthType": "AWS_IAM"
                }
            }
        }
    ]
}
```

# Invocation d’URL de fonctions Lambda
<a name="urls-invocation"></a>

Une URL de fonction est un point de terminaison HTTP(S) dédié pour votre fonction Lambda. Vous pouvez créer et configurer une URL de fonction via la console Lambda ou l’API Lambda.

**Astuce**  
Lambda propose deux méthodes pour invoquer votre fonction via un point de terminaison HTTP : les URL de fonction et Amazon API Gateway. Si vous ne savez pas quelle est la meilleure méthode pour votre cas d’utilisation, consultez [Sélection d’une méthode pour invoquer votre fonction Lambda à l’aide d’une requête HTTP](furls-http-invoke-decision.md).

Lorsque vous créez une URL de fonction, Lambda génère automatiquement un point de terminaison URL unique pour vous. Une fois que vous avez créé une URL de fonction, son point de terminaison URL ne change jamais. Les points de terminaison URL de fonction ont le format suivant :

```
https://<url-id>.lambda-url.<region>.on.aws
```

**Note**  
Les URL de fonction ne sont pas prises en charge dans les Régions AWS suivantes : Asie-Pacifique (Hyderabad) (`ap-south-2`), Asie-Pacifique (Melbourne) (`ap-southeast-4`), Asie-Pacifique (Malaisie) (`ap-southeast-5`), Asie-Pacifique (Nouvelle-Zélande) (`ap-southeast-6`), Asie-Pacifique (Thaïlande) (`ap-southeast-7`), Asie-Pacifique (Taipei) (`ap-east-2`), Canada Ouest (Calgary) (`ca-west-1`), Europe (Espagne) (`eu-south-2`), Europe (Zurich) (`eu-central-2`), Israël (Tel Aviv) (`il-central-1`) et Moyen-Orient (EAU) (`me-central-1`).

Les URL de fonctions sont compatibles avec la pile double, prenant en charge les adresses IPv4 et IPv6. Après avoir configuré votre URL de fonction, vous pouvez invoquer votre fonction à travers son point de terminaison HTTP(S) via un navigateur Web, curl, Postman, ou n’importe quel client HTTP. Pour invoquer l’URL d’une fonction, vous devez avoir les autorisations `lambda:InvokeFunctionUrl` et `lambda:InvokeFunction`. Pour de plus amples informations, consultez [Contrôle d’accès](urls-auth.md).

**Topics**
+ [

## Principes de base de l’invocation d’une URL de fonction
](#urls-invocation-basics)
+ [

## Charges utiles de demandes et de réponses
](#urls-payloads)

## Principes de base de l’invocation d’une URL de fonction
<a name="urls-invocation-basics"></a>

Si votre URL de votre fonction utilise le type d’authentification `AWS_IAM`, vous devez signer chaque demande HTTP en utilisant [AWSSignature Version 4 (SigV4)](https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html). Des outils comme [Postman](https://quickstarts.postman.com/guide/aws/index.html?index=..%2F..index#2) offrent des moyens intégrés de signer vos demandes avec SigV4.

Si vous n’utilisez pas d’outil pour signer des demandes HTTP sur l’URL de votre fonction, vous devez signer manuellement chaque demande à l’aide de SigV4. Lorsque l’URL de votre fonction reçoit une demande, Lambda calcule également la signature SigV4. Lambda traite la demande uniquement si les signatures correspondent. Pour obtenir des instructions sur la signature manuelle de vos demandes avec SigV4, consultez [Signature de demandes AWS avec Signature Version 4](https://docs.aws.amazon.com/general/latest/gr/sigv4_signing.html) dans le *Guide Référence générale d'Amazon Web Services*.

Si l’URL de votre fonction utilise le type d’authentification `NONE`, vous n’avez pas besoin de signer vos demandes avec SigV4. Vous pouvez invoquer votre fonction via un navigateur Web, curl, Postman ou n’importe quel client HTTP.

Pour tester des demandes `GET` simples vers votre fonction, utilisez un navigateur web. Par exemple, si l’URL de votre fonction est `https://abcdefg.lambda-url.us-east-1.on.aws`, et si elle prend en compte un paramètre de chaîne `message`, l’URL de votre demande peut se présenter comme suit :

```
https://abcdefg.lambda-url.us-east-1.on.aws/?message=HelloWorld
```

Pour tester d’autres demandes HTTP, telles qu’une demande `POST`, vous pouvez utiliser un outil tel que curl. Par exemple, si vous souhaitez inclure certaines données JSON dans une demande `POST` pour l’URL de votre fonction, vous pouvez utiliser la commande curl suivante :

```
curl -v 'https://abcdefg.lambda-url.us-east-1.on.aws/?message=HelloWorld' \
-H 'content-type: application/json' \
-d '{ "example": "test" }'
```

## Charges utiles de demandes et de réponses
<a name="urls-payloads"></a>

Lorsqu’un client appelle l’URL de votre fonction, Lambda mappe la demande sur un objet événement avant de la transmettre à votre fonction. La réponse de votre fonction est ensuite mappée à une réponse HTTP que Lambda renvoie au client via l’URL de la fonction.

Les formats d’événements de demande et de réponse suivent le même schéma que le [format de charge utile version 2.0 d’Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-lambda.html#http-api-develop-integrations-lambda.proxy-format).

### Format de la charge utile de demande
<a name="urls-request-payload"></a>

Une charge utile de demande a la structure suivante :

```
{
  "version": "2.0",
  "routeKey": "$default",
  "rawPath": "/my/path",
  "rawQueryString": "parameter1=value1&parameter1=value2&parameter2=value",
  "cookies": [
    "cookie1",
    "cookie2"
  ],
  "headers": {
    "header1": "value1",
    "header2": "value1,value2"
  },
  "queryStringParameters": {
    "parameter1": "value1,value2",
    "parameter2": "value"
  },
  "requestContext": {
    "accountId": "123456789012",
    "apiId": "<urlid>",
    "authentication": null,
    "authorizer": {
        "iam": {
                "accessKey": "AKIA...",
                "accountId": "111122223333",
                "callerId": "AIDA...",
                "cognitoIdentity": null,
                "principalOrgId": null,
                "userArn": "arn:aws:iam::111122223333:user/example-user",
                "userId": "AIDA..."
        }
    },
    "domainName": "<url-id>.lambda-url.us-west-2.on.aws",
    "domainPrefix": "<url-id>",
    "http": {
      "method": "POST",
      "path": "/my/path",
      "protocol": "HTTP/1.1",
      "sourceIp": "123.123.123.123",
      "userAgent": "agent"
    },
    "requestId": "id",
    "routeKey": "$default",
    "stage": "$default",
    "time": "12/Mar/2020:19:03:58 +0000",
    "timeEpoch": 1583348638390
  },
  "body": "Hello from client!",
  "pathParameters": null,
  "isBase64Encoded": false,
  "stageVariables": null
}
```


| Paramètre | Description | Exemple | 
| --- | --- | --- | 
|  `version`  |  La version du format de la charge utile pour cet événement. Les URL de fonctions Lambda prennent actuellement en charge [le format de charge utile version 2.0](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-lambda.html#http-api-develop-integrations-lambda.proxy-format).  |  `2.0`  | 
|  `routeKey`  |  Les URL de fonctions n’utilisent pas ce paramètre. Lambda le définit sur `$default` comme espace réservé.  |  `$default`  | 
|  `rawPath`  |  Chemin d’accès de la demande. Par exemple, si l’URL de la demande est `https://{url-id}.lambda-url.{region}.on.aws/example/test/demo`, alors la valeur du chemin brut est `/example/test/demo`.  |  `/example/test/demo`  | 
|  `rawQueryString`  |  La chaîne brute contenant les paramètres de la chaîne de la requête de la demande. Les caractères pris en charge sont les suivants : `a-z`, `A-Z`, `0-9`, `.`, `_`, `-`, `%`, `&`, `=`, et `+`.  |  `"?parameter1=value1&parameter2=value2"`  | 
|  `cookies`  |  Un tableau contenant tous les cookies envoyés dans le cadre de la demande.  |  `["Cookie_1=Value_1", "Cookie_2=Value_2"]`  | 
|  `headers`  |  La liste des en-têtes de demande, présentée sous forme de paires valeur-clé.  |  `{"header1": "value1", "header2": "value2"}`  | 
|  `queryStringParameters`  |  Paramètres de requête pour la demande. Par exemple, si l’URL de la demande est `https://{url-id}.lambda-url.{region}.on.aws/example?name=Jane`, alors la valeur `queryStringParameters` est un objet JSON avec une clé `name` et une valeur `Jane`.  |  `{"name": "Jane"}`  | 
|  `requestContext`  |  Un objet qui contient des informations supplémentaires sur la demande, comme `requestId`, l’heure de la demande, et l’identité de l’appelant s’il est autorisé via Gestion des identités et des accès AWS (IAM).  |   | 
|  `requestContext.accountId`  |  L’identifiant Compte AWS du propriétaire de la fonction.  |  `"123456789012"`  | 
|  `requestContext.apiId`  |  L’identifiant de l’URL de la fonction.  |  `"33anwqw8fj"`  | 
|  `requestContext.authentication`  |  Les URL de fonctions n’utilisent pas ce paramètre. Lambda le définit sur `null`.  |  `null`  | 
|  `requestContext.authorizer`  |  Un objet qui contient des informations sur l’identité de l’appelant si l’URL de la fonction utilise le type d’authentification `AWS_IAM`. Sinon, Lambda définit cette valeur sur `null`.  |   | 
|  `requestContext.authorizer.iam.accessKey`  |  La clé d’accès de l’identité de l’appelant.  |  `"AKIAIOSFODNN7EXAMPLE"`  | 
|  `requestContext.authorizer.iam.accountId`  |  L’identifiant Compte AWS de l’identité de l’appelant.  |  `"111122223333"`  | 
|  `requestContext.authorizer.iam.callerId`  |  L’ID (ID d’utilisateur) de l’appelant.  |  `"AIDACKCEVSQ6C2EXAMPLE"`  | 
|  `requestContext.authorizer.iam.cognitoIdentity`  |  Les URL de fonctions n’utilisent pas ce paramètre. Lambda le définit sur `null` ou l’exclut de JSON.  |  `null`  | 
|  `requestContext.authorizer.iam.principalOrgId`  |  L’ID de l’organisation du principal associé à l’ID de l’appelant.  |  `"AIDACKCEVSQORGEXAMPLE"`  | 
|  `requestContext.authorizer.iam.userArn`  |  L’Amazon Resource Name (ARN) utilisateur de l’identité de l’appelant.  |  `"arn:aws:iam::111122223333:user/example-user"`  | 
|  `requestContext.authorizer.iam.userId`  |  L’identifiant utilisateur de l’identité de l’appelant.  |  `"AIDACOSFODNN7EXAMPLE2"`  | 
|  `requestContext.domainName`  |  Le nom de domaine de l’URL de la fonction.  |  `"<url-id>.lambda-url.us-west-2.on.aws"`  | 
|  `requestContext.domainPrefix`  |  Le nom de domaine de l’URL de la fonction.  |  `"<url-id>"`  | 
|  `requestContext.http`  |  Un objet qui contient des informations sur la demande HTTP.  |   | 
|  `requestContext.http.method`  |  La méthode HTTP utilisée dans cette demande. Les valeurs valides sont les suivantes : `GET`, `POST`, `PUT`, `HEAD`, `OPTIONS`, `PATCH` et `DELETE`.  |  `GET`  | 
|  `requestContext.http.path`  |  Chemin d’accès de la demande. Par exemple, si l’URL de la demande est `https://{url-id}.lambda-url.{region}.on.aws/example/test/demo`, alors la valeur du chemin est `/example/test/demo`.  |  `/example/test/demo`  | 
|  `requestContext.http.protocol`  |  Le protocole de la demande.  |  `HTTP/1.1`  | 
|  `requestContext.http.sourceIp`  |  L’adresse IP source de la connexion TCP immédiate qui fait la demande.  |  `123.123.123.123`  | 
|  `requestContext.http.userAgent`  |  La valeur de l’en-tête de la demande Utilisateur-Agent.  |  `Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) Gecko/20100101 Firefox/42.0`  | 
|  `requestContext.requestId`  |  L’identifiant de la demande d’invocation. Vous pouvez utiliser cet ID pour suivre les journaux d’invocation liés à votre fonction.  |  `e1506fd5-9e7b-434f-bd42-4f8fa224b599`  | 
|  `requestContext.routeKey`  |  Les URL de fonctions n’utilisent pas ce paramètre. Lambda le définit sur `$default` comme espace réservé.  |  `$default`  | 
|  `requestContext.stage`  |  Les URL de fonctions n’utilisent pas ce paramètre. Lambda le définit sur `$default` comme espace réservé.  |  `$default`  | 
|  `requestContext.time`  |  Horodatage de la demande.  |  `"07/Sep/2021:22:50:22 +0000"`  | 
|  `requestContext.timeEpoch`  |  L’horodatage de la demande, en heure d’époque Unix.  |  `"1631055022677"`  | 
|  `body`  |  Le corps de la demande. Si le type de contenu de la demande est binaire, le corps est codé en base64.  |  `{"key1": "value1", "key2": "value2"}`  | 
|  `pathParameters`  |  Les URL de fonctions n’utilisent pas ce paramètre. Lambda le définit sur `null` ou l’exclut de JSON.  |  `null`  | 
|  `isBase64Encoded`  |  `TRUE` si le corps est une charge utile binaire et codé en base64. Sinon `FALSE`.  |  `FALSE`  | 
|  `stageVariables`  |  Les URL de fonctions n’utilisent pas ce paramètre. Lambda le définit sur `null` ou l’exclut du JSON.  |  `null`  | 

### Format de la charge utile de la réponse
<a name="urls-response-payload"></a>

Lorsque votre fonction renvoie une réponse, Lambda analyse la réponse et la convertit en réponse HTTP. Les charges utiles de la réponse de fonction ont le format suivant :

```
{
   "statusCode": 201,
    "headers": {
        "Content-Type": "application/json",
        "My-Custom-Header": "Custom Value"
    },
    "body": "{ \"message\": \"Hello, world!\" }",
    "cookies": [
        "Cookie_1=Value1; Expires=21 Oct 2021 07:48 GMT",
        "Cookie_2=Value2; Max-Age=78000"
    ],
    "isBase64Encoded": false
}
```

Lambda déduit le format de réponse pour vous. Si votre fonction renvoie un JSON valide et ne renvoie pas un `statusCode`, Lambda assume ce qui suit :
+ `statusCode` is `200`.
**Note**  
Les valeurs de `statusCode` valides sont comprises entre 100 et 599.
+ `content-type` is `application/json`.
+ `body` est la réponse de la fonction.
+ `isBase64Encoded` is `false`.

Les exemples suivants montrent comment la sortie de votre fonction Lambda est mappée à la charge utile de réponse et comment la charge utile de réponse est mappée à la réponse HTTP finale. Lorsque le client invoque l’URL de votre fonction, il voit la réponse HTTP.

**Exemple de sortie pour une réponse de chaîne**


| Sortie de la fonction Lambda | Sortie de réponse interprétée | Réponse HTTP (ce que voit le client) | 
| --- | --- | --- | 
|  <pre>"Hello, world!"</pre>  |  <pre>{<br />  "statusCode": 200,<br />  "body": "Hello, world!",<br />  "headers": {<br />    "content-type": "application/json"<br />  },<br />  "isBase64Encoded": false<br />}</pre>  |  <pre>HTTP/2 200<br />date: Wed, 08 Sep 2021 18:02:24 GMT<br />content-type: application/json<br />content-length: 15<br /><br />"Hello, world!"</pre>  | 

**Exemple de sortie pour une réponse JSON**


| Sortie de la fonction Lambda | Sortie de réponse interprétée | Réponse HTTP (ce que voit le client) | 
| --- | --- | --- | 
|  <pre>{<br />  "message": "Hello, world!"<br />}</pre>  |  <pre>{<br />  "statusCode": 200,<br />  "body": {<br />    "message": "Hello, world!"<br />  },<br />  "headers": {<br />    "content-type": "application/json"<br />  },<br />  "isBase64Encoded": false<br />}</pre>  |  <pre>HTTP/2 200<br />date: Wed, 08 Sep 2021 18:02:24 GMT<br />content-type: application/json<br />content-length: 34<br /><br />{<br />  "message": "Hello, world!"<br />}</pre>  | 

**Exemple de sortie pour une réponse personnalisée**


| Sortie de la fonction Lambda | Sortie de réponse interprétée | Réponse HTTP (ce que voit le client) | 
| --- | --- | --- | 
|  <pre>{<br />   "statusCode": 201,<br />    "headers": {<br />        "Content-Type": "application/json",<br />        "My-Custom-Header": "Custom Value"<br />    },<br />    "body": JSON.stringify({<br />        "message": "Hello, world!"<br />    }),<br />    "isBase64Encoded": false<br />}</pre>  |  <pre>{<br />   "statusCode": 201,<br />    "headers": {<br />        "Content-Type": "application/json",<br />        "My-Custom-Header": "Custom Value"<br />    },<br />    "body": JSON.stringify({<br />        "message": "Hello, world!"<br />    }),<br />    "isBase64Encoded": false<br />}</pre>  |  <pre>HTTP/2 201<br />date: Wed, 08 Sep 2021 18:02:24 GMT<br />content-type: application/json<br />content-length: 27<br />my-custom-header: Custom Value<br /><br />{<br />  "message": "Hello, world!"<br />}</pre>  | 

### Cookies
<a name="urls-cookies"></a>

Pour renvoyer des cookies depuis votre fonction, n’ajoutez pas manuellement des en-têtes `set-cookie`. Incluez plutôt les cookies dans votre objet de charge utile de réponse. Lambda les interprète automatiquement et les ajoute comme en-têtes `set-cookie` de votre réponse HTTP, comme dans l’exemple suivant.


| Sortie de la fonction Lambda | Réponse HTTP (ce que voit le client) | 
| --- | --- | 
|  <pre>{<br />   "statusCode": 201,<br />    "headers": {<br />        "Content-Type": "application/json",<br />        "My-Custom-Header": "Custom Value"<br />    },<br />    "body": JSON.stringify({<br />        "message": "Hello, world!"<br />    }),<br />    "cookies": [<br />        "Cookie_1=Value1; Expires=21 Oct 2021 07:48 GMT",<br />        "Cookie_2=Value2; Max-Age=78000"<br />    ],<br />    "isBase64Encoded": false<br />}</pre>  |  <pre>HTTP/2 201<br />date: Wed, 08 Sep 2021 18:02:24 GMT<br />content-type: application/json<br />content-length: 27<br />my-custom-header: Custom Value<br />set-cookie: Cookie_1=Value2; Expires=21 Oct 2021 07:48 GMT<br />set-cookie: Cookie_2=Value2; Max-Age=78000<br /><br />{<br />  "message": "Hello, world!"<br />}</pre>  | 

# Surveillance des URL de fonctions Lambda
<a name="urls-monitoring"></a>

Vous pouvez utiliser AWS CloudTrail et Amazon CloudWatch pour surveiller vos URL de fonctions.

**Topics**
+ [

## URL de fonctions de surveillance avec CloudTrail
](#urls-cloudtrail)
+ [

## Métriques CloudWatch pour les URL de fonctions
](#urls-cloudwatch)

## URL de fonctions de surveillance avec CloudTrail
<a name="urls-cloudtrail"></a>

Pour les URL de fonctions, Lambda prend automatiquement en charge la journalisation des opérations API suivantes en tant qu'événements dans des fichiers journaux CloudTrail :
+ [CreateFunctionUrlConfig](https://docs.aws.amazon.com/lambda/latest/api/API_CreateFunctionUrlConfig.html)
+ [UpdateFunctionUrlConfig](https://docs.aws.amazon.com/lambda/latest/api/API_UpdateFunctionUrlConfig.html)
+ [DeleteFunctionUrlConfig](https://docs.aws.amazon.com/lambda/latest/api/API_DeleteFunctionUrlConfig.html)
+ [GetFunctionUrlConfig](https://docs.aws.amazon.com/lambda/latest/api/API_GetFunctionUrlConfig.html)
+ [ListFunctionUrlConfigs](https://docs.aws.amazon.com/lambda/latest/api/API_ListFunctionUrlConfigs.html)

Chaque entrée de journal contient des informations sur l'identité de l'appelant, le moment où la demande a été faite, et d'autres détails. Vous pouvez voir tous les événements des 90 derniers jours en consultant votre **Event history** (Historique des événements) CloudTrail. Pour conserver les enregistrements de plus de 90 jours, vous pouvez créer un journal d'activité.

Par défaut, CloudTrail ne journalise pas les demandes `InvokeFunctionUrl`, qui sont considérées comme des événements de données. Cependant, vous pouvez activer la journalisation des événements de données dans CloudTrail. Pour plus d’informations, consultez [Consignation d’événements de données pour les journaux d’activité](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/logging-data-events-with-cloudtrail.html) dans le *Guide de l’utilisateur AWS CloudTrail*.

## Métriques CloudWatch pour les URL de fonctions
<a name="urls-cloudwatch"></a>

Lambda envoie des métriques agrégées concernant les demandes d'URL de fonction vers CloudWatch. Avec ces métriques, vous pouvez surveiller les URL de vos fonctions, créer des tableaux de bord et configurer des alarmes dans la console CloudWatch.

Les URL de fonctions prennent en charge les métriques d'invocation suivantes. Nous vous recommandons de consulter ces métriques avec la statistique `Sum`.
+ `UrlRequestCount` – Nombre de demandes faites vers cette URL de fonction.
+ `Url4xxCount` – Nombre de demandes ayant retourné un code d'état HTTP 4XX. Les codes de la série 4XX indiquent des erreurs côté client, telles que des demandes erronées.
+ `Url5xxCount` – Nombre de demandes ayant retourné un code d'état HTTP 5XX. Les codes de la série 5XX indiquent des erreurs côté serveur, telles que des erreurs de fonction et des délais d'attente.

Les URL de fonctions prennent également en charge la métrique de performance suivante. Nous vous recommandons de consulter ces métriques avec les statistiques `Average` ou `Max`.
+ `UrlRequestLatency` – Le temps écoulé entre le moment où l'URL de fonction reçoit une demande et celui où l'URL de fonction renvoie une réponse.

Chacune de ces métriques d'invocation et de performance prend en charge les dimensions suivantes :
+ `FunctionName` – Affichez les métriques agrégées pour les URL de fonctions attribuées à la version non publiée `$LATEST` d'une fonction, ou à tout alias de la fonction. Par exemple, `hello-world-function`.
+ `Resource` – Affichez les métriques d'une URL de fonction spécifique. Cela est défini par un nom de fonction, accompagné de la version non publiée `$LATEST` de la fonction ou d'un alias de la fonction. Par exemple, `hello-world-function:$LATEST`.
+ `ExecutedVersion` – Affichez les métriques d'une URL de fonction spécifique en fonction de la version exécutée. Vous pouvez utiliser cette dimension principalement pour suivre l'URL de la fonction affectée à la version non publiée `$LATEST`.

# Sélection d’une méthode pour invoquer votre fonction Lambda à l’aide d’une requête HTTP
<a name="furls-http-invoke-decision"></a>

De nombreux cas d’utilisation courants de Lambda impliquent d’invoquer votre fonction à l’aide d’une requête HTTP. Vous pourriez souhaiter qu’une application Web invoque votre fonction par le biais d’une demande de navigateur. Les fonctions Lambda peuvent également être utilisées pour créer un REST complet APIs, gérer les interactions des utilisateurs à partir d'applications mobiles, traiter des données provenant de services externes via des appels HTTP ou créer des webhooks personnalisés.

Les sections suivantes expliquent quels sont vos choix pour invoquer Lambda via HTTP et fournissent des informations qui vous aideront à prendre la bonne décision pour votre cas d’utilisation particulier.

## Options proposées lors de la sélection d’une méthode d’appel HTTP
<a name="w2aac39c81c73b9"></a>

Lambda propose deux méthodes principales pour appeler une fonction à l'aide d'une requête HTTP : [function URLs](urls-configuration.md) et [API](services-apigateway.md) Gateway. Les principales différences entre ces deux options sont les suivantes :
+ **La fonction Lambda URLs** fournit un point de terminaison HTTP simple et direct pour une fonction Lambda. Elles sont optimisées pour la simplicité et la rentabilité et constituent le moyen le plus rapide d’exposer une fonction Lambda via HTTP.
+ **API Gateway** est un service plus avancé permettant de créer des fonctionnalités complètes APIs. API Gateway est optimisé pour créer et gérer des productions APIs à grande échelle et fournit des outils complets pour la sécurité, la surveillance et la gestion du trafic.

## Recommandations si vous connaissez déjà vos besoins
<a name="w2aac39c81c73c11"></a>

Si vous connaissez déjà bien vos besoins, voici nos recommandations de base :

Nous recommandons cette **[fonction URLs](urls-configuration.md)** pour les applications simples ou le prototypage où vous n'avez besoin que de méthodes d'authentification et de request/response manipulation de base et où vous souhaitez réduire les coûts et la complexité au minimum.

**[API Gateway](services-apigateway.md)** est un meilleur choix pour les applications de production à grande échelle ou pour les cas où vous avez besoin de fonctionnalités plus avancées telles que la prise en charge d'[OpenAPI Description](https://www.openapis.org/), un choix d'options d'authentification, des noms de domaine personnalisés ou une request/response gestion riche, notamment la régulation, la mise en cache et la transformation. request/response 

## Éléments à prendre en compte lors de la sélection d’une méthode pour invoquer votre fonction Lambda
<a name="w2aac39c81c73c13"></a>

Lorsque vous choisissez entre function URLs et API Gateway, vous devez prendre en compte les facteurs suivants :
+ Vos besoins en matière d'authentification, par exemple si vous avez besoin OAuth d'Amazon Cognito pour authentifier les utilisateurs
+ Vos exigences en matière de mise à l’échelle et la complexité de l’API que vous souhaitez implémenter
+ Si vous avez besoin de fonctionnalités avancées telles que la validation et le request/response formatage des demandes
+ Vos besoins en matière de surveillance
+ Vos objectifs en matière de coûts

La compréhension de ces facteurs vous permettra de choisir l’option qui répond le mieux à vos exigences en matière de sécurité, de complexité et de coût.

Le tableau suivant résume les différences entre les deux options.

### Authentification
<a name="w2aac39c81c73c13c11b1"></a>
+ **La fonction URLs** fournit des options d'authentification de base via Gestion des identités et des accès AWS (IAM). Vous pouvez configurer vos points de terminaison pour qu’ils soient publics (aucune authentification) ou pour qu’ils nécessitent une authentification IAM. Avec l'authentification IAM, vous pouvez utiliser des AWS informations d'identification standard ou des rôles IAM pour contrôler l'accès. Bien que simple à configurer, cette approche offre des options limitées par rapport aux autres méthodes d’authentification.
+ **API Gateway** donne accès à une gamme plus complète d’options d’authentification. Outre l'authentification IAM, vous pouvez utiliser des autorisateurs [Lambda](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-use-lambda-authorizer.html) (logique d'authentification personnalisée), des groupes d'utilisateurs Amazon [Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/what-is-amazon-cognito.html) et des flux .0. OAuth2 Cette flexibilité vous permet de mettre en œuvre des schémas d’authentification complexes, notamment des fournisseurs d’authentification tiers, une authentification basée sur des jetons et une authentification multifactorielle.

### Traitement des requêtes et réponses
<a name="w2aac39c81c73c13c11b3"></a>
+ **La fonction URLs** fournit une gestion de base des requêtes et des réponses HTTP. Elles prennent en charge les méthodes HTTP standard et créent une prise en charge intégrée du partage des ressources entre origines (CORS, cross-origin resource sharing). Bien qu’elles puissent gérer naturellement les charges utiles JSON et les paramètres de requête, elles n’offrent pas de fonctionnalités de transformation ou de validation des requêtes. La gestion des réponses est tout aussi simple : le client reçoit la réponse de votre fonction Lambda exactement telle que Lambda la renvoie.
+ **API Gateway** fournit des fonctionnalités sophistiquées de gestion des requêtes et des réponses. Vous pouvez définir des validateurs de demandes, transformer les demandes et les réponses à l'aide de modèles de mappage, configurer request/response des en-têtes et implémenter la mise en cache des réponses. API Gateway prend également en charge les charges utiles binaires et les noms de domaine personnalisés et peut modifier les réponses avant qu’elles n’atteignent le client. Vous pouvez configurer des modèles pour la request/response validation et la transformation à l'aide du schéma JSON.

### Mise à l’échelle
<a name="w2aac39c81c73c13c11b5"></a>
+ Les **fonctions** s' URLsadaptent directement aux limites de simultanéité de votre fonction Lambda et gérez les pics de trafic en augmentant la taille de votre fonction jusqu'à sa limite de simultanéité maximale configurée. Une fois cette limite atteinte, Lambda répond aux requêtes supplémentaires avec des réponses HTTP 429. Il n’existe aucun mécanisme de mise en file d’attente intégré. La gestion de la mise à l’échelle dépend donc entièrement de la configuration de votre fonction Lambda. Par défaut, les fonctions Lambda sont limitées à 1 000 exécutions simultanées par fonction. Région AWS
+ **API Gateway** fournit des fonctionnalités de dimensionnement supplémentaires en plus de la propre mise à l’échelle de Lambda. Il inclut des commandes intégrées de mise en file d’attente et de limitation des requêtes, ce qui vous permet de gérer les pics de trafic de manière plus élégante. API Gateway peut traiter jusqu’à 10 000 requêtes par seconde et par région par défaut, avec une capacité de débordement de 5 000 requêtes par seconde. Il fournit également des outils pour limiter les requêtes à différents niveaux (API, étape ou méthode) afin de protéger votre dorsal.

### Contrôle
<a name="w2aac39c81c73c13c11b7"></a>
+ Les **fonctions URLs** offrent une surveillance de base via CloudWatch les métriques Amazon, notamment le nombre de demandes, la latence et les taux d'erreur. Vous avez accès aux métriques et aux journaux Lambda standard, qui indiquent les requêtes brutes entrant dans votre fonction. Bien que cela fournisse une visibilité opérationnelle essentielle, les métriques se concentrent principalement sur l’exécution des fonctions.
+ **API Gateway** fournit des fonctionnalités de surveillance complètes, notamment des métriques détaillées, des options de journalisation et de suivi. Vous pouvez surveiller les appels d'API, la latence, les taux d'erreur et hit/miss les taux de cache via CloudWatch. API Gateway s'intègre également au AWS X-Ray traçage distribué et fournit des formats de journalisation personnalisables.

### Cost
<a name="w2aac39c81c73c13c11b9"></a>
+ Les **fonctions URLs** suivent le modèle de tarification Lambda standard : vous ne payez que pour les appels de fonctions et le temps de calcul. Il n’y a pas de frais supplémentaires pour le point de terminaison de l’URL lui-même. Cela en fait un choix rentable pour les applications simples APIs ou à faible trafic si vous n'avez pas besoin des fonctionnalités supplémentaires d'API Gateway.
+ **API Gateway** propose un [niveau gratuit](https://aws.amazon.com/api-gateway/pricing/#Free_Tier) qui inclut un million d'appels d'API reçus pour REST APIs et un million d'appels d'API reçus pour HTTP APIs. Ensuite, API Gateway facture les appels d’API, le transfert de données et la mise en cache (si activée). Reportez-vous à la [page de tarification](https://aws.amazon.com/api-gateway/pricing/) d’API Gateway pour connaître les coûts associés à votre propre cas d’utilisation.

### Autres fonctions
<a name="w2aac39c81c73c13c11c11"></a>
+  URLsLes **fonctions** sont conçues pour la simplicité et l'intégration directe de Lambda. Ils prennent en charge les points de terminaison HTTP et HTTPS, offrent un support CORS intégré et fournissent des points de terminaison à double pile (IPv4 et IPv6). Bien qu’elles ne disposent d’aucune fonctionnalité avancée, elles excellent dans les scénarios où vous avez besoin d’un moyen rapide et simple d’exposer les fonctions Lambda via HTTP.
+ **API Gateway** inclut de nombreuses fonctionnalités supplémentaires telles que la gestion des versions des API, la gestion des étapes, les clés d'API pour les plans d'utilisation, la documentation des API via Swagger/OpenAPI, le mode WebSocket APIs privé au sein d' APIs un VPC et l'intégration WAF pour une sécurité accrue. Il prend également en charge les déploiements Canary, les intégrations fictives à des fins de test et l'intégration avec d'autres solutions que Services AWS Lambda.

## Sélection d’une méthode pour invoquer votre fonction Lambda
<a name="w2aac39c81c73c15"></a>

Maintenant que vous avez pris connaissance des critères de sélection entre la fonction Lambda URLs et API Gateway et des principales différences entre les deux, vous pouvez sélectionner l'option qui répond le mieux à vos besoins et utiliser les ressources suivantes pour vous aider à commencer à l'utiliser.

------
#### [ Function URLs ]

**Commencez à utiliser Function URLs grâce aux ressources suivantes**
+ Suivre le tutoriel [Création d’une fonction Lambda avec une URL de fonction](urls-webhook-tutorial.md)
+ Pour en savoir plus sur URLs les fonctions, consultez le [Création et gestion de la fonction Lambda URLs](urls-configuration.md) chapitre de ce guide
+ Essayez le tutoriel guidé intégré à la console **Créer une application Web simple** en procédant comme suit :

1. Ouvrez la [page Fonctions](https://console.aws.amazon.com/lambda/home#/functions) de la console Lambda.

1. Ouvrez le panneau d’aide en cliquant sur l’icône dans le coin supérieur droit de l’écran.  
![\[\]](http://docs.aws.amazon.com/fr_fr/lambda/latest/dg/images/console_help_screenshot.png)

1. Sélectionnez **Tutoriels**.

1. Dans **Créer une application Web simple**, choisissez **Démarrer le tutoriel**.

------
#### [ API Gateway ]

**Mise en route avec Lambda et API Gateway grâce aux ressources suivantes**
+ Suivez le tutoriel [Utilisation de Lambda avec API Gateway](services-apigateway-tutorial.md) pour créer une API REST intégrée à une fonction Lambda principale.
+ Pour en savoir plus sur les différents types d’API proposés par API Gateway, consultez les sections suivantes du *Guide du développeur Amazon API Gateway* :
  + [API Gateway REST APIs](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-rest-api.html)
  + [API Gateway HTTP APIs](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api.html)
  + [API Gateway WebSocket APIs](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api.html)
+ Essayez un ou plusieurs des exemples de la section [Tutoriels et ateliers](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-tutorials.html) du manuel *Guide du développeur Amazon API Gateway*.

------

# Didacticiel : création d’un point de terminaison webhook à l’aide d’une URL de fonction Lambda
<a name="urls-webhook-tutorial"></a>

Dans ce didacticiel, vous créez une URL de fonction Lambda pour implémenter un point de terminaison webhook. Un webhook est une communication légère pilotée par les événements qui envoie automatiquement des données entre applications via HTTP. Vous pouvez utiliser un webhook pour recevoir des mises à jour immédiates sur les événements survenant dans un autre système, par exemple lorsqu’un nouveau client s’inscrit sur un site Web, qu’un paiement est traité ou qu’un fichier est chargé.

Avec Lambda, les webhooks peuvent être implémentés à l'aide de la fonction Lambda ou d'API Gateway. URLs URLs Les fonctions sont un bon choix pour les webhooks simples qui ne nécessitent pas de fonctionnalités telles que l'autorisation avancée ou la validation des demandes.

**Astuce**  
Si vous ne savez pas quelle est la solution la mieux adaptée à votre cas d’utilisation particulier, consultez [Sélection d’une méthode pour invoquer votre fonction Lambda à l’aide d’une requête HTTP](furls-http-invoke-decision.md).

## Conditions préalables
<a name="urls-webhook-tutorial-prereqs"></a>

Pour terminer ce didacticiel, Python (version 3.8 ou ultérieure) ou Node.js (version 18 ou ultérieure) doit être installé sur votre machine locale.

Pour tester le point de terminaison à l’aide d’une requête HTTP, le didacticiel utilise [curl](https://curl.se/), un outil de ligne de commande que vous pouvez utiliser pour transférer des données à l’aide de différents protocoles réseau. Reportez-vous à la [documentation curl](https://curl.se/docs/install.html) pour savoir comment installer l’outil si vous ne l’avez pas déjà.

## Créer la fonction Lambda
<a name="urls-webhook-tutorial-function"></a>

Créez d’abord la fonction Lambda qui s’exécute lorsqu’une requête HTTP est envoyée à votre point de terminaison webhook. Dans cet exemple, l’application d’envoi envoie une mise à jour chaque fois qu’un paiement est soumis, et indique dans le corps de la requête HTTP si le paiement a été effectué avec succès. La fonction Lambda analyse la demande et agit en fonction du statut du paiement. Dans cet exemple, le code imprime simplement l’ID de commande pour le paiement, mais dans une application réelle, vous pouvez ajouter la commande à une base de données ou envoyer une notification.

La fonction implémente également la méthode d’authentification la plus couramment utilisée pour les webhooks, l’authentification des messages basée sur le hachage (HMAC). Avec cette méthode, les applications d’envoi et de réception partagent une clé secrète. L’application d’envoi utilise un algorithme de hachage pour générer une signature unique à l’aide de cette clé associée au contenu du message, et inclut la signature dans la demande de webhook sous forme d’en-tête HTTP. L’application réceptrice répète ensuite cette étape en générant la signature à l’aide de la clé secrète, et compare la valeur obtenue avec la signature envoyée dans l’en-tête de la demande. Si le résultat correspond, la demande est considérée comme légitime. 

Créez la fonction à l’aide de la console Lambda avec l’environnement d'exécution Python ou Node.js.

------
#### [ Python ]

**Créer la fonction Lambda**

1. Ouvrez la [page Functions](https://console.aws.amazon.com/lambda/home#/functions) (Fonctions) de la console Lambda.

1. Créez une fonction de type « Hello World » de base en procédant comme suit :

   1. Choisissez **Créer une fonction**.

   1. Sélectionnez **Créer à partir de zéro**.

   1. Sous **Nom de la fonction**, saisissez **myLambdaWebhook**.

   1. Pour **Runtime**, sélectionnez **python3.14**.

   1. Choisissez **Créer une fonction**.

1. Dans le volet **Source du code**, remplacez le code existant en copiant et en collant ce qui suit :

   ```
   import json
   import hmac
   import hashlib
   import os
   
   def lambda_handler(event, context):
       
       # Get the webhook secret from environment variables
       webhook_secret = os.environ['WEBHOOK_SECRET']
       
       # Verify the webhook signature
       if not verify_signature(event, webhook_secret):
           return {
               'statusCode': 401,
               'body': json.dumps({'error': 'Invalid signature'})
           }
       
       try:
           # Parse the webhook payload
           payload = json.loads(event['body'])
           
           # Handle different event types
           event_type = payload.get('type')
           
           if event_type == 'payment.success':
               # Handle successful payment
               order_id = payload.get('orderId')
               print(f"Processing successful payment for order {order_id}")
               
               # Add your business logic here
               # For example, update database, send notifications, etc.
               
           elif event_type == 'payment.failed':
               # Handle failed payment
               order_id = payload.get('orderId')
               print(f"Processing failed payment for order {order_id}")
               
               # Add your business logic here
               
           else:
               print(f"Received unhandled event type: {event_type}")
           
           # Return success response
           return {
               'statusCode': 200,
               'body': json.dumps({'received': True})
           }
           
       except json.JSONDecodeError:
           return {
               'statusCode': 400,
               'body': json.dumps({'error': 'Invalid JSON payload'})
           }
       except Exception as e:
           print(f"Error processing webhook: {e}")
           return {
               'statusCode': 500,
               'body': json.dumps({'error': 'Internal server error'})
           }
   
   def verify_signature(event, webhook_secret):
       """
       Verify the webhook signature using HMAC
       """
       try:
           # Get the signature from headers
           signature = event['headers'].get('x-webhook-signature')
   
           if not signature:
               print("Error: Missing webhook signature in headers")
               return False
           
           # Get the raw body (return an empty string if the body key doesn't exist)
           body = event.get('body', '')
           
           # Create HMAC using the secret key
           expected_signature = hmac.new(
               webhook_secret.encode('utf-8'),
               body.encode('utf-8'),
               hashlib.sha256
           ).hexdigest()
           
           # Compare the expected signature with the received signature to authenticate the message
           is_valid = hmac.compare_digest(signature, expected_signature)
           if not is_valid:
               print(f"Error: Invalid signature. Received: {signature}, Expected: {expected_signature}")
               return False
               
           return True
       except Exception as e:
           print(f"Error verifying signature: {e}")
           return False
   ```

1. Dans la section **DÉPLOYER**, choisissez **Déployer** pour mettre à jour le code de votre fonction.

------
#### [ Node.js ]

**Créer la fonction Lambda**

1. Ouvrez la [page Functions](https://console.aws.amazon.com/lambda/home#/functions) (Fonctions) de la console Lambda.

1. Créez une fonction de type « Hello World » de base en procédant comme suit :

   1. Choisissez **Créer une fonction**.

   1. Sélectionnez **Créer à partir de zéro**.

   1. Sous **Nom de la fonction**, saisissez **myLambdaWebhook**.

   1. Pour **Runtime**, sélectionnez **nodejs24.x**.

   1. Choisissez **Créer une fonction**.

1. Dans le volet **Source du code**, remplacez le code existant en copiant et en collant ce qui suit :

   ```
   import crypto from 'crypto';
   
   export const handler = async (event, context) => {
       // Get the webhook secret from environment variables
       const webhookSecret = process.env.WEBHOOK_SECRET;
   
       // Verify the webhook signature
       if (!verifySignature(event, webhookSecret)) {
           return {
               statusCode: 401,
               body: JSON.stringify({ error: 'Invalid signature' })
           };
       }
   
       try {
           // Parse the webhook payload
           const payload = JSON.parse(event.body);
   
           // Handle different event types
           const eventType = payload.type;
   
           switch (eventType) {
               case 'payment.success': {
                   // Handle successful payment
                   const orderId = payload.orderId;
                   console.log(`Processing successful payment for order ${orderId}`);
   
                   // Add your business logic here
                   // For example, update database, send notifications, etc.
                   break;
               }
   
               case 'payment.failed': {
                   // Handle failed payment
                   const orderId = payload.orderId;
                   console.log(`Processing failed payment for order ${orderId}`);
   
                   // Add your business logic here
                   break;
               }
   
               default:
                   console.log(`Received unhandled event type: ${eventType}`);
           }
   
           // Return success response
           return {
               statusCode: 200,
               body: JSON.stringify({ received: true })
           };
   
       } catch (error) {
           if (error instanceof SyntaxError) {
               // Handle JSON parsing errors
               return {
                   statusCode: 400,
                   body: JSON.stringify({ error: 'Invalid JSON payload' })
               };
           }
   
           // Handle all other errors
           console.error('Error processing webhook:', error);
           return {
               statusCode: 500,
               body: JSON.stringify({ error: 'Internal server error' })
           };
       }
   };
   
   // Verify the webhook signature using HMAC
   
   const verifySignature = (event, webhookSecret) => {
       try {
           // Get the signature from headers
           const signature = event.headers['x-webhook-signature'];
     
           if (!signature) {
               console.log('No signature found in headers:', event.headers);
               return false;
           }
     
           // Get the raw body (return an empty string if the body key doesn't exist)
           const body = event.body || '';
     
           // Create HMAC using the secret key
           const hmac = crypto.createHmac('sha256', webhookSecret);
           const expectedSignature = hmac.update(body).digest('hex');
     
           // Compare expected and received signatures
           const isValid = signature === expectedSignature;
           if (!isValid) {
               console.log(`Invalid signature. Received: ${signature}, Expected: ${expectedSignature}`);
               return false;
           }
           
           return true;
       } catch (error) {
           console.error('Error during signature verification:', error);
           return false;
       }
     };
   ```

1. Dans la section **DÉPLOYER**, choisissez **Déployer** pour mettre à jour le code de votre fonction.

------

## Créer la clé de secret
<a name="urls-webhook-tutorial-key"></a>

Pour que la fonction Lambda authentifie la demande de webhook, elle utilise une clé secrète qu’elle partage avec l’application appelante. Dans cet exemple, la clé est stockée dans une variable d’environnement. Dans une application de production, n’incluez pas d’informations sensibles telles que des mots de passe dans votre code de fonction. [Créez plutôt un AWS Secrets Manager secret](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html), puis [utilisez l'extension Lambda AWS Parameters and Secrets](with-secrets-manager.md) pour récupérer vos informations d'identification dans votre fonction Lambda.

**Créer et stocker la clé secrète du webhook**

1. Générez une longue chaîne aléatoire à l’aide d’un générateur de nombres aléatoires sécurisé par cryptographie. Vous pouvez utiliser les extraits de code suivants en Python ou Node.js pour générer et imprimer un secret de 32 caractères, ou utiliser votre propre méthode préférée.

------
#### [ Python ]

**Example code pour générer un secret**  

   ```
   import secrets
   webhook_secret = secrets.token_urlsafe(32)
   print(webhook_secret)
   ```

------
#### [ Node.js ]

**Example code pour générer un secret (format du module ES)**  

   ```
   import crypto from 'crypto';
   let webhookSecret = crypto.randomBytes(32).toString('base64');
   console.log(webhookSecret)
   ```

------

1. Stockez la chaîne générée en tant que variable d’environnement pour votre fonction en procédant comme suit :

   1. Dans l’onglet **Configuration** de votre fonction, sélectionnez **Variables d’environnement**.

   1. Choisissez **Modifier**.

   1. Choisissez **Ajouter une variable d’environnement**.

   1. Pour **Clé**, saisissez **WEBHOOK\$1SECRET**, puis pour **Valeur**, saisissez le secret que vous avez généré à l’étape précédente.

   1. Choisissez **Enregistrer**.

Vous devrez réutiliser ce secret ultérieurement dans le didacticiel pour tester votre fonction. Veillez donc à le noter dès maintenant.

## Créer le point de terminaison d’URL de fonction
<a name="urls-webhook-tutorial-furl"></a>

Créez un point de terminaison pour votre webhook à l’aide d’une URL de fonction Lambda. Comme vous utilisez le type d’authentification `NONE` pour créer un point de terminaison avec accès public, toute personne disposant de l’URL peut invoquer votre fonction. Pour en savoir plus sur le contrôle de l'accès aux fonctions URLs, voir[Contrôler l'accès à la fonction Lambda URLs](urls-auth.md). Si vous avez besoin d’options d’authentification plus avancées pour votre webhook, pensez à utiliser API Gateway.

**Créer le point de terminaison d’URL de fonction**

1. Dans l’onglet **Configuration** de votre fonction, sélectionnez **URL de la fonction**.

1. Choisissez **Create function URL** (Créer une URL de fonction).

1. Pour **Type d’authentification**, sélectionnez **NONE**.

1. Choisissez **Enregistrer**.

Le point de terminaison de l’URL de fonction que vous venez de créer s’affiche dans le volet **URL de fonction**. Copiez le point de terminaison ; vous l’utiliserez ultérieurement dans le didacticiel.

## Tester la fonction dans console
<a name="urls-webhook-tutorial-test-console"></a>

Avant d’utiliser une requête HTTP pour invoquer votre fonction à l’aide du point de terminaison d’URL, testez-la dans la console pour vérifier que votre code fonctionne comme prévu.

Pour vérifier la fonction dans la console, vous devez d’abord calculer une signature de webhook à l’aide du secret que vous avez généré plus tôt dans le didacticiel avec les données utiles JSON de test suivantes :

```
{
    "type": "payment.success", 
    "orderId": "1234",
    "amount": "99.99"
}
```

Utilisez l’un des exemples de code Python ou Node.js suivants pour calculer la signature du webhook à l’aide de votre propre secret.

------
#### [ Python ]

**Calculer la signature du webhook**

1. Enregistrez le code suivant dans un fichier nommé `calculate_signature.py`. Remplacez le secret de webhook dans le code par votre propre valeur.

   ```
   import secrets
   import hmac
   import json
   import hashlib
   
   webhook_secret = "arlbSDCP86n_1H90s0fL_Qb2NAHBIBQOyGI0X4Zay4M"
   
   body = json.dumps({"type": "payment.success", "orderId": "1234", "amount": "99.99"})
   
   signature = hmac.new(
               webhook_secret.encode('utf-8'),
               body.encode('utf-8'),
               hashlib.sha256
           ).hexdigest()
   
   print(signature)
   ```

1. Calculez la signature en exécutant la commande suivante à partir du répertoire où vous avez enregistré le code. Copiez la signature émise par le code.

   ```
   python calculate_signature.py
   ```

------
#### [ Node.js ]

**Calculer la signature du webhook**

1. Enregistrez le code suivant dans un fichier nommé `calculate_signature.mjs`. Remplacez le secret de webhook dans le code par votre propre valeur.

   ```
   import crypto from 'crypto';
   
   const webhookSecret = "arlbSDCP86n_1H90s0fL_Qb2NAHBIBQOyGI0X4Zay4M"
   const body = "{\"type\": \"payment.success\", \"orderId\": \"1234\", \"amount\": \"99.99\"}";
   
   let hmac = crypto.createHmac('sha256', webhookSecret);
   let signature = hmac.update(body).digest('hex');
   
   console.log(signature);
   ```

1. Calculez la signature en exécutant la commande suivante à partir du répertoire où vous avez enregistré le code. Copiez la signature émise par le code.

   ```
   node calculate_signature.mjs
   ```

------

Vous pouvez désormais tester le code de votre fonction à l’aide d’une requête HTTP de test dans la console.

**Tester la fonction dans console**

1. Sélectionnez l’onglet **Code** correspondant à votre fonction.

1. Dans la section **ÉVÉNEMENTS DE TEST**, choisissez **Créer un nouvel événement de test**.

1. Dans **Event Name (Nom de l'événement)**, saisissez **myEvent**.

1. Remplacez le JSON existant en copiant et en collant ce qui suit dans le volet **JSON d’événement**. Remplacez la signature de webhook par la valeur calculée à l’étape précédente.

   ```
   {
     "headers": {
       "Content-Type": "application/json",
       "x-webhook-signature": "2d672e7a0423fab740fbc040e801d1241f2df32d2ffd8989617a599486553e2a"
     },
     "body": "{\"type\": \"payment.success\", \"orderId\": \"1234\", \"amount\": \"99.99\"}"
   }
   ```

1. Choisissez **Enregistrer**.

1. Sélectionnez **Invoquer **.

   Vous devez voir des résultats similaires à ce qui suit :

------
#### [ Python ]

   ```
   Status: Succeeded
   Test Event Name: myEvent
   
   Response:
   {
     "statusCode": 200,
     "body": "{\"received\": true}"
   }
   
   Function Logs:
   START RequestId: 50cc0788-d70e-453a-9a22-ceaa210e8ac6 Version: $LATEST
   Processing successful payment for order 1234
   END RequestId: 50cc0788-d70e-453a-9a22-ceaa210e8ac6
   REPORT RequestId: 50cc0788-d70e-453a-9a22-ceaa210e8ac6	Duration: 1.55 ms	Billed Duration: 2 ms	Memory Size: 128 MB	Max Memory Used: 36 MB	Init Duration: 136.32 ms
   ```

------
#### [ Node.js ]

   ```
   Status: Succeeded
   Test Event Name: myEvent
   
   Response:
   {
     "statusCode": 200,
     "body": "{\"received\":true}"
   }
   
   Function Logs:
   START RequestId: e54fe6c7-1df9-4f05-a4c4-0f71cacd64f4 Version: $LATEST
   2025-01-10T18:05:42.062Z	e54fe6c7-1df9-4f05-a4c4-0f71cacd64f4	INFO	Processing successful payment for order 1234
   END RequestId: e54fe6c7-1df9-4f05-a4c4-0f71cacd64f4
   REPORT RequestId: e54fe6c7-1df9-4f05-a4c4-0f71cacd64f4	Duration: 60.10 ms	Billed Duration: 61 ms	Memory Size: 128 MB	Max Memory Used: 72 MB	Init Duration: 174.46 ms
   
   Request ID: e54fe6c7-1df9-4f05-a4c4-0f71cacd64f4
   ```

------

## Tester la fonction avec une requête HTTP
<a name="urls-webhook-tutorial-test-curl"></a>

Utilisez l’outil de ligne de commande curl pour tester votre point de terminaison webhook.

**Tester la fonction avec des requêtes HTTP**

1. Dans un terminal ou un programme shell, exécutez la commande curl suivante. Remplacez l’URL par la valeur du point de terminaison de votre URL de fonction et remplacez la signature du webhook par la signature que vous avez calculée à l’aide de votre propre clé secrète.

   ```
   curl -X POST https://ryqgmbx5xjzxahif6frvzikpre0bpvpf.lambda-url.us-west-2.on.aws/ \
   -H "Content-Type: application/json" \
   -H "x-webhook-signature: d5f52b76ffba65ff60ea73da67bdf1fc5825d4db56b5d3ffa0b64b7cb85ef48b" \
   -d '{"type": "payment.success", "orderId": "1234", "amount": "99.99"}'
   ```

   Vous devriez voir la sortie suivante :

   ```
   {"received": true}
   ```

1. Examinez les CloudWatch journaux de votre fonction pour confirmer qu'elle a correctement analysé la charge utile en procédant comme suit :

   1. Ouvrez la page du [groupe Logs](https://console.aws.amazon.com/cloudwatch/home#logsV2:log-groups) dans la CloudWatch console Amazon.

   1. Sélectionnez le groupe de journaux de votre fonction (`/aws/lambda/myLambdaWebhook`).

   1. Sélectionnez le flux de journaux le plus récent.

      Vous devez voir des résultats similaires à ce qui suit dans les journaux de votre fonction :

------
#### [ Python ]

      ```
      Processing successful payment for order 1234
      ```

------
#### [ Node.js ]

      ```
      2025-01-10T18:05:42.062Z e54fe6c7-1df9-4f05-a4c4-0f71cacd64f4 INFO Processing successful payment for order 1234
      ```

------

1. Confirmez que votre code détecte une signature non valide en exécutant la commande curl suivante. Remplacez l’URL par le point de terminaison de l’URL de votre propre fonction.

   ```
   curl -X POST https://ryqgmbx5xjzxahif6frvzikpre0bpvpf.lambda-url.us-west-2.on.aws/ \
   -H "Content-Type: application/json" \
   -H "x-webhook-signature: abcdefg" \
   -d '{"type": "payment.success", "orderId": "1234", "amount": "99.99"}'
   ```

   Vous devriez voir la sortie suivante :

   ```
   {"error": "Invalid signature"}
   ```

## Nettoyage de vos ressources
<a name="urls-webhook-tutorial-cleanup"></a>

Vous pouvez maintenant supprimer les ressources que vous avez créées pour ce didacticiel, sauf si vous souhaitez les conserver. En supprimant AWS les ressources que vous n'utilisez plus, vous évitez des frais inutiles pour votre Compte AWS.

**Pour supprimer la fonction Lambda**

1. Ouvrez la [page Functions (Fonctions)](https://console.aws.amazon.com/lambda/home#/functions) de la console Lambda.

1. Sélectionnez la fonction que vous avez créée.

1. Sélectionnez **Actions**, **Supprimer**.

1. Saisissez **confirm** dans la zone de saisie de texte et choisissez **Delete** (Supprimer).

Lorsque vous avez créé la fonction Lambda dans la console, Lambda a également créé un [rôle d’exécution](lambda-intro-execution-role.md) pour votre fonction.

**Pour supprimer le rôle d’exécution**

1. Ouvrez la [page Roles (Rôles)](https://console.aws.amazon.com/iam/home#/roles) de la console IAM.

1. Sélectionnez le rôle d’exécution que Lambda a créé. Le nom du rôle est au format `myLambdaWebhook-role-<random string>`.

1. Sélectionnez **Delete (Supprimer)**.

1. Saisissez le nom du rôle dans le champ de saisie de texte et choisissez **Delete** (Supprimer).