View a markdown version of this page

Tutorial: Verwenden einer kontoübergreifenden Amazon SQS SQS-Warteschlange als Ereignisquelle - 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 einer kontoübergreifenden Amazon SQS SQS-Warteschlange als Ereignisquelle

In diesem Tutorial erstellen Sie eine Lambda-Funktion, die Nachrichten aus einer Amazon Simple Queue Service (Amazon SQS) -Warteschlange in einem anderen Konto verarbeitet. AWS Dieses Tutorial umfasst zwei AWS Konten: Konto A bezieht sich auf das Konto, das Ihre Lambda-Funktion enthält, und Konto B bezieht sich auf das Konto, das die Amazon SQS-Warteschlange enthält.

Voraussetzungen

Wenn Sie das noch nicht installiert haben AWS Command Line Interface, folgen Sie den Anweisungen unter Installieren oder Aktualisieren der neuesten Version von AWS CLI, um es zu installieren.

Das Tutorial erfordert zum Ausführen von Befehlen ein Befehlszeilenterminal oder eine Shell. Verwenden Sie unter Linux und macOS Ihre bevorzugte Shell und Ihren bevorzugten Paketmanager.

Anmerkung

In Windows werden einige Bash-CLI-Befehle, die Sie häufig mit Lambda verwenden (z. B. zip), von den integrierten Terminals des Betriebssystems nicht unterstützt. Um eine Windows-integrated Version von Ubuntu und Bash zu erhalten, installieren Sie das Windows-Subsystem für Linux.

Erstellen der Ausführungsrolle (Konto A)

Erstellen Sie in Konto A eine Ausführungsrolle, die Ihrer Funktion die Erlaubnis gibt, auf die erforderlichen AWS Ressourcen zuzugreifen.

So erstellen Sie eine Ausführungsrolle
  1. Öffnen Sie die Seite „Rollen“ in der AWS Identity and Access Management (IAM-) Konsole.

  2. Wählen Sie Rolle erstellen aus.

  3. Erstellen Sie eine Rolle mit den folgenden Eigenschaften.

    • Vertrauenswürdige EntitätAWS Lambda.

    • BerechtigungenAWSLambdaSQSQueueExecutionRole

    • Role name (Name der Rollecross-account-lambda-sqs-role

Die AWSLambdaSQSQueueExecutionRole Richtlinie verfügt über die Berechtigungen, die die Funktion benötigt, um Elemente aus Amazon SQS zu lesen und Protokolle in Amazon CloudWatch Logs zu schreiben.

Erstellen Sie die Funktion (Account A)

Erstellen Sie in Konto A eine Lambda-Funktion, die Ihre Amazon SQS-Nachrichten verarbeitet. Die Lambda-Funktion und die Amazon-SQS-Warteschlange müssen sich in demselben AWS-Region befinden.

Das folgende Node.js Codebeispiel schreibt jede Nachricht in ein Protokoll in CloudWatch Logs.

Beispiel index.mjs
export const handler = async function(event, context) { event.Records.forEach(record => { const { body } = record; console.log(body); }); return {}; }
So erstellen Sie die Funktion
Anmerkung

Wenn Sie diese Schritte ausführen, wird eine Node.js Funktion erstellt. Für andere Sprachen sind die Schritte ähnlich, aber einige Details unterscheiden sich.

  1. Speichern Sie das Codebeispiel als Datei mit dem Namen index.mjs.

  2. Erstellen Sie ein Bereitstellungspaket.

    zip function.zip index.mjs
  3. Erstellen Sie die Funktion mit dem Befehl create-function AWS Command Line Interface (AWS CLI). Ersetzen Sie arn:aws:iam::111122223333:role/cross-account-lambda-sqs-role durch den ARN der Ausführungsrolle, die Sie zuvor erstellt haben.

    aws lambda create-function --function-name CrossAccountSQSExample \ --zip-file fileb://function.zip --handler index.handler --runtime nodejs24.x \ --role arn:aws:iam::111122223333:role/cross-account-lambda-sqs-role

Testen Sie die Funktion (Konto A)

Testen Sie in Konto A Ihre Lambda-Funktion manuell mithilfe des invoke AWS CLI Befehls und eines Amazon SQS-Beispielereignisses.

Wenn der Handler normal und ohne Ausnahmen zurückkehrt, betrachtet Lambda die Nachricht als erfolgreich verarbeitet und beginnt mit dem Lesen neuer Nachrichten in der Warteschlange. Nach erfolgreicher Verarbeitung einer Nachricht löscht Lambda diese automatisch aus der Warteschlange. Wenn der Handler eine Ausnahme auslöst, betrachtet Lambda den Nachrichten-Batch als nicht erfolgreich verarbeitet und Lambda ruft die Funktion mit demselben Nachrichten-Batch auf.

  1. Speichern Sie die folgende JSON als Datei mit dem Namen input.txt.

    { "Records": [ { "messageId": "059f36b4-87a3-44ab-83d2-661975830a7d", "receiptHandle": "AQEBwJnKyrHigUMZj6rYigCgxlaS3SLy0a...", "body": "test", "attributes": { "ApproximateReceiveCount": "1", "SentTimestamp": "1545082649183", "SenderId": "AIDAIENQZJOLO23YVJ4VO", "ApproximateFirstReceiveTimestamp": "1545082649185" }, "messageAttributes": {}, "md5OfBody": "098f6bcd4621d373cade4e832627b4f6", "eventSource": "aws:sqs", "eventSourceARN": "arn:aws:sqs:us-east-1:111122223333:example-queue", "awsRegion": "us-east-1" } ] }

    Das vorangehende JSON simuliert ein Ereignis, das Amazon SQS an Ihre Lambda-Funktion senden könnte, wobei "body" die tatsächliche Nachricht aus der Warteschlange enthält.

  2. Führen Sie den Befehl invoke AWS CLI aus.

    aws lambda invoke --function-name CrossAccountSQSExample \ --cli-binary-format raw-in-base64-out \ --payload file://input.txt outputfile.txt

    Die cli-binary-format Option ist erforderlich, wenn Sie AWS CLI Version 2 verwenden. 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 Von AWS CLI unterstützte globale Befehlszeilenoptionen im AWS Command Line Interface -Benutzerhandbuch für Version 2.

  3. Überprüfen Sie die Ausgabe in der Datei outputfile.txt.

Erstellen einer Amazon SQS-Warteschlange (Konto B)

Erstellen Sie in Konto B eine Amazon SQS-Warteschlange, die die Lambda-Funktion in Konto A als Ereignisquelle verwenden kann. Die Lambda-Funktion und die Amazon-SQS-Warteschlange müssen sich in demselben AWS-Region befinden.

So erstellen Sie eine Warteschlange
  1. Öffnen Sie die Amazon-SQS-Konsole.

  2. Wählen Sie Create queue (Warteschlange erstellen) aus.

  3. Erstellen Sie eine Warteschlange mit den folgenden Eigenschaften.

    • TypStandard

    • Name (Name – LambdaCrossAccountQueue

    • Konfiguration – Behalten Sie die Standardeinstellungen bei.

    • Zugriffsrichtlinie – Wählen Sie Advanced (Erweitert). Fügen Sie die folgende JSON-Richtlinie ein. Ersetzen Sie die folgenden Werte:

      • 111122223333: AWS-Konto ID für Konto A

      • 444455556666: AWS-Konto ID für Konto B

      JSON
      { "Version":"2012-10-17", "Id": "Queue1_Policy_UUID", "Statement": [ { "Sid": "Queue1_AllActions", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::111122223333:role/cross-account-lambda-sqs-role" ] }, "Action": "sqs:*", "Resource": "arn:aws:sqs:us-east-1:444455556666:LambdaCrossAccountQueue" } ] }

      Diese Richtlinie gewährt der Lambda-Ausführungsrolle in Konto A Berechtigungen zur Nutzung von Nachrichten aus dieser Amazon-SQS-Warteschlange.

  4. Zeichnen Sie nach dem Erstellen der Warteschlange ihren Amazon-Ressourcennamen (ARN) auf. Sie benötigen ihn im nächsten Schritt, um die Warteschlange Ihrer Lambda-Funktion zuzuordnen.

Konfigurieren Sie die Ereignisquelle (Konto A)

Erstellen Sie in Konto A eine Zuordnung der Ereignisquelle zwischen der Amazon SQS-Warteschlange in Konto B und Ihrer Lambda-Funktion, indem Sie den folgenden create-event-source-mapping AWS CLI Befehl ausführen. Ersetzen Sie arn:aws:sqs:us-east-1:444455556666:LambdaCrossAccountQueue durch den ARN der Amazon-SQS-Warteschlange, die Sie im vorherigen Schritt erstellt haben.

aws lambda create-event-source-mapping --function-name CrossAccountSQSExample --batch-size 10 \ --event-source-arn arn:aws:sqs:us-east-1:444455556666:LambdaCrossAccountQueue

Führen Sie den folgenden Befehl aus, um eine Liste Ihrer Ereignisquellen-Zuweisung abzurufen.

aws lambda list-event-source-mappings --function-name CrossAccountSQSExample \ --event-source-arn arn:aws:sqs:us-east-1:444455556666:LambdaCrossAccountQueue

Testen der Einrichtung

Sie können die Einrichtung nun wie folgt testen:

  1. In Konto B öffnen Sie die Amazon-SQS-Konsole.

  2. Wählen Sie LambdaCrossAccountQueue, was Sie zuvor erstellt haben.

  3. Wählen Sie Nachrichten senden und empfangen.

  4. Geben Sie unter Nachrichtentext eine Testnachricht ein.

  5. Klicken Sie auf Send Message (Nachricht senden).

Ihre Lambda-FunktionKonto Asollte die Nachricht erhalten. Lambda fragt die Warteschlange weiterhin nach Updates ab. Wenn eine neue Nachricht vorliegt, ruft Lambda Ihre Funktion mit diesen neuen Ereignisdaten aus der Warteschlange auf. Ihre Funktion wird ausgeführt und erstellt Protokolle in Amazon CloudWatch. Sie können die Protokolle in der CloudWatch -Konsole ansehen.

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, vermeiden Sie unnötige Gebühren für Ihre AWS-Konto.

In :Konto ABereinigen Sie Ihre Ausführungsrolle und Lambda-Funktion.

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 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 confirm in das Texteingabefeld ein und wählen Sie Delete (Löschen) aus.

In :Konto BBereinigen Sie die Amazon SQS SQS-Warteschlange.

So löschen Sie die Amazon-SQS-Warteschlange
  1. Melden Sie sich bei der an AWS-Managementkonsole und öffnen Sie die Amazon SQS-Konsole unter https://console.aws.amazon.com/sqs/.

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

  3. Wählen Sie Löschen aus.

  4. Geben Sie confirm in das Texteingabefeld ein.

  5. Wählen Sie Löschen aus.