Wie richte ich eine Amazon S3-Ereignisbenachrichtigung ein, um eine Lambda-Funktion aufzurufen, die sich in einem anderen AWS-Konto befindet?
Ich möchte, dass mein Amazon Simple Storage Service (Amazon S3)-Bucket eine AWS Lambda-Funktion in einem anderen AWS-Konto aufruft.
Lösung
Gehe wie folgt vor, um den Amazon S3-Bucket so einzurichten, dass er eine Lambda-Funktion in einem anderen AWS-Konto aufruft:
- Aktualisiere die ressourcenbasierte Berechtigungsrichtlinie der Lambda-Funktion, um Amazon S3 die Aufrufberechtigung zu gewähren.
- Erstelle eine Amazon S3-Ereignisbenachrichtigung, die die Lambda-Funktion aufruft.
Wichtig: Die Lambda-Funktion muss sich in derselben AWS-Region wie der S3-Bucket befinden.
Informationen zur Migration von Funktionen findest du unter Wie migriere ich eine Lambda-Funktion mithilfe der Lambda-Konsole zu einem anderen AWS-Konto oder einer anderen AWS-Region?
Die ressourcenbasierte Berechtigungsrichtlinie der Lambda-Funktion aktualisieren, um Amazon S3 die Aufrufberechtigung zu gewähren
AWS-Managementkonsole
Gehe wie folgt vor, um die ressourcenbasierte Berechtigungsrichtlinie der Lambda-Funktion so zu aktualisieren, dass Amazon S3 die Aufrufberechtigung erteilt wird:
- Öffne die Seite Funktionen auf der Lambda-Konsole mit dem AWS-Konto, in dem sich die Lambda-Funktion befindet.
- Wähle den Namen der Lambda-Funktion, die von Amazon S3 aufgerufen werden soll.
- Wähle auf der Registerkarte Konfiguration die Option Berechtigungen.
- Wähle im Bereich Ressourcenbasierte Richtlinie die Option Berechtigungen hinzufügen.
- Wähle im Bereich Richtlinienanweisung die Option AWS-Service. Die Drop-down-Liste Service wird angezeigt.
- Wähle in der Drop-down-Liste Service S3, um weitere Felder anzuzeigen.
- Gib für die Statement-ID eine eindeutige Statement-ID ein, um die Anweisung, die du innerhalb der Richtlinie erstellst, von anderen abzuheben.
- Gib für Quellkonto die AWS-Konto-ID des Kontos ein, das den S3-Bucket hostet.
- Gib für Quell-ARN den ARN des S3-Buckets. Verwende nicht das folgende Format:
Hinweis: Ersetze den bucket_name durch den Namen deines S3-Buckets.arn:aws:s3:::bucket_name - Wähle für Aktion die Option lambda:InvokeFunction aus der Drop-down-Liste aus.
- Wähle Speichern.
Weitere Informationen findest du unter Arbeiten mit ressourcenbasierten Richtlinien in Lambda.
AWS CLI
**Hinweis:**Wenn bei der Ausführung von AWS Command Line Interface (AWS CLI)-Befehlen Fehler auftreten, findest du weitere Informationen unter Troubleshoot AWS CLI errors. Stelle außerdem sicher, dass du die neueste Version von AWS CLI verwendest.
Aktualisiere die ressourcenbasierte Berechtigungsrichtlinie der Lambda-Funktion, um Amazon S3 mit der add-permission-API Aufrufberechtigungen zu gewähren, die der folgenden ähnelt:
aws lambda add-permission \--function-name LambdaFunction_name \ --action lambda:InvokeFunction \ --principal s3.amazonaws.com \ --source-arn arn:aws:s3:::bucket_name \ --source-account account-id \ --statement-id "unique_statement_ID"
Hinweis: Ersetze LambdaFunction_name, bucket_name und unique_statement_ID durch die Variablen.
Erstelle eine Amazon S3-Ereignisbenachrichtigung, die die Lambda-Funktion aufruft
AWS-Managementkonsole
Folge den Anweisungen, um Ereignisbenachrichtigungen mithilfe der Amazon S3-Konsole zu aktivieren und zu konfigurieren.
AWS CLI
Verwende den Befehl put-bucket-notification-configuration, um eine Amazon S3-Ereignisbenachrichtigung zu erstellen, die die Lambda-Funktion aufruft.
Wichtig: Bevor du den Befehl put-bucket-notification verwendest, stelle sicher, dass du keine anderen Ereignisbenachrichtigungen im S3-Bucket konfiguriert hast. Der Befehl put-bucket-notification-configuration führt anstelle eines Anfügens einen Ersetzungsvorgang für jede vorhandene Benachrichtigungskonfiguration durch.
Führe den folgenden Befehl aus, um zu überprüfen, ob der Bucket bereits über Ereignisbenachrichtigungen verfügt:
aws s3api get-bucket-notification-configuration --bucket bucket_name
Wenn der vorhergehende Befehl ein leeres JSON-Objekt oder keine Antwort zurückgibt, hast du keine bestehende Konfiguration für die Ereignisbenachrichtigung. Erstelle und speichere eine neue Datei namens notification.json mit der folgenden Konfiguration:
{ "LambdaFunctionConfigurations": [ { "Id": "my-lambda-function-s3-event-configuration", "LambdaFunctionArn": "LambdaFunction_ARN", "Events": [ "s3:ObjectCreated:" ], "Filter": { "Key": { "FilterRules": [ { "Name": "prefix"|"suffix", "Value": "string" } ] } } } ] }
Hinweis: Ersetze LambdaFunction_ARN durch den Lambda-Funktions-ARN. Ersetze das Präfix und das Suffix durch die Variablen für die Filterregel.
Wenn die get-bucket-notification-configuration ein vorhandenes JSON für die Konfiguration der Ereignisbenachrichtigungen zurückgibt, speichere die vorhandene JSON-Konfiguration als Datei mit dem Namen notification.json. Füge die neue Lambda-Benachrichtigungskonfiguration zu einem vorhandenen LambdaFunctionConfigurations-Schlüssel hinzu oder erstelle einen neuen Schlüssel mit der im folgenden Beispiel gezeigten JSON-Syntax. Füge den Schlüssel zur Datei „notification.json“ hinzu:
{ ... # Non Lambda event configurations like SNS, SQS etc. , "LambdaFunctionConfigurations": [ { "Id": "my-lambda-function-s3-event-configuration", "LambdaFunctionArn": "LambdaFunction_ARN", "Events": [ "s3:ObjectCreated:" ], "Filter": { "Key": { "FilterRules": [ { "Name": "prefix"|"suffix", "Value": "string" } ] } } }, {...}, #Other pre-existing Lambda Function configurations ] }
Nachdem du die notification.json erstellt hast, führe den folgenden Befehl aus, um die Konfiguration der S3-Ereignisbenachrichtigungen zu aktualisieren:
aws s3api put-bucket-notification-configuration \ --bucket bucket_name \ --notification-configuration file://notification.json
Hinweis: Ersetze den bucket_name durch den Namen deines S3-Buckets.
Lambda-Funktion testen
Informationen zum Testen der Lambda-Funktion mit der Lambda-Konsole findest du unter Teste die Lambda-Funktion mit einem Dummy-Ereignis. Wenn die Funktion nicht durch die Ereignisbenachrichtigung aufgerufen wird, findest du weitere Informationen unter Warum ruft meine Amazon S3-Ereignisbenachrichtigung meine Lambda-Funktion nicht auf?
Ähnliche Informationen
Wie erlaube ich meiner Lambda-Funktion den Zugriff auf meinen Amazon S3 Bucket?
- Themen
- ServerlessCompute
- Tags
- AWS Lambda
- Sprache
- Deutsch
Ähnliche Videos


Relevanter Inhalt
AWS OFFICIALAktualisiert vor 3 Jahren