Direkt zum Inhalt

Wie richte ich eine Amazon S3-Ereignisbenachrichtigung ein, um eine Lambda-Funktion aufzurufen, die sich in einem anderen AWS-Konto befindet?

Lesedauer: 4 Minute
0

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:

  1. Aktualisiere die ressourcenbasierte Berechtigungsrichtlinie der Lambda-Funktion, um Amazon S3 die Aufrufberechtigung zu gewähren.
  2. 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:

  1. Öffne die Seite Funktionen auf der Lambda-Konsole mit dem AWS-Konto, in dem sich die Lambda-Funktion befindet.
  2. Wähle den Namen der Lambda-Funktion, die von Amazon S3 aufgerufen werden soll.
  3. Wähle auf der Registerkarte Konfiguration die Option Berechtigungen.
  4. Wähle im Bereich Ressourcenbasierte Richtlinie die Option Berechtigungen hinzufügen.
  5. Wähle im Bereich Richtlinienanweisung die Option AWS-Service. Die Drop-down-Liste Service wird angezeigt.
  6. Wähle in der Drop-down-Liste Service S3, um weitere Felder anzuzeigen.
  7. Gib für die Statement-ID eine eindeutige Statement-ID ein, um die Anweisung, die du innerhalb der Richtlinie erstellst, von anderen abzuheben.
  8. Gib für Quellkonto die AWS-Konto-ID des Kontos ein, das den S3-Bucket hostet.
  9. Gib für Quell-ARN den ARN des S3-Buckets. Verwende nicht das folgende Format:
    arn:aws:s3:::bucket_name
    Hinweis: Ersetze den bucket_name durch den Namen deines S3-Buckets.
  10. Wähle für Aktion die Option lambda:InvokeFunction aus der Drop-down-Liste aus.
  11. 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?

Warum erhalte ich die Fehlermeldung „Unable to validate the following destination configurations“, wenn ich eine Amazon S3-Ereignisbenachrichtigung erstelle?

AWS OFFICIALAktualisiert vor 2 Jahren