Verwenden der Lambda-Funktion mit Amazon S3
Der Amazon S3-Dienst wird für die Dateispeicherung verwendet, in der Sie Dateien hochladen oder entfernen können. Wir können AWS Lambda auf S3 auslösen, wenn Dateien in S3-Buckets hochgeladen werden. AWS Lambda verfügt über eine Handlerfunktion, die als Startpunkt für die AWS Lambda-Funktion dient. Der Handler hat die Details der Ereignisse. In diesem Kapitel erfahren Sie, wie Sie mit AWS S3 die AWS Lambda-Funktion auslösen, wenn Sie Dateien in den S3-Bucket hochladen.
Schritte zur Verwendung der AWS Lambda-Funktion mit Amazon S3
Um AWS Lambda mit Amazon S3 verwenden zu können, benötigen wir Folgendes:
- Erstellen Sie einen S3-Bucket
- Erstellen Sie eine Rolle, die berechtigt ist, mit s3 und lambda zu arbeiten
- Erstellen Sie eine Lambda-Funktion und fügen Sie s3 als Trigger hinzu.
Beispiel
Sehen wir uns diese Schritte anhand eines Beispiels an, das die grundlegende Interaktion zwischen Amazon S3 und AWS Lambda zeigt.
Der Benutzer lädt eine Datei in den Amazon S3-Bucket hoch
Sobald die Datei hochgeladen wurde, wird im Hintergrund die AWS Lambda-Funktion ausgelöst, die eine Ausgabe in Form einer Konsolenmeldung anzeigt, dass die Datei hochgeladen wurde.
Der Benutzer kann die Nachricht in Cloudwatch-Protokollen sehen, sobald die Datei hochgeladen wurde.
Das Blockdiagramm, das den Ablauf des Beispiels erklärt, wird hier gezeigt -
S3-Bucket erstellen
Beginnen wir zunächst mit der Erstellung eines s3-Buckets in der AWS-Konsole. Führen Sie dazu die folgenden Schritte aus:
Schritt 1
Gehen Sie zu Amazon Services und klicken Sie auf S3 im Speicherbereich wie im Bild unten hervorgehoben -
Schritt 2
Klicken Sie auf S3-Speicher und Create bucket Hier werden die hochgeladenen Dateien gespeichert.
Schritt 3
Sobald Sie klicken Create bucket Schaltfläche, können Sie einen Bildschirm wie folgt sehen -
Schritt 4
Geben Sie die Details ein Bucket name, Select the Region und klicken Sie auf CreateSchaltfläche unten links. So haben wir einen Eimer mit Namen erstellt:workingwithlambdaands3.
Schritt 5
Klicken Sie nun auf den Bucket-Namen und Sie werden aufgefordert, Dateien wie unten gezeigt hochzuladen.
Damit sind wir mit der Bucket-Erstellung in S3 fertig.
Erstellen Sie eine Rolle, die mit S3 und Lambda funktioniert
Führen Sie die folgenden Schritte aus, um eine Rolle zu erstellen, die mit S3 und Lambda funktioniert.
Schritt 1
Gehen Sie zu AWS Services und wählen Sie IAM wie unten gezeigt aus -
Schritt 2
Klicken Sie nun auf IAM -> Roles wie unten gezeigt -
Schritt 3
Klicken Sie nun auf Create roleund wählen Sie die Dienste aus, die diese Rolle verwenden. Wählen Sie Lambda und klicken Sie aufPermission Taste.
Schritt 4
Fügen Sie die Berechtigung von unten hinzu und klicken Sie auf Review.
Schritt 5
Beachten Sie, dass wir die folgenden Berechtigungen ausgewählt haben:
Beachten Sie, dass die von uns ausgewählten Richtlinien sind AmazonS3FullAccess, AWSLambdaFullAccess und CloudWatchFullAccess.
Schritt 6
Geben Sie nun den Rollennamen und die Rollenbeschreibung ein und klicken Sie auf Create Role Schaltfläche unten.
So wurde unsere Rolle benannt lambdawiths3service geschaffen.
Erstellen Sie die Lambda-Funktion und fügen Sie den S3-Trigger hinzu
In diesem Abschnitt erfahren Sie, wie Sie eine Lambda-Funktion erstellen und einen S3-Trigger hinzufügen. Zu diesem Zweck müssen Sie die folgenden Schritte ausführen:
Schritt 1
Gehen Sie zu AWS Services und wählen Sie Lambda wie unten gezeigt aus -
Schritt 2
Klicken Lambda und folgen Sie dem Verfahren zum Hinzufügen Name. Wählen Sie dasRuntime, Roleusw. und erstellen Sie die Funktion. Die von uns erstellte Lambda-Funktion ist im folgenden Screenshot dargestellt -
Schritt 3
Fügen wir nun den S3-Trigger hinzu.
Schritt 4
Wählen Sie den Auslöser von oben und fügen Sie die Details wie unten gezeigt hinzu -
Schritt 5
Wählen Sie den aus der Bucket-Dropdown-Liste erstellten Bucket aus. Der Ereignistyp enthält folgende Details:
Wählen Object Created (All), da wir einen AWS Lambda-Trigger benötigen, wenn eine Datei hochgeladen, entfernt usw. wird.
Schritt 6
Sie können Präfix und Dateimuster hinzufügen, mit denen die hinzugefügten Dateien gefiltert werden. Zum Beispiel, um Lambda nur für JPG-Bilder auszulösen. Lassen Sie es vorerst leer, da wir Lambda für alle hochgeladenen Dateien auslösen müssen. KlickenAdd Schaltfläche, um den Auslöser hinzuzufügen.
Schritt 7
Sie finden die Triggeranzeige für die Lambda-Funktion wie unten gezeigt -
Fügen wir die Details für die aws-Lambda-Funktion hinzu. Hier verwenden wir den Online-Editor, um unseren Code hinzuzufügen und nodejs als Laufzeitumgebung zu verwenden.
Schritt 8
Um S3 mit AWS Lambda auszulösen, müssen wir das S3-Ereignis im Code wie unten gezeigt verwenden -
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);
};
Beachten Sie, dass der Ereignisparameter die Details des S3event enthält. Wir haben den Bucket-Namen und den Dateinamen getröstet, die protokolliert werden, wenn Sie ein Bild in S3bucket hochladen.
Schritt 9
Speichern wir nun die Änderungen und testen die Lambda-Funktion mit S3upload. Im Folgenden sind die in AWS Lambda hinzugefügten Codedetails aufgeführt:
Schritt 10
Fügen wir nun die Rolle, den Speicher und das Timeout hinzu.
Schritt 11
Speichern Sie nun die Lambda-Funktion. Öffnen Sie S3 über Amazon-Dienste und öffnen Sie den zuvor erstellten Bucketworkingwithlambdaands3.
Laden Sie das Bild wie unten gezeigt hoch -
Schritt 12
Klicken Upload Schaltfläche zum Hinzufügen von Dateien wie gezeigt -
Schritt 13
Klicken Add filesDateien hinzufügen. Sie können die Dateien auch ziehen und ablegen. Klicken Sie nun aufUpload Taste.
Daher haben wir ein Bild in unseren S3-Bucket hochgeladen.
Schritt 14
Um die Triggerdetails anzuzeigen, gehen Sie zum AWS-Service und wählen Sie CloudWatch. Öffnen Sie die Protokolle für die Lambda-Funktion und verwenden Sie den folgenden Code:
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);
};
Die Ausgabe, die Sie in Cloudwatch beobachten können, ist wie folgt:
Die AWS Lambda-Funktion wird ausgelöst, wenn die Datei in den S3-Bucket hochgeladen wird und die Details in Cloudwatch wie unten gezeigt protokolliert werden.