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 AWS Lambda mit Amazon Simple Notification Service
In diesem Tutorial verwenden Sie eine Lambda-Funktion in einem, AWS-Konto um ein separates Thema zu Amazon Simple Notification Service (Amazon SNS) zu abonnieren. AWS-Konto Wenn Sie Nachrichten zu Ihrem Amazon SNS-Thema veröffentlichen, liest Ihre Lambda-Funktion den Inhalt der Nachricht und gibt ihn in Amazon Logs aus. CloudWatch Um dieses Tutorial abzuschließen, verwenden Sie die AWS Command Line Interface ()AWS CLI.
Gehen Sie für dieses Tutorial wie folgt vor:
-
Erstellen Sie in Konto A ein Amazon-SNS-Thema.
-
Erstellen Sie in Konto B eine Lambda-Funktion, die Nachrichten aus dem Thema liest.
-
Erstellen Sie in Konto B ein Abonnement für das Thema.
-
Veröffentlichen Sie Nachrichten zum Amazon SNS-Thema in Konto A und vergewissern Sie sich, dass die Lambda-Funktion in Konto B sie in Logs ausgibt. CloudWatch
Wenn Sie diese Schritte ausführen, erfahren Sie, wie Sie ein Amazon SNS-Thema so konfigurieren, dass eine Lambda-Funktion aufgerufen wird. Sie erfahren auch, wie Sie eine AWS Identity and Access Management (IAM-) Richtlinie erstellen, die einer Ressource in einer anderen AWS-Konto die Erlaubnis erteilt, Lambda aufzurufen.
In dem Tutorial werden zwei separate AWS-Konten verwendet. Die AWS CLI Befehle veranschaulichen dies anhand von zwei benannten Profilen namens accountA undaccountB, von denen jedes für die Verwendung mit einem anderen konfiguriert ist. AWS-Konto Informationen zur Konfiguration für die AWS CLI Verwendung verschiedener Profile finden Sie unter Konfiguration und Einstellungen der Anmeldeinformationsdatei im AWS Command Line Interface Benutzerhandbuch für Version 2. Achten Sie darauf, AWS-Region für beide Profile den gleichen Standard zu konfigurieren.
Wenn die AWS CLI Profile, die Sie für die beiden erstellen, unterschiedliche Namen AWS-Konten verwenden oder wenn Sie das Standardprofil und ein benanntes Profil verwenden, ändern Sie die AWS CLI Befehle in den folgenden Schritten nach Bedarf.
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 eines Amazon-SNS-Themas (Konto A)
So erstellen Sie das -Thema
-
Erstellen Sie in Konto A mithilfe des folgenden AWS CLI Befehls ein Amazon SNS-Standardthema.
aws sns create-topic --name sns-topic-for-lambda --profile accountADie Ausgabe sollte in etwa wie folgt aussehen:
{ "TopicArn": "arn:aws:sns:us-west-2:123456789012:sns-topic-for-lambda" }Notieren Sie sich den Amazon-Ressourcennamen (ARN) Ihres Themas. Sie benötigen ihn später im Tutorial, wenn Sie Ihrer Lambda-Funktion Berechtigungen hinzufügen, um das Thema zu abonnieren.
Erstellen einer Funktionsausführungsrolle (Konto B)
Eine Ausführungsrolle ist eine IAM-Rolle, die einer Lambda-Funktion Zugriffs AWS-Services - und Ressourcenberechtigungen erteilt. Bevor Sie Ihre Funktion in Konto B erstellen, erstellen Sie eine Rolle, die der Funktion grundlegende Berechtigungen zum Schreiben von Protokollen in Logs erteilt. CloudWatch In einem späteren Schritt fügen wir die Berechtigungen zum Lesen aus Ihrem Amazon SNS-Thema hinzu.
So erstellen Sie eine Ausführungsrolle
-
Öffnen Sie in Konto B die Seite Rollen
in der IAM-Konsole. -
Wählen Sie Rolle erstellen aus.
-
Wählen Sie unter Vertrauenswürdiger Entitätstyp die Option AWS -Service aus.
-
Wählen Sie unter Anwendungsfall die Option Lambda aus.
-
Wählen Sie Weiter aus.
-
Fügen Sie der Rolle wie folgt eine Richtlinie mit grundlegenden Berechtigungen hinzu:
-
Geben Sie im Suchfeld Berechtigungsrichtlinien die Zeichenfolge
AWSLambdaBasicExecutionRoleein. -
Wählen Sie Weiter aus.
-
-
Schließen Sie die Rollenerstellung ab:
-
Geben Sie unter Rollendetails im Feld Rollenname den Namen
lambda-sns-roleein. -
Wählen Sie Rolle erstellen aus.
-
Erstellen einer Lambda-Funktion (Konto B)
Erstellen Sie eine Lambda-Funktion, die Ihre Amazon-SNS-Nachrichten verarbeitet. Der Funktionscode protokolliert den Nachrichteninhalt jedes Datensatzes in Amazon CloudWatch Logs.
Dieses Tutorial verwendet die Node.js 24-Laufzeit, aber wir haben auch Beispielcode in anderen Runtime-Sprachen bereitgestellt. Sie können die Registerkarte im folgenden Feld auswählen, um Code für die gewünschte Laufzeit anzusehen. Der JavaScript Code, den Sie in diesem Schritt verwenden, befindet sich im ersten Beispiel, das auf der JavaScript Registerkarte angezeigt wird.
So erstellen Sie die Funktion
-
Erstellen Sie ein Verzeichnis für das Projekt und wechseln Sie dann zu diesem Verzeichnis.
mkdir sns-tutorial cd sns-tutorial -
Kopieren Sie den JavaScript Beispielcode in eine neue Datei mit dem Namen
index.js. -
Erstellen Sie ein Bereitstellungspaket mit dem folgenden
zip-Befehl.zip function.zip index.js -
Führen Sie den folgenden AWS CLI Befehl aus, um Ihre Lambda-Funktion in Konto B zu erstellen.
aws lambda create-function --function-name Function-With-SNS \ --zip-file fileb://function.zip --handler index.handler --runtime nodejs24.x \ --role arn:aws:iam::<AccountB_ID>:role/lambda-sns-role \ --timeout 60 --profile accountBDie Ausgabe sollte in etwa wie folgt aussehen:
{ "FunctionName": "Function-With-SNS", "FunctionArn": "arn:aws:lambda:us-west-2:123456789012:function:Function-With-SNS", "Runtime": "nodejs24.x", "Role": "arn:aws:iam::123456789012:role/lambda_basic_role", "Handler": "index.handler", ... "RuntimeVersionConfig": { "RuntimeVersionArn": "arn:aws:lambda:us-west-2::runtime:7d5f06b69c951da8a48b926ce280a9daf2e8bb1a74fc4a2672580c787d608206" } } -
Notieren Sie sich den Amazon-Ressourcennamen (ARN) Ihrer Funktion. Sie benötigen ihn später im Tutorial, wenn Sie Berechtigungen hinzufügen, damit Amazon SNS Ihre Funktion aufrufen kann.
Hinzufügen von Berechtigungen zur Funktion (Konto B)
Damit Amazon SNS Ihre Funktion aufrufen kann, muss die dafür notwendige Berechtigung in einer Anweisung einer ressourcenbasierten Richtlinie erteilt werden. Sie fügen diese Anweisung mit dem AWS CLI add-permission Befehl hinzu.
Erteilen der Berechtigung zum Aufrufen Ihrer Funktion durch Amazon SNS
-
Führen Sie in Konto B den folgenden AWS CLI Befehl aus und verwenden Sie dabei den ARN für Ihr Amazon SNS-Thema, das Sie zuvor aufgezeichnet haben.
aws lambda add-permission --function-name Function-With-SNS \ --source-arn arn:aws:sns:us-east-1:<AccountA_ID>:sns-topic-for-lambda \ --statement-id function-with-sns --action "lambda:InvokeFunction" \ --principal sns.amazonaws.com --profile accountBDie Ausgabe sollte in etwa wie folgt aussehen:
{ "Statement": "{\"Condition\":{\"ArnLike\":{\"AWS:SourceArn\": \"arn:aws:sns:us-east-1:<AccountA_ID>:sns-topic-for-lambda\"}}, \"Action\":[\"lambda:InvokeFunction\"], \"Resource\":\"arn:aws:lambda:us-east-1:<AccountB_ID>:function:Function-With-SNS\", \"Effect\":\"Allow\",\"Principal\":{\"Service\":\"sns.amazonaws.com\"}, \"Sid\":\"function-with-sns\"}" }
Anmerkung
Wenn das Konto mit dem Amazon SNS-Thema in einem Opt-In gehostet wird AWS-Region, müssen Sie die Region im Principal angeben. Wenn Sie beispielsweise mit einem Amazon-SNS-Thema in der Region Asien-Pazifik (Hongkong) arbeiten, muss für den Prinzipal sns.ap-east-1.amazonaws.com anstelle von sns.amazonaws.com angegeben werden.
Erteilen einer kontoübergreifenden Berechtigung für das Amazon-SNS-Abonnement (Konto A)
Damit Ihre Lambda-Funktion in Konto B das Amazon-SNS-Thema abonnieren kann, das Sie in Konto A erstellt haben, müssen Sie Konto B die Berechtigung zum Abonnieren Ihres Themas erteilen. Sie gewähren diese Berechtigung mit dem AWS CLI add-permission Befehl.
Erteilen der Berechtigung zum Abonnieren des Themas durch Konto B
-
Führen Sie in Konto A den folgenden AWS CLI Befehl aus. Verwenden Sie den ARN für das Amazon-SNS-Thema, den Sie sich zuvor notiert haben.
aws sns add-permission --label lambda-access --aws-account-id<AccountB_ID>\ --topic-arn arn:aws:sns:us-east-1:<AccountA_ID>:sns-topic-for-lambda \ --action-name Subscribe ListSubscriptionsByTopic --profile accountA
Erstellen eines Abonnements (Konto B)
In Konto B abonnieren Sie nun für Ihre Lambda-Funktion das Amazon-SNS-Thema, das Sie zu Beginn des Tutorials in Konto A erstellt haben. Wenn eine Nachricht an dieses Thema (sns-topic-for-lambda) gesendet wird, ruft Amazon SNS Ihre Lambda-Funktion Function-With-SNS in Konto B auf.
Erstellen eines Abonnements
-
Führen Sie in Konto B den folgenden AWS CLI Befehl aus. Verwenden Sie Ihre Standardregion, in der Sie Ihr Thema erstellt haben, sowie die ARNs für Ihr Thema und Ihre Lambda-Funktion.
aws sns subscribe --protocol lambda \ --regionus-east-1\ --topic-arn arn:aws:sns:us-east-1:<AccountA_ID>:sns-topic-for-lambda \ --notification-endpoint arn:aws:lambda:us-east-1:<AccountB_ID>:function:Function-With-SNS \ --profile accountBDie Ausgabe sollte in etwa wie folgt aussehen:
{ "SubscriptionArn": "arn:aws:sns:us-east-1:<AccountA_ID>:sns-topic-for-lambda:5d906xxxx-7c8x-45dx-a9dx-0484e31c98xx" }
Veröffentlichen von Nachrichten für das Thema (Konto A und Konto B)
Jetzt, da Ihre Lambda-Funktion in Konto B Ihr Amazon SNS-Thema in Konto A abonniert hat, ist es an der Zeit, Ihre Einrichtung zu testen, indem Sie Nachrichten zu Ihrem Thema veröffentlichen. Um zu bestätigen, dass Amazon SNS Ihre Lambda-Funktion aufgerufen hat, verwenden Sie CloudWatch Logs, um die Ausgabe Ihrer Funktion anzuzeigen.
Veröffentlichen einer Nachricht für Ihr Thema und Anzeigen der Ausgabe Ihrer Funktion
-
Geben Sie
Hello Worldin eine Textdatei ein und speichern Sie sie alsmessage.txt. -
Führen Sie in demselben Verzeichnis, in dem Sie Ihre Textdatei gespeichert haben, den folgenden AWS CLI Befehl in Konto A aus. Verwenden Sie den ARN für Ihr eigenes Thema.
aws sns publish --message file://message.txt --subject Test \ --topic-arn arn:aws:sns:us-east-1:<AccountA_ID>:sns-topic-for-lambda \ --profile accountADadurch wird eine Nachrichten-ID mit einer eindeutigen Kennung zurückgegeben, die angibt, dass Amazon SNS die Nachricht akzeptiert hat. Amazon SNS versucht dann, die Nachricht an die Abonnenten des Themas zu übermitteln. Um zu bestätigen, dass Amazon SNS Ihre Lambda-Funktion aufgerufen hat, verwenden Sie CloudWatch Logs, um die Ausgabe Ihrer Funktion anzuzeigen:
-
Öffnen Sie in Konto B die Seite
Log-Gruppen der Amazon-Konsole. CloudWatch -
Wählen Sie die Protokollgruppe für Ihre Funktion (
/aws/lambda/Function-With-SNS) aus. -
Wählen Sie den neuesten Protokollstreams aus.
-
Wenn Ihre Funktion korrekt aufgerufen wurde, wird eine Ausgabe ähnlich der folgenden angezeigt, die den Inhalt der Nachricht zeigt, die Sie zu Ihrem Thema veröffentlicht haben.
2023-07-31T21:42:51.250Z c1cba6b8-ade9-4380-aa32-d1a225da0e48 INFO Processed message Hello World 2023-07-31T21:42:51.250Z c1cba6b8-ade9-4380-aa32-d1a225da0e48 INFO done
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. Indem du AWS Ressourcen löschst, die du nicht mehr verwendest, vermeidest du unnötige Kosten für deine AWS-Konto.
Bereinigen Sie über Konto A Ihr Amazon-SNS-Thema.
So löschen Sie das Amazon-SNS-Thema
-
Öffnen Sie die Seite Themen
der Amazon-SNS-Konsole. -
Wählen Sie das Thema aus, das Sie gerade erstellt haben.
-
Wählen Sie Löschen aus.
-
Geben Sie
delete mein das Texteingabefeld ein. -
Wählen Sie Löschen aus.
Bereinigen Sie über Konto B Ihre Ausführungsrolle, die Lambda-Funktion und das Amazon-SNS-Abonnement.
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
confirmin das Texteingabefeld ein und wählen Sie Delete (Löschen) aus.
So löschen Sie das Amazon-SNS-Abonnement
-
Öffnen Sie die Seite Abonnements
der Amazon-SNS-Konsole. -
Wählen Sie das von Ihnen erstellte Abonnement aus.
-
Wählen Sie Löschen, Löschen aus.