Utilisation de la fonction Lambda avec Amazon S3
Le service Amazon S3 est utilisé pour le stockage de fichiers, où vous pouvez télécharger ou supprimer des fichiers. Nous pouvons déclencher AWS Lambda sur S3 lorsqu'il y a des téléchargements de fichiers dans des compartiments S3. AWS Lambda possède une fonction de gestionnaire qui sert de point de départ pour la fonction AWS Lambda. Le gestionnaire a les détails des événements. Dans ce chapitre, voyons comment utiliser AWS S3 pour déclencher la fonction AWS Lambda lorsque nous chargeons des fichiers dans le compartiment S3.
Étapes d'utilisation de la fonction AWS Lambda avec Amazon S3
Pour commencer à utiliser AWS Lambda avec Amazon S3, nous avons besoin des éléments suivants:
- Créer un compartiment S3
- Créer un rôle qui a l'autorisation de travailler avec s3 et lambda
- Créez une fonction lambda et ajoutez s3 comme déclencheur.
Exemple
Voyons ces étapes à l'aide d'un exemple qui montre l'interaction de base entre Amazon S3 et AWS Lambda.
L'utilisateur téléchargera un fichier dans le compartiment Amazon S3
Une fois le fichier téléchargé, il déclenchera la fonction AWS Lambda en arrière-plan qui affichera une sortie sous la forme d'un message de console indiquant que le fichier est téléchargé.
L'utilisateur pourra voir le message dans les journaux Cloudwatch une fois le fichier téléchargé.
Le schéma fonctionnel qui explique le déroulement de l'exemple est montré ici -
Création d'un compartiment S3
Commençons par créer un bucket s3 dans la console AWS en suivant les étapes ci-dessous:
Étape 1
Accédez aux services Amazon et cliquez sur S3 dans la section de stockage comme mis en évidence dans l'image ci-dessous -
Étape 2
Cliquez sur Stockage S3 et Create bucket qui stockera les fichiers téléchargés.
Étape 3
Une fois que vous cliquez Create bucket bouton, vous pouvez voir un écran comme suit -
Étape 4
Entrez les détails Bucket name, Select the Region et cliquez Createbouton en bas à gauche. Ainsi, nous avons créé un bucket avec le nom:workingwithlambdaands3.
Étape 5
Maintenant, cliquez sur le nom du bucket et il vous demandera de télécharger des fichiers comme indiqué ci-dessous -
Ainsi, nous en avons terminé avec la création de seau dans S3.
Créer un rôle qui fonctionne avec S3 et Lambda
Pour créer un rôle qui fonctionne avec S3 et Lambda, veuillez suivre les étapes ci-dessous -
Étape 1
Accédez aux services AWS et sélectionnez IAM comme indiqué ci-dessous -
Étape 2
Maintenant, cliquez sur IAM -> Roles comme indiqué ci-dessous -
Étape 3
Maintenant, cliquez sur Create roleet choisissez les services qui utiliseront ce rôle. Sélectionnez Lambda et cliquez surPermission bouton.
Étape 4
Ajoutez l'autorisation ci-dessous et cliquez sur Review.
Étape 5
Notez que nous avons choisi les autorisations suivantes -
Observez que les politiques que nous avons sélectionnées sont AmazonS3FullAccess, AWSLambdaFullAccess et CloudWatchFullAccess.
Étape 6
Maintenant, entrez le nom du rôle, la description du rôle et cliquez sur Create Role bouton en bas.
Ainsi, notre rôle nommé lambdawiths3service est créé.
Créer une fonction Lambda et ajouter un déclencheur S3
Dans cette section, voyons comment créer une fonction Lambda et y ajouter un déclencheur S3. Pour cela, vous devrez suivre les étapes ci-dessous -
Étape 1
Accédez aux services AWS et sélectionnez Lambda comme indiqué ci-dessous -
Étape 2
Cliquez sur Lambda et suivez le processus d'ajout Name. Choisir laRuntime, Roleetc. et créez la fonction. La fonction Lambda que nous avons créée est illustrée dans la capture d'écran ci-dessous -
Étape 3
Ajoutons maintenant le déclencheur S3.
Étape 4
Choisissez le déclencheur ci-dessus et ajoutez les détails comme indiqué ci-dessous -
Étape 5
Sélectionnez le compartiment créé à partir de la liste déroulante du compartiment. Le type d'événement a les détails suivants -
Sélectionner Object Created (All), car nous avons besoin du déclencheur AWS Lambda lorsque le fichier est téléchargé, supprimé, etc.
Étape 6
Vous pouvez ajouter un préfixe et un modèle de fichier qui sont utilisés pour filtrer les fichiers ajoutés. Par exemple, pour déclencher lambda uniquement pour les images .jpg. Laissez-le vide pour le moment car nous devons déclencher Lambda pour tous les fichiers téléchargés. Cliquez surAdd bouton pour ajouter le déclencheur.
Étape 7
Vous pouvez trouver l'affichage du déclencheur pour la fonction Lambda comme indiqué ci-dessous -
Ajoutons les détails de la fonction aws lambda. Ici, nous utiliserons l'éditeur en ligne pour ajouter notre code et utiliser nodejs comme environnement d'exécution.
Étape 8
Pour déclencher S3 avec AWS Lambda, nous devrons utiliser l'événement S3 dans le code comme indiqué ci-dessous -
exports.handler = function(event, context, callback) {
console.log("Incoming Event: ", event);
const bucket = event.Records[0].s3.bucket.name;
const filename = decodeURIComponent(event.Records[0].s3.object.key.replace(/\+/g, ' '));
const message = `File is uploaded in - ${bucket} -> ${filename}`;
console.log(message);
callback(null, message);
};
Notez que le paramètre d'événement contient les détails de S3event. Nous avons consolidé le nom du compartiment et le nom du fichier qui seront enregistrés lorsque vous téléchargez l'image dans S3bucket.
Étape 9
Maintenant, sauvegardons les modifications et testons la fonction lambda avec S3upload. Voici les détails du code ajoutés dans AWS Lambda -
Étape 10
Maintenant, ajoutons le rôle, la mémoire et le délai d'expiration.
Étape 11
Maintenant, enregistrez la fonction Lambda. Ouvrez S3 à partir des services Amazon et ouvrez le compartiment que nous avons créé précédemment, à savoirworkingwithlambdaands3.
Téléchargez l'image comme indiqué ci-dessous -
Étape 12
Cliquez sur Upload bouton pour ajouter des fichiers comme indiqué -
Étape 13
Cliquez sur Add filespour ajouter des fichiers. Vous pouvez également faire glisser et déposer les fichiers. Maintenant, cliquez surUpload bouton.
Ainsi, nous avons téléchargé une image dans notre compartiment S3.
Étape 14
Pour voir les détails du déclencheur, accédez au service AWS et sélectionnez CloudWatch. Ouvrez les journaux de la fonction Lambda et utilisez le code suivant -
exports.handler = function(event, context, callback) {
console.log("Incoming Event: ", event);
const bucket = event.Records[0].s3.bucket.name;
const filename = decodeURIComponent(event.Records[0].s3.object.key.replace(/\+/g, ' '));
const message = `File is uploaded in - ${bucket} -> ${filename}`;
console.log(message);
callback(null, message);
};
La sortie que vous pouvez observer dans Cloudwatch est comme indiqué -
La fonction AWS Lambda est déclenchée lorsque le fichier est téléchargé dans le compartiment S3 et que les détails sont enregistrés dans Cloudwatch comme indiqué ci-dessous -