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 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
Erstellen der Ausführungsrolle (Konto A)
Erstellen Sie in Konto A eine Ausführungsrolle, die Ihrer Funktion die Erlaubnis erteilt, auf die erforderlichen AWS Ressourcen zuzugreifen.
So erstellen Sie eine Ausführungsrolle
-
Öffnen Sie die Seite Rollen
in der AWS Identity and Access Management (IAM-) Konsole. -
Wählen Sie Rolle erstellen aus.
-
Erstellen Sie eine Rolle mit den folgenden Eigenschaften.
-
Vertrauenswürdige Entität – AWS Lambda.
-
Berechtigungen — AWSLambdaSQSQueueExecutionRole
-
Role name (Name der Rolle –
cross-account-lambda-sqs-role
-
Die AWSLambdaSQSQueueExecutionRoleRichtlinie 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.
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.
-
Speichern Sie das Codebeispiel als Datei mit dem Namen
index.mjs
. -
Erstellen Sie ein Bereitstellungspaket.
zip function.zip index.mjs
-
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 mithilfe des invoke
AWS CLI
Befehls und eines Amazon SQS 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.
-
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. -
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. -
Ü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
-
Öffnen Sie die Amazon-SQS-Konsole
. -
Wählen Sie Create queue (Warteschlange erstellen) aus.
-
Erstellen Sie eine Warteschlange mit den folgenden Eigenschaften.
-
Typ – Standard
-
Name — LambdaCrossAccountQueue
-
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.
-
-
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 Ereignisquellenzuordnung zwischen der Amazon SQS 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:
-
In Konto B öffnen Sie die Amazon-SQS-Konsole
. -
Wählen Sie LambdaCrossAccountQueue, was Sie zuvor erstellt haben.
-
Wählen Sie Nachrichten senden und empfangen.
-
Geben Sie unter Nachrichtentext eine Testnachricht ein.
-
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 wird in Amazon ausgeführt und erstellt Protokolle CloudWatch. Sie können die Protokolle in der CloudWatch Konsole
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 Kosten für Ihre AWS-Konto.
In :Konto ABereinigen Sie Ihre Ausführungsrolle und Lambda-Funktion.
So löschen Sie die Ausführungsrolle
-
Öffnen Sie die Seite Roles
in der IAM-Konsole. -
Wählen Sie die von Ihnen erstellte Ausführungsrolle aus.
-
Wählen Sie Löschen aus.
-
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:
-
Öffnen Sie die Seite Funktionen
der Lambda-Konsole. -
Wählen Sie die Funktion aus, die Sie erstellt haben.
-
Wählen Sie Aktionen, Löschen aus.
-
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
-
Melden Sie sich bei der Amazon SQS SQS-Konsole an AWS Management Console und öffnen Sie sie unter https://console.aws.amazon.com/sqs/
. -
Wählen Sie die Warteschlange aus, die Sie erstellt haben.
-
Wählen Sie Löschen aus.
-
Geben Sie
confirm
in das Texteingabefeld ein. -
Wählen Sie Löschen.