View a markdown version of this page

Invoquer une fonction d'événement Lambda avec des événements par lots Amazon S3 - AWS Lambda

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.

Invoquer une fonction d'événement Lambda avec des événements par lots Amazon S3

Vous pouvez utiliser les opérations par lots Amazon S3 pour appeler une fonction d'événement Lambda sur un grand nombre d'objets Amazon S3. Amazon S3 effectue le suivi de la progression des opérations par lot, envoie des notifications et stocke un rapport d’achèvement indiquant le statut de chaque action.

Pour exécuter une opération par lot, vous créez une tâche d’opérations par lot Amazon S3. Lorsque vous créez le travail, vous fournissez un manifeste (la liste des objets) et configurez l’action à effectuer sur ces objets.

Lorsque le traitement par lots démarre, Amazon S3 invoque la fonction d'événement Lambda de manière synchrone pour chaque objet du manifeste. Le paramètre d’événement inclut les noms du compartiment et de l’objet.

L'exemple suivant montre l'événement qu'Amazon S3 envoie à la fonction d'événement Lambda pour un objet nommé customer Image1.jpg dans le compartiment amzn-s3-demo-bucket.

ExempleÉvénement de demande de lot Amazon S3
{ "invocationSchemaVersion": "1.0", "invocationId": "YXNkbGZqYWRmaiBhc2RmdW9hZHNmZGpmaGFzbGtkaGZza2RmaAo", "job": { "id": "f3cc4f60-61f6-4a2b-8a21-d07600c373ce" }, "tasks": [ { "taskId": "dGFza2lkZ29lc2hlcmUK", "s3Key": "customerImage1.jpg", "s3VersionId": "1", "s3BucketArn": "arn:aws:s3:::amzn-s3-demo-bucket" } ] }

Votre fonction d'événement Lambda doit renvoyer un objet JSON avec les champs indiqués dans l'exemple suivant. Vous pouvez copier invocationId et taskId à partir du paramètre d’événement. Vous pouvez renvoyer une chaîne dans resultString. Amazon S3 enregistre les valeurs resultString dans le rapport de fin de tâche.

Exemple Réponse à la demande de lot Amazon S3
{ "invocationSchemaVersion": "1.0", "treatMissingKeysAs" : "PermanentFailure", "invocationId" : "YXNkbGZqYWRmaiBhc2RmdW9hZHNmZGpmaGFzbGtkaGZza2RmaAo", "results": [ { "taskId": "dGFza2lkZ29lc2hlcmUK", "resultCode": "Succeeded", "resultString": "[\"Alice\", \"Bob\"]" } ] }

Invocation de fonctions d'événement Lambda à partir d'opérations par lots Amazon S3

Vous pouvez appeler la fonction d'événement Lambda avec un ARN de fonction qualifié ou non qualifié. Si vous souhaitez utiliser la même version de fonction pour l’ensemble du travail par lot, configurez une version de fonction spécifique dans le paramètre FunctionARN lorsque vous créez votre travail. Si vous configurez un alias ou le qualificateur $LATEST, le travail par lot commence immédiatement à appeler la nouvelle version de la fonction si l’alias ou $LATEST est mis à jour pendant l’exécution du travail.

Notez que vous ne pouvez pas réutiliser une fonction Amazon S3 basée sur un événement existante pour des opérations par lot. Cela est dû au fait que l'opération par lots Amazon S3 transmet un paramètre d'événement différent à la fonction d'événement Lambda et attend un message de retour avec une structure JSON spécifique.

Dans la politique basée sur les ressources que vous créez pour la tâche par lots Amazon S3, assurez-vous que vous avez défini l'autorisation pour que la tâche appelle votre fonction d'événement Lambda.

Dans le rôle d’exécution pour la fonction, définissez une stratégie d’approbation pour qu’Amazon S3 endosse ce rôle lors de l’exécution de votre fonction.

Si votre fonction utilise le AWS SDK pour gérer les ressources Amazon S3, vous devez ajouter des autorisations Amazon S3 dans le rôle d'exécution.

Lorsque le travail s’exécute, Amazon S3 démarre plusieurs instances de fonction pour traiter les objets Amazon S3 en parallèle, jusqu’à la limite de simultanéité de la fonction. Amazon S3 limite la montée en puissance initiale des instances afin d’éviter des surcoûts pour les tâches de plus petite taille.

Si la fonction d'événement Lambda renvoie un code de TemporaryFailure réponse, Amazon S3 tente à nouveau l'opération.

Pour plus d’informations les opérations par lot Amazon S3, consultez Exécution d’opérations par lot dans le Manuel du développeur Amazon S3.

Pour un exemple d'utilisation d'une fonction d'événement Lambda dans les opérations par lots Amazon S3, consultez Invoking a Lambda function from Amazon S3 batch operations dans le manuel Amazon S3 Developer Guide.