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 von AWS Lambda mit Amazon Simple Notification Service
In diesem Tutorial wird eine Lambda-Funktion in einem AWS-Konto verwendet, um ein Amazon Simple Notification Service (Amazon SNS)-Thema in einem separaten AWS-Konto zu abonnieren. Wenn Sie Nachrichten zu Ihrem Amazon-SNS-Thema veröffentlichen, liest Ihre Lambda-Funktion den Inhalt der Nachricht und gibt ihn an Amazon CloudWatch Logs aus. Zum Abschließen dieses Tutorials wird die AWS Command Line Interface (AWS CLI) verwendet.
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 für das Amazon-SNS-Thema in Konto A und vergewissern Sie sich, dass die Lambda-Funktion in Konto B sie an CloudWatch Logs ausgibt.
Anhand dieser Schritte lernen Sie, wie Sie ein Amazon-SNS-Thema konfigurieren, um eine Lambda-Funktion aufzurufen. Außerdem lernen Sie, wie Sie eine AWS Identity and Access Management (IAM)-Richtlinie erstellen, die es einer Ressource in einem anderen AWS-Konto ermöglichen, Lambda aufzurufen.
In dem Tutorial werden zwei separate AWS-Konten verwendet. Die AWS CLI-Befehle veranschaulichen diese Vorgehensweise mithilfe von zwei benannten Profilen (accountA
und accountB
), die jeweils für die Verwendung mit einem anderen AWS-Konto konfiguriert sind. Wie Sie die AWS CLI für die Verwendung verschiedener Profile konfigurieren, erfahren Sie im AWS Command Line Interface-Benutzerhandbuch für Version 2 unter Einstellungen der Konfigurations- und Anmeldeinformationsdatei. Stellen Sie sicher, dass Sie für beide Profile die gleiche standardmäßige AWS-Region konfigurieren.
Wenn die AWS CLI-Profile, die Sie für die beiden AWS-Konten erstellen, unterschiedliche Namen haben oder Sie das Standardprofil und ein benanntes Profil verwenden, ändern Sie die AWS CLI-Befehle entsprechend.
Voraussetzungen
Wenn Sie kein AWS-Konto haben, führen Sie die folgenden Schritte zum Erstellen durch.
Anmeldung für ein AWS-Konto
Öffnen Sie https://portal.aws.amazon.com/billing/signup
. Folgen Sie den Online-Anweisungen.
Bei der Anmeldung müssen Sie auch einen Telefonanruf entgegennehmen und einen Verifizierungscode über die Telefontasten eingeben.
Wenn Sie sich für ein AWS-Konto anmelden, wird ein Root-Benutzer des AWS-Kontos erstellt. Der Root-Benutzer hat Zugriff auf alle AWS-Services und Ressourcen des Kontos. Als bewährte Sicherheitsmethode weisen Sie einem Administratorbenutzer Administratorzugriff zu und verwenden Sie nur den Root-Benutzer, um Aufgaben auszuführen, die Root-Benutzerzugriff erfordern.
AWS sendet Ihnen eine Bestätigungs-E-Mail, sobald die Anmeldung abgeschlossen ist. Sie können jederzeit Ihre aktuelle Kontoaktivität anzeigen und Ihr Konto verwalten. Rufen Sie dazu https://aws.amazon.com/
Nachdem Sie sich für ein AWS-Kontoangemeldet haben, sichern Sie Ihr Root-Benutzer des AWS-Kontos, aktivieren Sie AWS IAM Identity Centerund erstellen Sie einen administrativen Benutzer, damit Sie nicht den Root-Benutzer für alltägliche Aufgaben verwenden.
Schützen Ihres Root-Benutzer des AWS-Kontos
-
Melden Sie sich bei AWS Management Console
als Kontobesitzer an, indem Sie Stammbenutzer auswählen und Ihre AWS-Konto-E-Mail-Adresse eingeben. Geben Sie auf der nächsten Seite Ihr Passwort ein. Hilfe bei der Anmeldung mit dem Root-Benutzer finden Sie unter Anmelden als Root-Benutzer im AWS-Anmeldung Benutzerhandbuch zu.
-
Aktivieren Sie die Multi-Faktor-Authentifizierung (MFA) für den Root-Benutzer.
Anweisungen dazu finden Sie unter Aktivieren eines virtuellen MFA-Geräts für den Root-Benutzer Ihres AWS-Konto (Konsole) im IAM-Benutzerhandbuch.
Erstellen eines Benutzers mit Administratorzugriff
-
Aktivieren Sie das IAM Identity Center.
Anweisungen finden Sie unter Aktivieren AWS IAM Identity Center im AWS IAM Identity Center Benutzerhandbuch.
-
Gewähren Sie einem Administratorbenutzer im IAM Identity Center Benutzerzugriff.
Ein Tutorial zur Verwendung von IAM-Identity-Center-Verzeichnis als Identitätsquelle finden Sie unter Konfigurieren des Benutzerzugriffs mit der Standard-IAM-Identity-Center-Verzeichnis im AWS IAM Identity Center-Benutzerhandbuch.
Anmelden als Administratorbenutzer
-
Um sich mit Ihrem IAM-Identity-Center-Benutzer anzumelden, verwenden Sie die Anmelde-URL, die an Ihre E-Mail-Adresse gesendet wurde, als Sie den IAM-Identity-Center-Benutzer erstellt haben.
Hilfe bei der Anmeldung mit einem IAM-Identity-Center-Benutzer finden Sie unter Anmelden beim AWS-Zugangsportal im AWS-Anmeldung Benutzerhandbuch zu.
Weiteren Benutzern Zugriff zuweisen
-
Erstellen Sie im IAM-Identity-Center einen Berechtigungssatz, der den bewährten Vorgehensweisen für die Anwendung von geringsten Berechtigungen folgt.
Anweisungen hierzu finden Sie unter Berechtigungssatz erstellen im AWS IAM Identity Center Benutzerhandbuch.
-
Weisen Sie Benutzer einer Gruppe zu und weisen Sie der Gruppe dann Single Sign-On-Zugriff zu.
Eine genaue Anleitung finden Sie unter Gruppen hinzufügen im AWS IAM Identity Center Benutzerhandbuch.
Wenn Sie die AWS Command Line Interface noch nicht installiert haben, folgen Sie den Schritten unter Installieren oder Aktualisieren der neuesten Version von AWS CLI, um diese 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 in Windows integrierte 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 accountA
Die 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 im weiteren Verlauf des Tutorials, wenn Sie Ihrer Lambda-Funktion Berechtigungen zum Abonnieren des Themas hinzufügen.
Erstellen einer Funktionsausführungsrolle (Konto B)
Eine Ausführungsrolle ist eine IAM-Rolle, die einer Lambda-Funktion Zugriffsberechtigungen für AWS-Services und für Ressourcen erteilt. Erstellen Sie vor der Erstellung Ihrer Funktion in Konto B zunächst eine Rolle, die der Funktion grundlegende Berechtigungen zum Schreiben von Protokollen in CloudWatch Logs erteilt. Die Berechtigungen zum Lesen aus Ihrem Amazon-SNS-Thema werden in einem späteren Schritt hinzugefügt.
So erstellen Sie eine Ausführungsrolle
-
Öffnen Sie in Konto B die Seite Rollen
in der IAM-Konsole. -
Wählen Sie Rolle erstellen.
-
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.
-
Fügen Sie der Rolle wie folgt eine Richtlinie mit grundlegenden Berechtigungen hinzu:
-
Geben Sie im Suchfeld Berechtigungsrichtlinien die Zeichenfolge
AWSLambdaBasicExecutionRole
ein. -
Wählen Sie Weiter.
-
-
Schließen Sie die Rollenerstellung ab:
-
Geben Sie unter Rollendetails im Feld Rollenname den Namen
lambda-sns-role
ein. -
Wählen Sie Rolle erstellen.
-
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.
In diesem Tutorial wird die Node.js 18.x-Laufzeit verwendet. Es stehen aber auch Beispielcodes für andere Laufzeitensprachen zur Verfügung. 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 werden, ist im ersten Beispiel auf der Registerkarte JavaScript zu sehen.
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 nodejs18.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": "nodejs18.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 im weiteren Verlauf des Tutorials, wenn Sie Berechtigungen hinzufügen, um Amazon SNS das Aufrufen Ihrer Funktion zu ermöglichen.
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. Verwenden Sie den AWS CLI-Befehl add-permission
, um die entsprechende Anweisung hinzuzufügen.
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 zuvor notierten ARN für Ihr Amazon-SNS-Thema.
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 einer Opt-in-AWS-Region gehostet wird, müssen Sie die Region im Prinzipal 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. Diese Berechtigung kann mithilfe des AWS CLI-Befehls add-permission
erteilt werden.
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 \ --region
us-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)
Ihre Lambda-Funktion in Konto B hat nun Ihr Amazon-SNS-Thema in Konto A abonniert und Sie können Ihr Setup testen, indem Sie Nachrichten für das Thema veröffentlichen. Um sich zu vergewissern, dass Amazon SNS Ihre Lambda-Funktion ordnungsgemäß aufgerufen hat, verwenden Sie CloudWatch Logs, um sich die Ausgabe Ihrer Funktion anzusehen.
Veröffentlichen einer Nachricht für Ihr Thema und Anzeigen der Ausgabe Ihrer Funktion
-
Geben Sie
Hello World
in eine Textdatei ein und speichern Sie sie alsmessage.txt
. -
Führen Sie in dem Verzeichnis, in dem Sie Ihre Textdatei gespeichert haben, den folgenden AWS CLI-Befehl in Konto A aus und verwenden Sie dabei 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 eindeutige Nachrichten-ID zurückgegeben, die angibt, dass Amazon SNS die Nachricht akzeptiert hat. Anschließend versucht Amazon SNS, die Nachricht den Abonnenten des Themas zuzustellen. Verwenden Sie CloudWatch Logs, um sich die Ausgabe Ihrer Funktion anzusehen und sich zu vergewissern, dass Amazon SNS Ihre Lambda-Funktion ordnungsgemäß aufgerufen hat:
-
Öffnen Sie in Konto B die Seite Protokollgruppen
der Amazon-CloudWatch-Konsole. -
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, sieht die Ausgabe in etwa wie folgt aus und enthält die Inhalte der Nachricht, die Sie für Ihr 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. 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-Konto anfallen.
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.
-
Geben Sie
delete me
in das Texteingabefeld ein. -
Wählen Sie Löschen.
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.
-
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.
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.