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 AWS-Konto konsumiert. Dieses Tutorial beinhaltet zweiAWSKonten:Konto Abezieht sich auf das Konto, das Ihre Lambda-Funktion enthält, undKonto Bbezieht sich auf das Konto, das die Amazon SQS SQS-Warteschlange enthält.

Voraussetzungen

In diesem Tutorial wird davon ausgegangen, dass Sie über Kenntnisse zu den grundlegenden Lambda-Operationen und der Lambda-Konsole verfügen. Sofern noch nicht geschehen, befolgen Sie die Anweisungen unter Erstellen einer Lambda-Funktion mit der Konsole, um Ihre erste Lambda-Funktion zu erstellen.

Um die folgenden Schritte durchzuführen, benötigen Sie die AWS Command Line Interface (AWS CLI) Version 2. Befehle und die erwartete Ausgabe werden in separaten Blöcken aufgeführt:

aws --version

Die Ausgabe sollte folgendermaßen aussehen:

aws-cli/2.13.27 Python/3.11.6 Linux/4.14.328-248.540.amzn2.x86_64 exe/x86_64.amzn.2

Bei langen Befehlen wird ein Escape-Zeichen (\) wird verwendet, um einen Befehl über mehrere Zeilen zu teilen.

Verwenden Sie auf Linux und macOS Ihren bevorzugten Shell- und Paket-Manager.

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 in Windows integrierte Version von Ubuntu und Bash zu erhalten, installieren Sie das Windows-Subsystem für Linux. Die CLI-Beispielbefehle in diesem Handbuch verwenden die Linux-Formatierung. Befehle, die Inline-JSON-Dokumente enthalten, müssen neu formatiert werden, wenn Sie die Windows-CLI verwenden.

Erstellen der Ausführungsrolle (Konto A)

Erstellen Sie in Konto A eine Ausführungsrolle, die Ihrer Funktion die Berechtigung zum Zugriff auf die erforderlichen AWS Ressourcen gibt.

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

  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 zum Lesen von Elementen aus Amazon SQS und zum Schreiben von Protokollen in Amazon CloudWatch Logs benötigt.

Erstellen Sie die Funktion (Account A)

Erstellen Sie in Konto A eine Lambda-Funktion, die Ihre Amazon SQS-Nachrichten verarbeitet. Das folgende Codebeispiel für Node.js 18 schreibt jede Nachricht in ein Protokoll in CloudWatch Logs.

Anmerkung

Codebeispiele in anderen Sprachen finden Sie unter Beispiel-Amazon-SQS-Funktionscode.

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

Mit diesen Schritten wird eine Funktion in Node.js 18 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).

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

Testen Sie die Funktion (Konto A)

Testen Sie in Konto A Ihre Lambda-Funktion manuell mit dem Befehl invoke AWS CLI und einem Amazon SQS-Beispielereignis.

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 folgenden invoke-AWS CLI-Befehl 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.

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

    • NameLambdaCrossAccountQueue

    • Konfiguration – Behalten Sie die Standardeinstellungen bei.

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

      { "Version": "2012-10-17", "Id": "Queue1_Policy_UUID", "Statement": [{ "Sid":"Queue1_AllActions", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::<AccountA_ID>:role/cross-account-lambda-sqs-role" ] }, "Action": "sqs:*", "Resource": "arn:aws:sqs:us-east-1:<AccountB_ID>: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 ein Ereignisquellen-Mapping 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.

aws lambda create-event-source-mapping --function-name CrossAccountSQSExample --batch-size 10 \ --event-source-arn arn:aws:sqs:us-east-1:<AccountB_ID>: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:<AccountB_ID>: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, das 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 wird die Warteschlange weiterhin nach Updates abfragen. Wenn eine neue Nachricht vorliegt, ruft Lambda Ihre Funktion mit diesen neuen Ereignisdaten aus der Warteschlange auf. Ihre Funktion führt aus 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, können Sie verhindern, dass unnötige Gebühren in Ihrem AWS-Konto anfallen.

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 delete 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 AWS Management Console an 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.