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.
Dans ce tutoriel, vous allez créer et configurer une fonction Lambda qui redimensionne les images ajoutées à un compartiment Amazon Simple Storage Service (Amazon S3). Lorsque vous ajoutez un fichier image à votre compartiment, Amazon S3 invoque votre fonction Lambda. La fonction crée ensuite une version miniature de l’image et l’envoie vers un autre compartiment Amazon S3.

Pour compléter ce didacticiel, effectuez les tâches suivantes :
-
Créez des compartiments Amazon S3 source et de destination et chargez un exemple d’image.
-
Créez une fonction Lambda qui redimensionne une image et envoie une miniature vers un compartiment Amazon S3.
-
Configurez un déclencheur Lambda qui invoque votre fonction lorsque des objets sont chargés dans votre compartiment source.
-
Testez votre fonction, d’abord avec un événement fictif, puis en chargeant une image dans votre compartiment source.
En suivant ces étapes, vous apprendrez à utiliser Lambda pour effectuer une tâche de traitement de fichiers sur des objets ajoutés à un compartiment Amazon S3. Vous pouvez suivre ce didacticiel en utilisant le AWS Command Line Interface (AWS CLI) ou le AWS Management Console.
Si vous recherchez un exemple plus simple pour apprendre à configurer un déclencheur Amazon S3 pour Lambda, vous pouvez consulter le Didacticiel : utilisation d’un déclencheur Amazon S3 pour invoquer une fonction Lambda.
Prérequis
Si vous souhaitez utiliser le AWS CLI pour terminer le didacticiel, installez la dernière version du AWS Command Line Interface.
Pour le code de votre fonction Lambda, vous pouvez utiliser Python ou Node.js. Installez les outils de prise en charge linguistique et un gestionnaire de packages pour le langage que vous souhaitez utiliser.
Si vous ne l'avez pas encore installé AWS Command Line Interface, suivez les étapes décrites dans la section Installation ou mise à jour de la dernière version du AWS CLI pour l'installer.
Ce tutoriel nécessite un terminal de ligne de commande ou un shell pour exécuter les commandes. Sous Linux et macOS, utilisez votre gestionnaire de shell et de package préféré.
Note
Sous Windows, certaines commandes CLI Bash que vous utilisez couramment avec Lambda (par exemple zip
) ne sont pas prises en charge par les terminaux intégrés du système d’exploitation. Installez le sous-système Windows pour Linux
Création de deux compartiments Amazon S3

Créez d’abord deux compartiments Amazon S3. Le premier compartiment est le compartiment source dans lequel vous allez charger vos images. Le second compartiment est utilisé par Lambda pour enregistrer la miniature redimensionnée lorsque vous invoquez votre fonction.
Pour créer les compartiments Amazon S3 (console)
-
Ouvrez la console Amazon S3
et sélectionnez la page Buckets à usage général. -
Sélectionnez le Région AWS plus proche de votre situation géographique. Vous pouvez modifier votre région à l’aide de la liste déroulante en haut de l’écran. Plus loin dans le didacticiel, vous devez créer votre fonction Lambda dans la même région.
-
Choisissez Create bucket (Créer un compartiment).
-
Sous Configuration générale, procédez comme suit :
-
Pour le type de godet, assurez-vous que l'option Usage général est sélectionnée.
-
Pour le nom du compartiment, saisissez un nom unique au monde qui respecte les règles de dénomination du compartiment Amazon S3. Les noms de compartiment peuvent contenir uniquement des lettres minuscules, des chiffres, de points (.) et des traits d’union (-).
-
-
Conservez les valeurs par défaut de toutes les autres options et choisissez Créer un compartiment.
-
Répétez les étapes 1 à 5 pour créer votre compartiment de destination. Pour Nom du compartiment, saisissez
, oùamzn-s3-demo-source-bucket-resized
est le nom du compartiment source que vous venez de créer.amzn-s3-demo-source-bucket
Charger une image de test dans votre compartiment source

Plus loin dans le didacticiel, vous testerez votre fonction Lambda en l'invoquant à l'aide de la console Lambda ou de AWS CLI la console Lambda. Pour confirmer que votre fonction fonctionne correctement, votre compartiment source doit contenir une image de test. Cette image peut être n’importe quel fichier JPG ou PNG de votre choix.
Pour charger une image de test dans votre compartiment source (console)
-
Ouvrez la page Compartiments
de la console Amazon S3. -
Sélectionnez le compartiment source que vous avez créé à l’étape précédente.
-
Choisissez Charger.
-
Choisissez Ajouter des fichiers et utilisez le sélecteur de fichiers pour sélectionner l’objet que vous souhaitez charger.
-
Choisissez Ouvrir, puis Charger.
Création d’une stratégie d’autorisations

La première étape de la création de votre fonction Lambda consiste à créer une politique d’autorisations. Cette politique donne à votre fonction les autorisations dont elle a besoin pour accéder à d'autres AWS ressources. Pour ce didacticiel, la politique donne à Lambda des autorisations de lecture et d'écriture pour les compartiments Amazon S3 et lui permet d'écrire dans Amazon Logs. CloudWatch
Pour créer une politique (console)
-
Ouvrez la page Politiques
de la console AWS Identity and Access Management (IAM). -
Choisissez Create Policy (Créer une politique).
-
Choisissez l’onglet JSON, puis collez la stratégie personnalisée suivante dans l’éditeur JSON.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:PutLogEvents", "logs:CreateLogGroup", "logs:CreateLogStream" ], "Resource": "arn:aws:logs:*:*:*" }, { "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": "arn:aws:s3:::*/*" }, { "Effect": "Allow", "Action": [ "s3:PutObject" ], "Resource": "arn:aws:s3:::*/*" } ] }
-
Choisissez Suivant.
-
Sous Détails de la politique, pour le Nom de la politique, saisissez
.LambdaS3Policy
-
Choisissez Create Policy (Créer une politique).
Créer un rôle d’exécution

Un rôle d'exécution est un rôle IAM qui accorde à une fonction Lambda l'autorisation d' Services AWS accès et de ressources. Pour donner à votre fonction un accès en lecture et en écriture à un compartiment Amazon S3, vous attachez la politique d’autorisation que vous avez créée à l’étape précédente.
Pour créer un rôle d’exécution et attacher votre politique d’autorisations (console)
-
Accédez à la Page Rôles
de la console (IAM). -
Sélectionnez Créer un rôle.
-
Pour Type d’entité fiable, sélectionnez Service AWS, et pour Cas d’utilisation, sélectionnez Lambda.
-
Choisissez Suivant.
-
Ajoutez la politique d’autorisations que vous avez créée à l’étape précédente en procédant comme suit :
-
Dans la zone de recherche de stratégie, entrez
.LambdaS3Policy
-
Dans les résultats de la recherche, cochez la case pour
LambdaS3Policy
. -
Choisissez Suivant.
-
-
Sous Détails du rôle, pour le Nom du rôle entrez
.LambdaS3Role
-
Sélectionnez Créer un rôle.
Créer le package de déploiement de la fonction

Pour créer votre fonction, vous créez un package de déploiement contenant le code de votre fonction et ses dépendances. Pour cette fonction CreateThumbnail
, votre code de fonction utilise une bibliothèque distincte pour le redimensionnement de l’image. Suivez les instructions correspondant à la langue de votre choix pour créer un package de déploiement contenant la bibliothèque requise.
Pour créer le package de déploiement (Node.js)
-
Créez un répertoire nommé
lambda-s3
pour votre code de fonction et vos dépendances et accédez-y.mkdir lambda-s3 cd lambda-s3
-
Créez un nouveau projet Node.js avec
npm
. Appuyez surEnter
pour accepter les options par défaut fournies dans l’expérience interactive.npm init
-
Enregistrez le code de fonction suivant dans un fichier nommé
index.mjs
. Assurez-vous de remplacerus-east-1
par l’ Région AWS dans lequel vous avez créé vos propres compartiments source et de destination.// dependencies import { S3Client, GetObjectCommand, PutObjectCommand } from '@aws-sdk/client-s3'; import { Readable } from 'stream'; import sharp from 'sharp'; import util from 'util'; // create S3 client const s3 = new S3Client({region:
'us-east-1'
}); // define the handler function export const handler = async (event, context) => { // Read options from the event parameter and get the source bucket console.log("Reading options from event:\n", util.inspect(event, {depth: 5})); const srcBucket = event.Records[0].s3.bucket.name; // Object key may have spaces or unicode non-ASCII characters const srcKey = decodeURIComponent(event.Records[0].s3.object.key.replace(/\+/g, " ")); const dstBucket = srcBucket + "-resized"; const dstKey = "resized-" + srcKey; // Infer the image type from the file suffix const typeMatch = srcKey.match(/\.([^.]*)$/); if (!typeMatch) { console.log("Could not determine the image type."); return; } // Check that the image type is supported const imageType = typeMatch[1].toLowerCase(); if (imageType != "jpg" && imageType != "png") { console.log(`Unsupported image type: ${imageType}`); return; } // Get the image from the source bucket. GetObjectCommand returns a stream. try { const params = { Bucket: srcBucket, Key: srcKey }; var response = await s3.send(new GetObjectCommand(params)); var stream = response.Body; // Convert stream to buffer to pass to sharp resize function. if (stream instanceof Readable) { var content_buffer = Buffer.concat(await stream.toArray()); } else { throw new Error('Unknown object stream type'); } } catch (error) { console.log(error); return; } // set thumbnail width. Resize will set the height automatically to maintain aspect ratio. const width = 200; // Use the sharp module to resize the image and save in a buffer. try { var output_buffer = await sharp(content_buffer).resize(width).toBuffer(); } catch (error) { console.log(error); return; } // Upload the thumbnail image to the destination bucket try { const destparams = { Bucket: dstBucket, Key: dstKey, Body: output_buffer, ContentType: "image" }; const putResult = await s3.send(new PutObjectCommand(destparams)); } catch (error) { console.log(error); return; } console.log('Successfully resized ' + srcBucket + '/' + srcKey + ' and uploaded to ' + dstBucket + '/' + dstKey); }; -
Dans votre répertoire
lambda-s3
, installez la bibliothèque sharp en utilisant npm. Notez que la dernière version de sharp (0.33) n’est pas compatible avec Lambda. Installez la version 0.32.6 pour terminer ce didacticiel.npm install sharp@0.32.6
La commande npm
install
crée un répertoirenode_modules
pour vos modules. Après cette étape, votre structure de répertoire doit se présenter comme suit.lambda-s3 |- index.mjs |- node_modules | |- base64js | |- bl | |- buffer ... |- package-lock.json |- package.json
-
Créez un package de déploiement .zip contenant le code de votre fonction et ses dépendances. Sous macOS ou Linux, exécutez les commandes suivantes.
zip -r function.zip .
Sous Windows, utilisez l’utilitaire zip de votre choix pour créer un fichier .zip. Assurez-vous que vos fichiers
index.mjs
,package.json
, etpackage-lock.json
ainsi que votre répertoirenode_modules
se trouvent tous à la racine de votre fichier .zip.
Créer la fonction Lambda

Vous pouvez créer votre fonction Lambda à l'aide de la console Lambda AWS CLI ou de la console Lambda. Suivez les instructions correspondant à la langue de votre choix pour créer la fonction.
Pour créer une fonction (console)
Pour créer votre fonction Lambda à l’aide de la console, vous devez d’abord créer une fonction de base contenant du code « Hello world ». Vous remplacez ensuite ce code par votre propre code de fonction en chargeant le fichier .zip ou JAR que vous avez créé à l’étape précédente.
-
Ouvrez la page Functions
(Fonctions) de la console Lambda. -
Assurez-vous de travailler dans le même environnement que celui dans Région AWS lequel vous avez créé votre compartiment Amazon S3. Vous pouvez modifier votre région à l’aide de la liste déroulante en haut de l’écran.
-
Sélectionnez Create function (Créer une fonction).
-
Choisissez Créer à partir de zéro.
-
Sous Informations de base, procédez comme suit :
-
Sous Nom de la fonction, saisissez
.CreateThumbnail
-
Pour Environnement d’exécution, choisissez Node.js 22.x ou Python 3.12 en fonction du langage que vous avez choisi pour votre fonction.
-
Pour Architecture, choisissez x86_64.
-
-
Dans l’onglet Modifier le rôle d’exécution par défaut, procédez comme suit :
-
Ouvrez l’onglet, puis choisissez Utiliser un rôle existant.
-
Sélectionnez le
LambdaS3Role
que vous avez créé précédemment.
-
-
Sélectionnez Create function (Créer une fonction).
Pour charger le code de fonction (console)
-
Dans le volet Source du code, choisissez Charger à partir de.
-
Choisissez Fichier .zip.
-
Choisissez Charger.
-
Dans le sélecteur de fichiers, sélectionnez votre fichier .zip et choisissez Ouvrir.
-
Choisissez Save (Enregistrer).
Configurer Amazon S3 pour invoquer la fonction

Pour que votre fonction Lambda s’exécute lorsque vous chargez une image dans votre compartiment source, vous devez configurer un déclencheur pour votre fonction. Vous pouvez configurer le déclencheur Amazon S3 à l’aide de la console ou de la AWS CLI.
Important
Cette procédure configure le compartiment Amazon S3 pour qu’il invoque votre fonction chaque fois qu’un objet est créé dans le compartiment. Veillez à configurer cela uniquement pour le compartiment source. Si votre fonction Lambda crée des objets dans le même compartiment que celui qui l’invoque, votre fonction peut être invoquée en continu dans une boucle
Pour configurer le déclencheur Amazon S3 (console)
-
Ouvrez la page Fonctions
de la console Lambda et choisissez votre fonction ( CreateThumbnail
). -
Choisissez Add trigger (Ajouter déclencheur).
-
Sélectionnez S3.
-
Sous Compartiment, sélectionnez votre compartiment source.
-
Sous Types d’événements, sélectionnez Tous les événements de création d’objets.
-
Sous Invocation récursive, cochez la case pour confirmer qu’il n’est pas recommandé d’utiliser le même compartiment Amazon S3 pour les entrées et les sorties. Vous pouvez en savoir plus sur les modèles d’invocation récursive dans Lambda en lisant la rubrique Modèles récursifs qui provoquent des fonctions Lambda incontrôlables dans Serverless Land
. -
Choisissez Ajouter.
Lorsque vous créez un déclencheur à l’aide de la console Lambda, ce dernier crée automatiquement une politique basée sur une ressource pour donner au service que vous sélectionnez l’autorisation d’invoquer votre fonction.
Test de votre fonction Lambda à l’aide d’un événement fictif

Avant de tester l’ensemble de votre configuration en ajoutant un fichier image à votre compartiment source Amazon S3, vous devez vérifier que votre fonction Lambda fonctionne correctement en l’invoquant avec un événement fictif. Un événement dans Lambda est un document au format JSON qui contient des données à traiter par votre fonction. Lorsque votre fonction est invoquée par Amazon S3, l’événement envoyé à votre fonction contient des informations telles que le nom du compartiment, l’ARN du compartiment et la clé de l’objet.
Pour tester votre fonction Lambda à l’aide d’un événement fictif (console)
-
Ouvrez la page Fonctions
de la console Lambda et choisissez votre fonction ( CreateThumbnail
). -
Choisissez l’onglet Test.
-
Pour créer votre événement de test, dans le volet Événement de test, procédez comme suit :
-
Sous Action d’événement de test, sélectionnez Créer un nouvel événement.
-
Dans Event name (Nom de l’événement), saisissez
myTestEvent
. -
Pour Modèle, sélectionnez S3 Put.
-
Remplacez les valeurs des paramètres suivants par vos propres valeurs.
-
Pour
awsRegion
, remplacez-leus-east-1
par celui dans Région AWS lequel vous avez créé vos compartiments Amazon S3. -
Pour
name
, remplacezamzn-s3-demo-bucket
par le nom de votre propre compartiment source Amazon S3. -
Pour
key
, remplaceztest%2Fkey
par le nom de fichier de l’objet de test que vous avez chargé dans votre compartiment source à l’étape Charger une image de test dans votre compartiment source.
{ "Records": [ { "eventVersion": "2.0", "eventSource": "aws:s3", "awsRegion":
"us-east-1"
, "eventTime": "1970-01-01T00:00:00.000Z", "eventName": "ObjectCreated:Put", "userIdentity": { "principalId": "EXAMPLE" }, "requestParameters": { "sourceIPAddress": "127.0.0.1" }, "responseElements": { "x-amz-request-id": "EXAMPLE123456789", "x-amz-id-2": "EXAMPLE123/5678abcdefghijklambdaisawesome/mnopqrstuvwxyzABCDEFGH" }, "s3": { "s3SchemaVersion": "1.0", "configurationId": "testConfigRule", "bucket": { "name":"amzn-s3-demo-bucket"
, "ownerIdentity": { "principalId": "EXAMPLE" }, "arn": "arn:aws:s3:::amzn-s3-demo-bucket" }, "object": { "key":"test%2Fkey"
, "size": 1024, "eTag": "0123456789abcdef0123456789abcdef", "sequencer": "0A1B2C3D4E5F678901" } } } ] } -
-
Choisissez Save (Enregistrer).
-
-
Dans le volet Événement de test, choisissez Test.
-
Pour vérifier que votre fonction a créé une version redimensionnée de votre image et l’a stockée dans votre compartiment Amazon S3 cible, procédez comme suit :
-
Ouvrez la page Compartiments
de la console Amazon S3. -
Choisissez votre compartiment cible et vérifiez que votre fichier redimensionné est répertorié dans le volet Objets.
-
Tester votre fonction à l’aide du déclencheur Amazon S3

Maintenant que vous avez confirmé que votre fonction Lambda fonctionne correctement, vous êtes prêt à tester votre configuration complète en ajoutant un fichier image à votre compartiment source Amazon S3. Lorsque vous ajoutez votre image au compartiment source, votre fonction Lambda doit être automatiquement invoquée. Votre fonction crée une version redimensionnée du fichier et la stocke dans votre compartiment cible.
Pour tester votre fonction Lambda à l’aide du déclencheur Amazon S3 (console)
-
Pour charger une image dans votre compartiment Amazon S3, procédez comme suit :
-
Ouvrez la page Compartiments
de la console Amazon S3 et choisissez votre compartiment source. -
Choisissez Charger.
-
Choisissez Ajouter des fichiers et utilisez le sélecteur de fichiers pour sélectionner le fichier image que vous souhaitez charger. Votre objet image peut être n’importe quel fichier .jpg ou .png.
-
Choisissez Ouvrir, puis Charger.
-
-
Vérifiez que Lambda a enregistré une version redimensionnée de votre fichier image dans votre compartiment cible en procédant comme suit :
-
Retournez à la page Compartiments
de la console Amazon S3 et choisissez votre compartiment de destination. -
Dans le volet Objets, vous devriez maintenant voir deux fichiers image redimensionnés, un pour chaque test de votre fonction Lambda. Pour télécharger votre image redimensionnée, sélectionnez le fichier, puis choisissez Télécharger.
-
Nettoyage de vos ressources
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
-
Ouvrez la page Functions (Fonctions)
de la console Lambda. -
Sélectionnez la fonction que vous avez créée.
-
Sélectionnez Actions, Supprimer.
-
Saisissez
confirm
dans la zone de saisie de texte et choisissez Delete (Supprimer).
Suppression de la stratégie que vous avez créée
-
Ouvrez la page Policies (Stratégies)
de la console IAM. -
Sélectionnez la politique que vous avez créée (AWSLambdaS3Policy).
-
Choisissez Actions de stratégie, Supprimer.
-
Sélectionnez Delete (Supprimer).
Pour supprimer le rôle d’exécution
-
Ouvrez la page Roles (Rôles)
de la console IAM. -
Sélectionnez le rôle d’exécution que vous avez créé.
-
Sélectionnez Delete (Supprimer).
-
Saisissez le nom du rôle dans le champ de saisie de texte et choisissez Delete (Supprimer).
Pour supprimer le compartiment S3
-
Ouvrez la console Amazon S3
. -
Sélectionnez le compartiment que vous avez créé.
-
Sélectionnez Delete (Supprimer).
-
Saisissez le nom du compartiment dans le champ de saisie de texte.
-
Choisissez Supprimer le compartiment.