Tutorial: Verwenden eines Amazon-S3-Auslösers zum Erstellen von Miniaturbildern - AWS Lambda

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Tutorial: Verwenden eines Amazon-S3-Auslösers zum Erstellen von Miniaturbildern

In diesem Tutorial wird eine Lambda-Funktion erstellt und konfiguriert, die die Größe von Bildern anpasst, die einem Amazon Simple Storage Service (Amazon S3)-Bucket hinzugefügt werden. Wenn Sie Ihrem Bucket eine Bilddatei hinzufügen, ruft Amazon S3 Ihre Lambda-Funktion auf. Die Funktion erstellt daraufhin eine Miniaturversion des Bilds und gibt sie an einen anderen Amazon-S3-Bucket aus.


      Diagramm: Datenfluss zwischen einem Amazon-S3-Bucket, einer Lambda-Funktion und einem anderen Amazon-S3-Bucket

Führen Sie für dieses Tutorial die folgenden Schritte aus:

  1. Erstellen Sie Quell- und Ziel-Buckets für Amazon S3 und laden Sie ein Beispielbild hoch.

  2. Erstellen Sie eine Lambda-Funktion, die die Größe eines Bildes anpasst und eine Miniaturansicht an einen Amazon-S3-Bucket ausgibt.

  3. Konfigurieren Sie einen Lambda-Auslöser, der Ihre Funktion aufruft, wenn Objekte in Ihren Quell-Bucket hochgeladen werden.

  4. Testen Sie Ihre Funktion zunächst mit einem Dummy-Ereignis und anschließend durch Hochladen eines Bilds in Ihren Quell-Bucket.

Diese Schritte zeigen, wie Sie Lambda verwenden, um eine Dateiverarbeitungsaufgabe für Objekte auszuführen, die einem Amazon-S3-Bucket hinzugefügt werden. Sie können dieses Tutorial abschließen, indem Sie die AWS Command Line Interface oder die AWS CLI (AWS Management Console) verwenden.

Ein einfacheres Beispiel, das zeigt, wie Sie einen Amazon-S3-Auslöser für Lambda konfigurieren, finden Sie unter Tutorial: Verwenden eines Amazon-S3-Auslösers zum Aufrufen einer Lambda-Funktion.

Voraussetzungen

Wenn Sie kein AWS-Konto haben, führen Sie die folgenden Schritte zum Erstellen durch.

Anmeldung für ein AWS-Konto
  1. Öffnen Sie https://portal.aws.amazon.com/billing/signup.

  2. Folgen Sie den Online-Anweisungen.

    Bei der Anmeldung müssen Sie auch einen Telefonanruf entgegennehmen und einen Verifizierungscode über die Telefontasten eingeben.

    Wenn Sie sich für ein AWS-Konto anmelden, wird ein Root-Benutzer des AWS-Kontos erstellt. Der Root-Benutzer hat Zugriff auf alle AWS-Services und Ressourcen des Kontos. Als bewährte Sicherheitsmethode weisen Sie einem Administratorbenutzer Administratorzugriff zu und verwenden Sie nur den Root-Benutzer, um Aufgaben auszuführen, die Root-Benutzerzugriff erfordern.

AWS sendet Ihnen eine Bestätigungs-E-Mail, sobald die Anmeldung abgeschlossen ist. Sie können jederzeit Ihre aktuelle Kontoaktivität anzeigen und Ihr Konto verwalten. Rufen Sie dazu https://aws.amazon.com/ auf und klicken Sie auf Mein Konto.

Nachdem Sie sich für ein AWS-Kontoangemeldet haben, sichern Sie Ihr Root-Benutzer des AWS-Kontos, aktivieren Sie AWS IAM Identity Centerund erstellen Sie einen administrativen Benutzer, damit Sie nicht den Root-Benutzer für alltägliche Aufgaben verwenden.

Schützen Ihres Root-Benutzer des AWS-Kontos
  1. Melden Sie sich bei der AWS Management Console als Kontobesitzer an, indem Sie Root-Benutzer auswählen und Ihre AWS-Konto-E-Mail-Adresse eingeben. Geben Sie auf der nächsten Seite Ihr Passwort ein.

    Hilfe bei der Anmeldung mit dem Root-Benutzer finden Sie unter Anmelden als Root-Benutzer im AWS-AnmeldungBenutzerhandbuch zu .

  2. Aktivieren Sie die Multi-Faktor-Authentifizierung (MFA) für den Root-Benutzer.

    Anweisungen dazu finden Sie unter Aktivieren eines virtuellen MFA-Geräts für den Root-Benutzer Ihres AWS-Konto (Konsole) im IAM-Benutzerhandbuch.

Erstellen eines Administratorbenutzers
  1. Aktivieren von IAM Identity Center.

    Anweisungen finden Sie unter Aktivieren AWS IAM Identity Center im AWS IAM Identity Center Benutzerhandbuch.

  2. Im IAM Identity Center gewähren Sie einem administrativen Benutzer administrativen Zugriff.

    Ein Tutorial zur Verwendung von IAM-Identity-Center-Verzeichnis als Identitätsquelle finden Sie unter Benutzerzugriff mit dem standardmäßigen IAM-Identity-Center-Verzeichnis konfigurieren im AWS IAM Identity Center-Benutzerhandbuch.

Anmelden als Administratorbenutzer
  • Um sich mit Ihrem IAM-Identity-Center-Benutzer anzumelden, verwenden Sie die Anmelde-URL, die an Ihre E-Mail-Adresse gesendet wurde, als Sie den IAM-Identity-Center-Benutzer erstellt haben.

    Hilfe bei der Anmeldung mit einem IAM-Identity-Center-Benutzer finden Sie unter Anmelden beim AWS-Zugangsportal im AWS-Anmeldung Benutzerhandbuch zu.

Wenn Sie für das Tutorial die AWS CLI verwenden möchten, installieren Sie die neueste Version der AWS Command Line Interface.

Für Ihren Lambda-Funktionscode können Sie Python, Node.js oder Java verwenden. Installieren Sie die Tools zur Sprachunterstützung und einen Paketmanager für die gewünschte Sprache.

Erstellen von zwei Amazon-S3-Buckets


        Das Workflow-Diagramm des Tutorials zeigt, dass Sie sich im Amazon-S3-Bucket-Schritt zum Erstellen des Buckets befinden.

Erstellen Sie zunächst zwei Amazon-S3-Buckets. Der erste Bucket ist der Quell-Bucket, in den Sie Ihre Bilder hochladen. Der zweite Bucket wird von Lambda verwendet, um das verkleinerte Miniaturbild zu speichern, wenn Sie Ihre Funktion aufrufen.

AWS Management Console
So erstellen Sie die Amazon-S3-Buckets (Konsole)
  1. Öffnen Sie die Seite Buckets der Amazon-S3-Konsole.

  2. Wählen Sie Bucket erstellen aus.

  3. Führen Sie unter Allgemeine Konfiguration die folgenden Schritte aus:

    1. Geben Sie für den Bucket-Namen einen global eindeutigen Namen ein, der den Regeln für die Bucket-Benennung von Amazon S3 entspricht. Bucket-Namen dürfen nur aus Kleinbuchstaben, Zahlen, Punkten (.) und Bindestrichen (-) bestehen.

    2. Wählen Sie unter AWS-Region die AWS-Region aus, die Ihrem geografischen Standort am nächsten ist. Notieren Sie sich die gewählte Region, da Sie Ihre Lambda-Funktion im weiteren Verlauf des Tutorials in der gleichen AWS-Region erstellen müssen.

  4. Belassen Sie alle anderen Optionen auf ihren Standardwerten und wählen Sie Bucket erstellen aus.

  5. Wiederholen Sie die Schritte 1 bis 4, um Ihren Ziel-Bucket zu erstellen. Geben Sie unter Bucket-Name den Namen SOURCEBUCKET-resized ein. SOURCEBUCKET ist hierbei der Name des Quell-Buckets, den Sie soeben erstellt haben.

AWS CLI
So erstellen Sie die Amazon-S3-Buckets (AWS CLI)
  1. Führen Sie den folgenden CLI-Befehl aus, um Ihren Quell-Bucket zu erstellen. Der gewählte Name für Ihren Bucket muss global eindeutig sein und den Regeln für die Benennung von Buckets für Amazon S3 entsprechen. Namen dürfen nur Kleinbuchstaben, Zahlen, Punkte (.) und Bindestriche (-) enthalten. Wählen Sie für region und LocationConstraint die AWS-Region aus, die Ihrem geografischen Standort am nächsten ist.

    aws s3api create-bucket --bucket SOURCEBUCKET --region us-west-2 \ --create-bucket-configuration LocationConstraint=us-west-2

    Notieren Sie sich die gewählte Region, da Sie Ihre Lambda-Funktion im weiteren Verlauf des Tutorials in der gleichen AWS-Region erstellen müssen wie Ihren Quell-Bucket.

  2. Führen Sie den folgenden Befehl aus, um Ihren Ziel-Bucket zu erstellen. Verwenden Sie für den Bucket-Namen SOURCEBUCKET-resized. SOURCEBUCKET ist hierbei der Name des Quell-Buckets, den Sie in Schritt 1 erstellt haben. Wählen Sie für region und LocationConstraint die gleiche AWS-Region aus, die Sie auch bei der Erstellung Ihres Quell-Bucket verwendet haben.

    aws s3api create-bucket --bucket SOURCEBUCKET-resized --region us-west-2 \ --create-bucket-configuration LocationConstraint=us-west-2

Hochladen eines Testbilds in Ihren Quell-Bucket


        Das Workflow-Diagramm des Tutorials zeigt, dass Sie sich im Amazon-S3-Bucket-Schritt zum Hochladen eines Testobjekts befinden.

Später in diesem Tutorial testen Sie Ihre Lambda-Funktion, indem Sie sie über die AWS CLI oder über die Lambda-Konsole aufrufen. Damit Sie sich vergewissern können, dass Ihre Funktion ordnungsgemäß funktioniert, muss Ihr Quell-Bucket ein Testbild enthalten. Bei diesem Bild kann es sich um eine beliebige JPG- oder PNG-Datei handeln.

AWS Management Console
So laden Sie ein Testbild in Ihren Quell-Bucket hoch (Konsole)
  1. Öffnen Sie die Seite Buckets der Amazon-S3-Konsole.

  2. Wählen Sie den Quell-Bucket aus, den Sie im vorherigen Schritt erstellt haben.

  3. Klicken Sie auf Hochladen.

  4. Wählen Sie Dateien hinzufügen aus und wählen Sie mit der Dateiauswahl das Objekt aus, das Sie hochladen möchten.

  5. Wählen Sie Öffnen und anschließend Hochladen aus.

AWS CLI
So laden Sie ein Testbild in Ihren Quell-Bucket hoch (AWS CLI)
  • Führen Sie in dem Verzeichnis, das das hochzuladende Bild enthält, den folgenden CLI-Befehl aus. Ersetzen Sie dabei den Parameter --bucket durch den Namen Ihres Quell-Buckets. Verwenden Sie für die Parameter --key und --body den Dateinamen Ihres Testbilds.

    aws s3api put-object --bucket SOURCEBUCKET --key HappyFace.jpg --body ./HappyFace.jpg

Erstellen einer Berechtigungsrichtlinie


        Das Workflow-Diagramm des Tutorials zeigt, dass Sie sich im Lambda-Funktionsschritt zum Erstellen einer Berechtigungsrichtlinie befinden.

Im ersten Schritt der Erstellung Ihrer Lambda-Funktion wird eine Berechtigungsrichtlinie erstellt. Diese Richtlinie erteilt Ihrer Funktion die Berechtigungen, die sie für den Zugriff auf andere AWS-Ressourcen benötigt. Für dieses Tutorial erteilt die Richtlinie Lambda Lese- und Schreibberechtigungen für Amazon S3-Buckets und ermöglicht es ihm, in Amazon CloudWatch Logs zu schreiben.

AWS Management Console
So erstellen Sie die Richtlinie (Konsole)
  1. Öffnen Sie die Seite Richtlinien in der AWS Identity and Access Management-(IAM)-Konsole.

  2. Wählen Sie Richtlinie erstellen aus.

  3. Wählen Sie die Registerkarte JSON aus und kopieren Sie dann die folgende benutzerdefinierte JSON-Richtlinie in den JSON-Editor.

    { "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:::*/*" } ] }
  4. Wählen Sie Weiter aus.

  5. Geben Sie unter Richtliniendetails für den Richtliniennamen LambdaS3Policy ein.

  6. Wählen Sie Richtlinie erstellen aus.

AWS CLI
So erstellen Sie die Richtlinie (AWS CLI)
  1. Speichern Sie den folgenden JSON-Code in einer Datei mit dem Namen policy.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:::*/*" } ] }
  2. Führen Sie in dem Verzeichnis, in dem Sie das JSON-Richtliniendokument gespeichert haben, den folgenden CLI-Befehl aus:

    aws iam create-policy --policy-name LambdaS3Policy --policy-document file://policy.json

Erstellen einer Ausführungsrolle


        Das Workflow-Diagramm des Tutorials zeigt, dass Sie sich im Lambda-Funktionsschritt zum Erstellen einer Ausführungsrolle befinden.

Eine Ausführungsrolle ist eine IAM-Rolle, die einer Lambda-Funktion Zugriffsberechtigungen für AWS-Services und für Ressourcen erteilt. Um Ihrer Funktion Lese- und Schreibzugriff auf einen Amazon-S3-Bucket zu erteilen, fügen Sie die Berechtigungsrichtlinie an, die Sie im vorherigen Schritt erstellt haben.

AWS Management Console
So erstellen Sie eine Ausführungsrolle und fügen Ihre Berechtigungsrichtlinie hinzu (Konsole)
  1. Öffnen Sie die Seite Rollen der (IAM-)Konsole.

  2. Wählen Sie Rolle erstellen aus.

  3. Wählen Sie unter Vertrauenswürdiger Entitätstyp die Option AWS-Service und unter Anwendungsfall die Option Lambda aus.

  4. Wählen Sie Weiter aus.

  5. Fügen Sie die Berechtigungsrichtlinie hinzu, die Sie im vorherigen Schritt erstellt haben:

    1. Geben Sie im Feld für die Richtliniensuche LambdaS3Policy ein.

    2. Aktivieren Sie in den Suchergebnissen das Kontrollkästchen für LambdaS3Policy.

    3. Wählen Sie Weiter aus.

  6. Geben Sie unter Rollendetails im Feld Rollenname den Namen LambdaS3Role ein.

  7. Wählen Sie Rolle erstellen aus.

AWS CLI
So erstellen Sie eine Ausführungsrolle und fügen Ihre Berechtigungsrichtlinie an (AWS CLI)
  1. Speichern Sie den folgenden JSON-Code in einer Datei mit dem Namen trust-policy.json: Diese Vertrauensrichtlinie ermöglicht es Lambda, die Berechtigungen der Rolle zu verwenden, indem es dem Service-Prinzipal lambda.amazonaws.com die Erlaubnis erteilt, die Aktion AWS Security Token Service (AWS STS) AssumeRole aufzurufen.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
  2. Führen Sie in dem Verzeichnis, in dem Sie das JSON-Vertrauensrichtliniendokument gespeichert haben, den folgenden CLI-Befehl aus, um die Ausführungsrolle zu erstellen:

    aws iam create-role --role-name LambdaS3Role --assume-role-policy-document file://trust-policy.json
  3. Führen Sie den folgenden CLI-Befehl aus, um die im vorherigen Schritt erstellte Berechtigungsrolle anzufügen. Ersetzen Sie dabei die Nummer AWS-Konto im ARN der Richtlinie durch Ihre eigene Kontonummer.

    aws iam attach-role-policy --role-name LambdaS3Role --policy-arn arn:aws:iam::123456789012:policy/LambdaS3Policy

Erstellen des Bereitstellungspakets für die Funktion


        Das Workflow-Diagramm des Tutorials zeigt, dass Sie sich im Lambda-Funktionsschritt zum Erstellen des Bereitstellungspakets befinden.

Um Ihre Funktion zu erstellen, erstellen Sie ein Bereitstellungspaket, das Ihren Funktionscode und die zugehörigen Abhängigkeiten enthält. Bei der hier verwendeten Funktion CreateThumbnail verwendet Ihr Funktionscode eine separate Bibliothek für die Anpassung der Bildgröße. Folgen Sie den Anweisungen für die von Ihnen gewählte Sprache, um ein Bereitstellungspaket zu erstellen, das die erforderliche Bibliothek enthält.

Node.js
So erstellen Sie das Bereitstellungspaket (Node.js)
  1. Erstellen Sie ein Verzeichnis namens lambda-s3 für Ihren Funktionscode und die Abhängigkeiten und navigieren Sie dorthin.

    mkdir lambda-s3 cd lambda-s3
  2. Speichern Sie den folgenden Funktionscode in einer lokalen Datei namens index.mjs: Stellen Sie sicher, dass Sie durch 'us-west-2' die ersetzen, AWS-Region in der Sie Ihre eigenen Quell- und Ziel-Buckets erstellt haben.

    // 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-west-2'}); // 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); };
  3. Installieren Sie die Sharp-Bibliothek mithilfe von npm im Verzeichnis lambda-s3. Beachten Sie, dass die neueste Version von Sharp (0.33) nicht mit Lambda kompatibel ist. Installieren Sie für dieses Tutorial daher Version 0.32.6.

    npm install sharp@0.32.6

    Der npm-Befehl install erstellt ein Verzeichnis namens node_modules für Ihre Module. Nach diesem Schritt sollte Ihre Verzeichnisstruktur wie folgt aussehen:

    lambda-s3 |- index.mjs |- node_modules | |- base64js | |- bl | |- buffer ... |- package-lock.json |- package.json
  4. Erstellen Sie ein ZIP-Bereitstellungspaket, das Ihren Funktionscode und die zugehörigen Abhängigkeiten enthält. Führen Sie unter macOS oder Linux den folgenden Befehl aus:

    zip -r function.zip .

    Verwenden Sie unter Windows Ihr bevorzugtes ZIP-Programm, um eine ZIP-Datei zu erstellen. Achten Sie darauf, dass sich die Dateien index.mjs, package.json und package-lock.json und das Verzeichnis node_modules im Stammverzeichnis der ZIP-Datei befinden.

Python
So erstellen Sie das Bereitstellungspaket (Python)
  1. Speichern Sie den Beispielcode als Datei mit dem Namen lambda_function.py.

    import boto3 import os import sys import uuid from urllib.parse import unquote_plus from PIL import Image import PIL.Image s3_client = boto3.client('s3') def resize_image(image_path, resized_path): with Image.open(image_path) as image: image.thumbnail(tuple(x / 2 for x in image.size)) image.save(resized_path) def lambda_handler(event, context): for record in event['Records']: bucket = record['s3']['bucket']['name'] key = unquote_plus(record['s3']['object']['key']) tmpkey = key.replace('/', '') download_path = '/tmp/{}{}'.format(uuid.uuid4(), tmpkey) upload_path = '/tmp/resized-{}'.format(tmpkey) s3_client.download_file(bucket, key, download_path) resize_image(download_path, upload_path) s3_client.upload_file(upload_path, '{}-resized'.format(bucket), 'resized-{}'.format(key))
  2. Erstellen Sie in dem Verzeichnis, in dem Sie auch Ihre lambda_function.py-Datei erstellt haben, ein neues Verzeichnis mit dem Namen package und installieren Sie die Bibliothek Pillow (PIL) sowie das AWS SDK for Python (Boto3). Die Lambda-Python-Laufzeit enthält zwar eine Version des Boto3 SDK, es empfiehlt sich jedoch, dem Bereitstellungspaket alle Abhängigkeiten Ihrer Funktion hinzuzufügen, auch wenn sie in der Laufzeit enthalten sind. Weitere Informationen finden Sie in der Laufzeitabhängigkeiten in Python.

    mkdir package pip install \ --platform manylinux2014_x86_64 \ --target=package \ --implementation cp \ --python-version 3.9 \ --only-binary=:all: --upgrade \ pillow boto3

    Die Pillow-Bibliothek enthält Code in C/C++. Mithilfe der Optionen --platform manylinux_2014_x86_64 und --only-binary=:all: lädt pip eine Version von Pillow herunter und installiert sie, die vorkompilierte Binärdateien enthält, die mit dem Betriebssystem Amazon Linux 2 kompatibel sind. Dadurch wird sichergestellt, dass Ihr Bereitstellungspaket in der Lambda-Ausführungsumgebung funktioniert, unabhängig vom Betriebssystem und der Architektur Ihrer lokalen Build-Maschine.

  3. Erstellen Sie eine ZIP-Datei, die Ihren Anwendungscode sowie die Pillow- und die Boto3-Bibliothek enthält. Führen Sie unter Linux oder MacOS die folgenden Befehle über Ihre Befehlszeilenschnittstelle aus:

    cd package zip -r ../lambda_function.zip . cd .. zip lambda_function.zip lambda_function.py

    Verwenden Sie unter Windows Ihr bevorzugtes ZIP-Tool, um die lambda_function.zip-Datei zu erstellen. Achten Sie darauf, dass sich die Datei lambda_function.py und die Ordner, die Ihre Abhängigkeiten enthalten, im Stammverzeichnis der ZIP-Datei befinden.

Sie können Ihr Bereitstellungspaket auch in einer virtuellen Python-Umgebung erstellen. Siehe Arbeiten mit ZIP-Dateiarchiven und Python-Lambda-Funktionen

So erstellen Sie die Lambda-Funktion:


        Das Workflow-Diagramm des Tutorials zeigt, dass Sie sich im Lambda-Funktionsschritt zum Erstellen der Funktion befinden.

Sie können Ihre Lambda-Funktion entweder mithilfe der AWS CLI oder über die Lambda-Konsole erstellen. Folgen Sie den Anweisungen für die von Ihnen gewählte Sprache, um die Funktion zu erstellen.

AWS Management Console
So erstellen Sie die Funktion (Konsole)

Wenn Sie Ihre Lambda-Funktion über die Konsole erstellen möchten, erstellen Sie zunächst eine Basisfunktion, die etwas Hello-World-Code enthält. Anschließend ersetzen Sie diesen Code durch Ihren eigenen Funktionscode, indem Sie die im vorherigen Schritt erstellte ZIP- oder JAR-Datei hochladen.

  1. Öffnen Sie die Seite Funktionen der Lambda-Konsole.

  2. Stellen Sie sicher, dass Sie in derselben AWS-Region arbeiten, in der Sie Ihren Amazon-S3-Bucket erstellt haben. Sie können Ihre Region mithilfe der Dropdown-Liste am oberen Bildschirmrand ändern.

    
              Das Image zeigt das Dropdown-Regionsmenü in der Lambda-Konsole.
  3. Wählen Sie Funktion erstellen.

  4. Wählen Sie Author from scratch aus.

  5. Führen Sie unter Basic information (Grundlegende Informationen) die folgenden Schritte aus:

    1. Geben Sie für Function name (Funktionsname) CreateThumbnail ein.

    2. Wählen Sie unter Laufzeit entweder Node.js 18.x oder Python 3.9 aus (je nachdem, welche Sprache Sie für Ihre Funktion gewählt haben).

    3. Wählen Sie für Architektur x86_64 aus.

  6. Gehen Sie auf der Registerkarte Standard-Ausführungsrolle ändern wie folgt vor:

    1. Erweitern Sie die Registerkarte und wählen Sie dann Verwenden einer vorhandenen Rolle aus.

    2. Wählen Sie die zuvor erstellte LambdaS3Role aus.

  7. Wählen Sie Funktion erstellen.

So laden Sie den Funktionscode hoch (Konsole)
  1. Wählen Sie im Bereich Codequelle die Option Hochladen von aus.

  2. Wählen Sie die ZIP-Datei aus.

  3. Klicken Sie auf Hochladen.

  4. Wählen Sie in der Dateiauswahl Ihre ZIP-Datei und anschließend Öffnen aus.

  5. Wählen Sie Speichern.

AWS CLI
So erstellen Sie die Funktion (AWS CLI)
  • Führen Sie den CLI-Befehl für die von Ihnen gewählte Sprache aus. Ersetzen Sie für den Parameter role den Wert 123456789012 durch Ihre eigene AWS-Konto-ID. Ersetzen Sie für den Parameter region den Wert us-west-2 durch die Region, in der Sie Ihre Amazon-S3-Buckets erstellt haben.

    • Führen Sie für Node.js den folgenden Befehl in dem Verzeichnis aus, das die Datei function.zip enthält:

      aws lambda create-function --function-name CreateThumbnail \ --zip-file fileb://function.zip --handler index.handler --runtime nodejs18.x \ --timeout 10 --memory-size 1024 \ --role arn:aws:iam::123456789012:role/LambdaS3Role --region us-west-2
    • Führen Sie für Python den folgenden Befehl in dem Verzeichnis aus, das die Datei lambda_function.zip enthält:

      aws lambda create-function --function-name CreateThumbnail \ --zip-file fileb://lambda_function.zip --handler lambda_function.lambda_handler \ --runtime python3.9 --timeout 10 --memory-size 1024 \ --role arn:aws:iam::123456789012:role/LambdaS3Role --region us-west-2

Konfigurieren von Amazon S3 zum Aufrufen der Funktion


        Das Workflow-Diagramm des Tutorials zeigt, dass Sie sich im Auslöser-Schritt zum Erstellen des Amazon-S3-Auslösers befinden.

Damit Ihre Lambda-Funktion ausgeführt wird, wenn Sie ein Bild in Ihren Quell-Bucket hochladen, müssen Sie einen Auslöser für Ihre Funktion konfigurieren. Sie können den Amazon-S3-Auslöser entweder über die Konsole oder mithilfe der AWS CLI konfigurieren.

Wichtig

Mit diesem Verfahren wird der Amazon-S3-Bucket so konfiguriert, dass die Funktion jedes Mal aufgerufen wird, wenn ein Objekt im Bucket erstellt wird. Konfigurieren Sie dieses Verhalten nur für den Quell-Bucket. Wenn Ihre Lambda-Funktion Objekte in dem Bucket erstellt, der sie aufruft, kann es passieren, dass Ihre Funktion kontinuierlich in einer Schleife aufgerufen wird. Dies kann unerwartete Gebühren für Ihr AWS-Konto zur Folge haben.

AWS Management Console
So konfigurieren Sie den Amazon-S3-Auslöser (Konsole)
  1. Öffnen Sie die Seite Funktionen der Lambda-Konsole und wählen Sie Ihre Funktion (CreateThumbnail) aus.

  2. Wählen Sie Add trigger.

  3. Wählen Sie S3 aus.

  4. Wählen Sie unter Bucket Ihren Quell-Bucket aus.

  5. Wählen Sie unter Ereignistypen die Option Alle Objekterstellungsereignisse aus.

  6. Aktivieren Sie unter Rekursiver Aufruf das Kontrollkästchen, um zu bestätigen, dass die Verwendung desselben Amazon-S3-Buckets für die Ein- und Ausgabe nicht empfohlen wird. Weitere Informationen zu rekursiven Aufrufmustern in Lambda finden Sie bei Serverless Land unter Recursive patterns that cause run-away Lambda functions.

  7. Wählen Sie Hinzufügen aus.

    Wenn Sie einen Auslöser über die Lambda-Konsole erstellen, erstellt Lambda automatisch eine ressourcenbasierte Richtlinie, um dem von Ihnen ausgewählten Dienst die Berechtigung zum Aufrufen Ihrer Funktion zu erteilen.

AWS CLI
So konfigurieren Sie den Amazon-S3-Auslöser (AWS CLI)
  1. Damit Ihr Amazon-S3-Quell-Bucket Ihre Funktion aufruft, wenn Sie eine Bilddatei hinzufügen, müssen Sie zunächst mithilfe einer ressourcenbasierten Richtlinie Berechtigungen für Ihre Funktion konfigurieren. Eine ressourcenbasierte Richtlinienanweisung erteilt anderen AWS-Services die Berechtigung zum Aufrufen Ihrer Funktion. Führen Sie den folgenden CLI-Befehl aus, um Amazon S3 die Berechtigung zum Aufrufen Ihrer Funktion zu erteilen. Ersetzen Sie dabei den Parameter source-account durch Ihre eigene AWS-Konto-ID und verwenden Sie Ihren eigenen Quell-Bucket-Namen.

    aws lambda add-permission --function-name CreateThumbnail \ --principal s3.amazonaws.com --statement-id s3invoke --action "lambda:InvokeFunction" \ --source-arn arn:aws:s3:::SOURCEBUCKET \ --source-account 123456789012

    Die mit diesem Befehl definierte Richtlinie ermöglicht es Amazon S3 nur, Ihre Funktion aufzurufen, wenn eine Aktion in Ihrem Quell-Bucket ausgeführt wird.

    Anmerkung

    Namen von Amazon-S3-Buckets sind zwar global eindeutig, trotzdem empfiehlt es sich, bei der Verwendung ressourcenbasierter Richtlinien anzugeben, dass der Bucket zu Ihrem Konto gehören muss. Der Grund: Wenn Sie einen Bucket löschen, kann ein anderes AWS-Konto einen Bucket mit dem gleichen Amazon-Ressourcennamen (ARN) erstellen.

  2. Speichern Sie den folgenden JSON-Code in einer Datei mit dem Namen notification.json: Wenn dieser JSON-Code auf Ihren Quell-Bucket angewendet wird, wird der Bucket so konfiguriert, dass er jedes Mal, wenn ein neues Objekt hinzugefügt wird, eine Benachrichtigung an Ihre Lambda-Funktion sendet. Ersetzen Sie die AWS-Konto-Nummer und die AWS-Region im ARN der Lambda-Funktion durch Ihre eigene Kontonummer und Region.

    { "LambdaFunctionConfigurations": [ { "Id": "CreateThumbnailEventConfiguration", "LambdaFunctionArn": "arn:aws:lambda:us-west-2:123456789012:function:CreateThumbnail", "Events": [ "s3:ObjectCreated:Put" ] } ] }
  3. Führen Sie den folgenden CLI-Befehl aus, um die Benachrichtigungseinstellungen in der von Ihnen erstellten JSON-Datei auf Ihren Quell-Bucket anzuwenden. Ersetzen Sie dabei SOURCEBUCKET durch den Namen Ihres Quell-Buckets.

    aws s3api put-bucket-notification-configuration --bucket SOURCEBUCKET \ --notification-configuration file://notification.json

    Weitere Informationen über den put-bucket-notification-configuration Befehl und die notification-configuration Option finden Sie unter put-bucket-notification-configuration in der AWS CLI-Befehlsreferenz .

Testen Ihrer Lambda-Funktion mit einem Dummy-Ereignis


        Das Workflow-Diagramm des Tutorials zeigt, dass Sie sich im Testschritt zum Testen mit einem Dummy-Ereignis befinden.

Bevor Sie Ihr gesamtes Setup testen, indem Sie Ihrem Amazon-S3-Quell-Bucket eine Bilddatei hinzufügen, testen Sie, ob Ihre Lambda-Funktion ordnungsgemäß funktioniert, indem Sie sie mit einem Dummy-Ereignis aufrufen. In Lambda ist ein Ereignis ein Dokument im JSON-Format, das Daten enthält, die von Ihrer Lambda-Funktion verarbeitet werden sollen. Wenn Ihre Funktion von Amazon S3 aufgerufen wird, enthält das an Ihre Funktion gesendete Ereignis Informationen wie den Bucket-Namen, den Bucket-ARN und den Objektschlüssel.

AWS Management Console
So testen Sie Ihre Lambda-Funktion mit einem Dummy-Ereignis (Konsole)
  1. Öffnen Sie die Seite Funktionen der Lambda-Konsole und wählen Sie Ihre Funktion (CreateThumbnail) aus.

  2. Wählen Sie die Registerkarte Test.

  3. Gehen Sie im Bereich Testereignis wie folgt vor, um Ihr Testereignis zu erstellen:

    1. Wählen Sie unter Testereignisaktion die Option Neues Ereignis erstellen aus.

    2. Geben Sie für Event name (Ereignisname) myTestEvent ein.

    3. Wählen Sie unter Vorlage die Option S3 Put aus.

    4. Ersetzen Sie die Werte für die folgenden Parameter durch Ihre eigenen Werte:

      • Ersetzen Sie für awsRegion den Wert us-east-1 durch die AWS-Region, in der Sie den Amazon-S3-Bucket erstellt haben.

      • Ersetzen Sie für name den Wert example-bucket durch den Namen Ihres eigenen Amazon-S3-Quell-Buckets.

      • Ersetzen Sie für key den Wert test%2Fkey durch den Dateinamen des Testobjekts, das Sie im Schritt Hochladen eines Testbilds in Ihren Quell-Bucket in Ihren Quell-Bucket hochgeladen haben.

      { "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": "example-bucket", "ownerIdentity": { "principalId": "EXAMPLE" }, "arn": "arn:aws:s3:::example-bucket" }, "object": { "key": "test%2Fkey", "size": 1024, "eTag": "0123456789abcdef0123456789abcdef", "sequencer": "0A1B2C3D4E5F678901" } } } ] }
    5. Wählen Sie Speichern.

  4. Wählen Sie im Bereich Testereignis die Option Testen aus.

  5. Gehen Sie wie folgt vor, um zu überprüfen, ob Ihre Funktion eine verkleinerte Version Ihres Bilds erstellt und in Ihrem Amazon-S3-Ziel-Bucket gespeichert hat:

    1. Öffnen Sie die Seite Buckets der Amazon-S3-Konsole.

    2. Wählen Sie Ihren Ziel-Bucket aus und vergewissern Sie sich, dass die Datei, deren Größe angepasst wurde, im Bereich Objekte vorhanden ist.

AWS CLI
So testen Sie Ihre Lambda-Funktion mit einem Dummy-Ereignis (AWS CLI)
  1. Speichern Sie den folgenden JSON-Code in einer Datei mit dem Namen dummyS3Event.json: Ersetzen Sie die Werte für die folgenden Parameter durch Ihre eigenen Werte:

    1. Ersetzen Sie für awsRegion den Wert us-west-2 durch die AWS-Region, in der Sie den Amazon-S3-Bucket erstellt haben.

    2. Ersetzen Sie für name den Wert SOURCEBUCKET durch den Namen Ihres eigenen Amazon-S3-Quell-Buckets.

    3. Ersetzen Sie für key den Wert HappyFace.jpg durch den Dateinamen des Testobjekts, das Sie im Schritt Hochladen eines Testbilds in Ihren Quell-Bucket in Ihren Quell-Bucket hochgeladen haben.

    { "Records":[ { "eventVersion":"2.0", "eventSource":"aws:s3", "awsRegion":"us-west-2", "eventTime":"1970-01-01T00:00:00.000Z", "eventName":"ObjectCreated:Put", "userIdentity":{ "principalId":"AIDAJDPLRKLG7UEXAMPLE" }, "requestParameters":{ "sourceIPAddress":"127.0.0.1" }, "responseElements":{ "x-amz-request-id":"C3D13FE58DE4C810", "x-amz-id-2":"FMyUVURIY8/IgAtTv8xRjskZQpcIZ9KG4V5Wp6S7S/JRWeUWerMUE5JgHvANOjpD" }, "s3":{ "s3SchemaVersion":"1.0", "configurationId":"testConfigRule", "bucket":{ "name":"SOURCEBUCKET", "ownerIdentity":{ "principalId":"A3NL1KOZZKExample" }, "arn":"arn:aws:s3:::SOURCEBUCKET" }, "object":{ "key":"HappyFace.jpg", "size":1024, "eTag":"d41d8cd98f00b204e9800998ecf8427e", "versionId":"096fKKXTRTtl3on89fVO.nfljtsv6qko" } } } ] }
  2. Rufen Sie die Funktion in dem Verzeichnis auf, in dem Sie die Datei dummyS3Event.json gespeichert haben, indem Sie den folgenden CLI-Befehl ausführen. Dieser Befehl ruft Ihre Lambda-Funktion synchron auf, indem RequestResponse als Wert des Parameters „invocation-type“ angegeben wird. Weitere Informationen zu synchronen und asynchronen Aufrufen finden Sie unter Aufrufen von Lambda-Funktionen.

    aws lambda invoke --function-name CreateThumbnail \ --invocation-type RequestResponse --cli-binary-format raw-in-base64-out \ --payload file://dummyS3Event.json outputfile.txt

    Die cli-binary-format Option ist erforderlich, wenn Sie Version 2 des verwendenAWS CLI. Um dies zur Standardeinstellung zu machen, führen Sie aws configure set cli-binary-format raw-in-base64-out aus. Weitere Informationen finden Sie unter AWS CLI-unterstützte globale Befehlszeilenoptionen.

  3. Vergewissern Sie sich, dass Ihre Funktion eine Miniaturversion Ihres Bilds erstellt und in Ihrem Amazon-S3-Ziel-Bucket gespeichert hat. Führen Sie den folgenden CLI-Befehl aus und ersetzen Sie dabei SOURCEBUCKET-resized durch den Namen Ihres eigenen Ziel-Buckets:

    aws s3api list-objects-v2 --bucket SOURCEBUCKET-resized

    Die Ausgabe sollte in etwa wie folgt aussehen: Der Parameter Key zeigt den Dateinamen Ihrer verkleinerten Bilddatei an.

    { "Contents": [ { "Key": "resized-HappyFace.jpg", "LastModified": "2023-06-06T21:40:07+00:00", "ETag": "\"d8ca652ffe83ba6b721ffc20d9d7174a\"", "Size": 2633, "StorageClass": "STANDARD" } ] }

Testen Ihrer Funktion mit dem Amazon-S3-Auslöser


        Das Workflow-Diagramm des Tutorials zeigt, dass Sie sich im Testschritt des Testens durch Hochladen einer Datei in Amazon S3 befinden.

Nachdem Sie sich vergewissert haben, dass Ihre Lambda-Funktion ordnungsgemäß funktioniert, können Sie Ihr gesamtes Setup testen, indem Sie Ihrem Amazon-S3-Quell-Bucket eine Bilddatei hinzufügen. Wenn Sie Ihr Bild dem Quell-Bucket hinzufügen, sollte Ihre Lambda-Funktion automatisch aufgerufen werden. Ihre Funktion erstellt eine verkleinerte Version der Datei und speichert sie in Ihrem Ziel-Bucket.

AWS Management Console
So testen Sie Ihre Lambda-Funktion unter Verwendung des Amazon-S3-Auslösers (Konsole)
  1. Gehen Sie wie folgt vor, um ein Bild in Ihren Amazon-S3-Bucket hochzuladen:

    1. Öffnen Sie die Seite Buckets der Amazon-S3-Konsole und wählen Sie Ihren Quell-Bucket aus.

    2. Klicken Sie auf Hochladen.

    3. Wählen Sie Dateien hinzufügen und anschließend über die Dateiauswahl die Bilddatei aus, die Sie hochladen möchten. Ihr Bildobjekt kann eine beliebige JPG- oder PNG-Datei sein.

    4. Wählen Sie Öffnen und anschließend Hochladen aus.

  2. Vergewissern Sie sich, dass Lambda eine verkleinerte Version Ihrer Bilddatei in Ihrem Ziel-Bucket gespeichert hat:

    1. Navigieren Sie wieder zur Seite Buckets der Amazon-S3-Konsole und wählen Sie Ihren Ziel-Bucket aus.

    2. Im Bereich Objekte sollten jetzt zwei verkleinerte Bilddateien angezeigt werden (jeweils eine aus den beiden Tests Ihrer Lambda-Funktion). Wählen Sie zum Herunterladen Ihres verkleinerten Bilds die Datei und anschließend Herunterladen aus.

AWS CLI
So testen Sie Ihre Lambda-Funktion unter Verwendung des Amazon-S3-Auslösers (AWS CLI)
  1. Führen Sie in dem Verzeichnis, das das hochzuladende Bild enthält, den folgenden CLI-Befehl aus. Ersetzen Sie dabei den Parameter --bucket durch den Namen Ihres Quell-Buckets. Verwenden Sie für die Parameter --key und --body den Dateinamen Ihres Testbilds. Ihr Testbild kann eine beliebige JPG- oder PNG-Datei sein.

    aws s3api put-object --bucket SOURCEBUCKET --key SmileyFace.jpg --body ./SmileyFace.jpg
  2. Vergewissern Sie sich, dass Ihre Funktion eine Miniaturversion Ihres Bilds erstellt und in Ihrem Amazon-S3-Ziel-Bucket gespeichert hat. Führen Sie den folgenden CLI-Befehl aus und ersetzen Sie dabei SOURCEBUCKET-resized durch den Namen Ihres eigenen Ziel-Buckets:

    aws s3api list-objects-v2 --bucket SOURCEBUCKET-resized

    Wenn Ihre Funktion erfolgreich ausgeführt wird, erhalten Sie eine Ausgabe wie die folgende. Ihr Ziel-Bucket sollte jetzt zwei verkleinerte Dateien enthalten.

    { "Contents": [ { "Key": "resized-HappyFace.jpg", "LastModified": "2023-06-07T00:15:50+00:00", "ETag": "\"7781a43e765a8301713f533d70968a1e\"", "Size": 2763, "StorageClass": "STANDARD" }, { "Key": "resized-SmileyFace.jpg", "LastModified": "2023-06-07T00:13:18+00:00", "ETag": "\"ca536e5a1b9e32b22cd549e18792cdbc\"", "Size": 1245, "StorageClass": "STANDARD" } ] }

Bereinigen Ihrer Ressourcen

Sie können jetzt die Ressourcen, die Sie für dieses Tutorial erstellt haben, löschen, es sei denn, Sie möchten sie behalten. Durch das Löschen von AWS-Ressourcen, die Sie nicht mehr verwenden, können Sie verhindern, dass unnötige Gebühren in Ihrem AWS-Konto anfallen.

So löschen Sie die Lambda-Funktion:
  1. Öffnen Sie die Seite Funktionen der Lambda-Konsole.

  2. Wählen Sie die Funktion aus, die Sie erstellt haben.

  3. Wählen Sie Aktionen, Löschen aus.

  4. Geben Sie delete in das Texteingabefeld ein und wählen Sie Delete (Löschen) aus.

So löschen Sie die von Ihnen erstellte Richtlinie
  1. Öffnen Sie die Seite Richtlinien in der IAM-Konsole.

  2. Wählen Sie die Richtlinie aus, die Sie erstellt haben (AWSLambdaS3Policy).

  3. Wählen Sie Policy actions (Richtlinienaktionen) und anschließend Delete (Löschen) aus.

  4. Wählen Sie Löschen aus.

So löschen Sie die Ausführungsrolle
  1. Öffnen Sie die Seite Roles in der IAM-Konsole.

  2. Wählen Sie die von Ihnen erstellte Ausführungsrolle aus.

  3. Wählen Sie Löschen aus.

  4. Geben Sie den Namen der Rolle in das Texteingabefeld ein und wählen Sie Delete (Löschen) aus.

So löschen Sie den S3-Bucket:
  1. Öffnen Sie die Amazon S3-Konsole.

  2. Wählen Sie den Bucket aus, den Sie erstellt haben.

  3. Wählen Sie Löschen aus.

  4. Geben Sie den Namen des Buckets in das Texteingabefeld ein.

  5. Wählen Sie Bucket löschen aus.