Pourquoi ma notification d'événement Amazon S3 ne déclenche-t-elle pas ma fonction Lambda ?

Date de la dernière mise à jour : 07/02/2020

J'ai configuré une notification d'événement Amazon Simple Storage Service (Amazon S3) pour déclencher ma fonction AWS Lambda. Pourquoi la fonction ne se déclenche-t-elle pas comme prévu lorsque l'événement se produit ?

Brève description

Vérifiez que toutes les options suivantes sont correctement configurées :

Résolution

Type d'événement Amazon S3

Lorsque vous configurez une notification d'événement Amazon S3, vous spécifiez quels types d'événements Amazon S3 pris en charge (tels que PUT, POST, COPY et CompleteMultipartUpload) entraînent l'envoi de la notification par Amazon S3. Si un type d'événement que vous n'avez pas spécifié se produit dans votre compartiment S3, Amazon S3 n'envoie pas de notification (et ne déclenche pas votre fonction Lambda).

Par exemple, si vous COPIEZ (COPY) un objet dans votre compartiment S3, mais que votre notification d'événement est configurée uniquement pour les événements « POST » (PUBLIER), l'événement « COPY » (COPIER) ne déclenche pas votre fonction.

Filtres de nom de clé d'objet

Vous pouvez configurer les notifications d'événements Amazon S3 pour utiliser le filtrage par nom de clé d'objet. Lorsqu'il est configuré, Amazon S3 publie des notifications (et déclenche votre fonction Lambda) uniquement pour les objets avec un certain préfixe ou suffixe de nom de clé.

Si vous utilisez l'un de ces caractères spéciaux dans la valeur du préfixe ou du suffixe, vous devez les entrer au format codé en URL (codé en pourcentage) :

  • Les caractères ASCII vont de 00 à 1F hexadécimal (valeurs de 0 à 31) et 7F (valeur 127)
  • Dollar (« $ »)
  • esperluette (« & »)
  • Signe plus (« + »)
  • virgule (« , »)
  • Deux points (« : »)
  • Point-virgule (« ; »)
  • Signe égal (« = »)
  • Point d'interrogation (« ? »)
  • Arobase (« @ »)
  • Espace (" ")

Par exemple, pour définir la valeur d'un préfixe comme « test = abc/ », entrez « test%3Dabc/ » pour sa valeur.

Remarque : un caractère générique (« * ») ne peut pas être utilisé dans les filtres comme préfixe ou suffixe pour représenter n'importe quel caractère.

Pour plus d'informations, y compris la liste des caractères à éviter, consultez Directives de dénomination de la clé d'objet.

Autorisations Lambda

La stratégie basée sur les ressources de votre fonction Lambda doit autoriser le compartiment Amazon S3 spécifique à appeler la fonction. Lorsque vous ajoutez une nouvelle notification d'événement à l'aide de la console Amazon S3, ces autorisations sont automatiquement ajoutées à cette stratégie.

Remarque : contrairement à l'utilisation de la console, l'ajout d'une nouvelle notification d'événement à l'aide de put-bucket-notification-configuration via l'interface de ligne de commande AWS (AWS CLI) ne met pas à jour la stratégie de la fonction Lambda.

Toutefois, les notifications d'événements Amazon S3 peuvent toujours ne pas appeler votre fonction comme prévu ultérieurement si vous avez supprimé les autorisations à un moment donné.

Vérifiez la stratégie pour confirmer qu'elle dispose des autorisations requises et ajoutez-les si nécessaire. Pour savoir comment ajouter les autorisations requises, consultez Pourquoi reçois-je l'erreur « Unable to validate the following destination configurations » (Impossible de valider les configurations de destination suivantes) lors de la création d'une notification d'événement Amazon S3 pour déclencher ma fonction Lambda ?

Simultanéité Lambda

Votre fonction Lambda doit être configurée pour gérer les exécutions simultanées des notifications d'événements Amazon S3 entrantes. Si l'entrée des demandes est plus rapide que la capacité de mise à l’échelle de votre fonction ou si votre fonction a atteint la simultanéité maximale, Lambda limite ces demandes et se désactive avant de réessayer automatiquement. Pour plus d'informations, consultez Appel asynchrone et Mise à l'échelle d'une fonction AWS Lambda.