Tutorial: Verwendung AWS Lambda mit Amazon Simple Notification Service - 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: Verwendung AWS Lambda mit Amazon Simple Notification Service

In diesem Tutorial verwenden Sie eine Lambda-Funktion in einer, AWS-Konto um ein Amazon Simple Notification Service (AmazonSNS) -Thema in einem separaten AWS-Konto zu abonnieren. Wenn Sie Nachrichten zu Ihrem SNS Amazon-Thema veröffentlichen, liest Ihre Lambda-Funktion den Inhalt der Nachricht und gibt ihn in Amazon CloudWatch Logs aus. Um dieses Tutorial abzuschließen, verwenden Sie die AWS Command Line Interface (AWS CLI).

Ein SNS Amazon-Thema, das mit einer Lambda-Funktion verbunden ist, die mit einer CloudWatch Logs-Protokollgruppe verbunden ist

Gehen Sie für dieses Tutorial wie folgt vor:

  • Erstellen Sie in Konto A ein SNS Amazon-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 SNS Amazon-Thema in Konto A und stellen Sie sicher, dass die Lambda-Funktion in Konto B sie in CloudWatch Logs ausgibt.

Wenn Sie diese Schritte ausführen, erfahren Sie, wie Sie ein SNS Amazon-Thema so konfigurieren, dass es eine Lambda-Funktion aufruft. Sie erfahren auch, wie Sie eine AWS Identity and Access Management (IAM) -Richtlinie erstellen, die einer Ressource in einer anderen die Erlaubnis erteilt, Lambda AWS-Konto aufzurufen.

In dem Tutorial werden zwei separate AWS-Konten verwendet. Die AWS CLI Befehle veranschaulichen dies anhand von zwei benannten Profilen mit Namen accountA undaccountB, die jeweils für die Verwendung mit einem anderen konfiguriert sind. AWS-Konto Informationen zur Konfiguration der AWS CLI Verwendung verschiedener Profile finden Sie unter Einstellungen für Konfiguration und Anmeldeinformationsdatei im AWS Command Line Interface Benutzerhandbuch für Version 2. Stellen Sie sicher, dass Sie AWS-Region für beide Profile dieselbe Standardeinstellung 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 noch keine haben AWS-Konto, führen Sie die folgenden Schritte aus, um eine zu erstellen.

Um sich für eine anzumelden AWS-Konto
  1. Öffnen Sie https://portal.aws.amazon.com/billing/die Anmeldung.

  2. 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 eine anmelden AWS-Konto, Root-Benutzer des AWS-Kontoswird eine 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 nach Abschluss des Anmeldevorgangs eine Bestätigungs-E-Mail. Du kannst jederzeit deine aktuellen Kontoaktivitäten einsehen und dein Konto verwalten, indem du zu https://aws.amazon.com/gehst und Mein Konto auswählst.

Nachdem Sie sich für einen angemeldet haben AWS-Konto, sichern Sie Ihren Root-Benutzer des AWS-Kontos AWS IAM Identity Center, aktivieren und erstellen Sie einen Administratorbenutzer, sodass Sie den Root-Benutzer nicht für alltägliche Aufgaben verwenden.

Sichern Sie Ihre Root-Benutzer des AWS-Kontos
  1. Melden Sie sich AWS Management Consoleals Kontoinhaber an, indem Sie Root-Benutzer 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.

  2. Aktivieren Sie die Multi-Faktor-Authentifizierung (MFA) für Ihren Root-Benutzer.

    Anweisungen finden Sie im Benutzerhandbuch unter Aktivieren eines virtuellen MFA Geräts für Ihren AWS-Konto IAM Root-Benutzer (Konsole).

Erstellen eines Benutzers mit Administratorzugriff
  1. Aktivieren Sie IAM Identity Center.

    Anweisungen finden Sie unter Aktivieren AWS IAM Identity Center im AWS IAM Identity Center Benutzerhandbuch.

  2. Gewähren Sie einem Benutzer in IAM Identity Center Administratorzugriff.

    Ein Tutorial zur Verwendung von IAM-Identity-Center-Verzeichnis als Identitätsquelle finden Sie unter Benutzerzugriff mit der Standardeinstellung konfigurieren IAM-Identity-Center-Verzeichnis im AWS IAM Identity Center Benutzerhandbuch.

Anmelden als Administratorbenutzer
Weiteren Benutzern Zugriff zuweisen
  1. Erstellen Sie in IAM Identity Center einen Berechtigungssatz, der der bewährten Methode zur Anwendung von Berechtigungen mit den geringsten Rechten folgt.

    Anweisungen hierzu finden Sie unter Berechtigungssatz erstellen im AWS IAM Identity Center Benutzerhandbuch.

  2. 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 das noch nicht installiert haben AWS Command Line Interface, folgen Sie den Schritten 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 CLI Bash-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.

Ein SNS Amazon-Thema erstellen (Konto A)

Erster Schritt: Erstellen Sie das SNS Amazon-Thema
So erstellen Sie das -Thema
  • Erstellen Sie in Konto A mit dem folgenden AWS CLI Befehl ein SNS Amazon-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)

Nächster Schritt: Erstellen Sie die Ausführungsrolle

Eine Ausführungsrolle ist eine IAM Rolle, die einer Lambda-Funktion die Erlaubnis erteilt, auf AWS Dienste und Ressourcen zuzugreifen. 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 SNS Amazon-Thema hinzu.

So erstellen Sie eine Ausführungsrolle
  1. Öffnen Sie in Konto B die Rollenseite in der IAM Konsole.

  2. Wählen Sie Rolle erstellen.

  3. Wählen Sie unter Vertrauenswürdiger Entitätstyp die Option AWS -Service aus.

  4. Wählen Sie unter Anwendungsfall die Option Lambda aus.

  5. Wählen Sie Weiter.

  6. Fügen Sie der Rolle wie folgt eine Richtlinie mit grundlegenden Berechtigungen hinzu:

    1. Geben Sie im Suchfeld Berechtigungsrichtlinien die Zeichenfolge AWSLambdaBasicExecutionRole ein.

    2. Wählen Sie Weiter.

  7. Schließen Sie die Rollenerstellung ab:

    1. Geben Sie unter Rollendetails im Feld Rollenname den Namen lambda-sns-role ein.

    2. Wählen Sie Rolle erstellen.

Erstellen einer Lambda-Funktion (Konto B)

Nächster Schritt: Erstellen Sie die Funktion

Erstellen Sie eine Lambda-Funktion, die Ihre SNS Amazon-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, befindet sich im ersten Beispiel, das auf der JavaScriptRegisterkarte angezeigt wird.

.NET
AWS SDK for .NET
Anmerkung

Es gibt noch mehr dazu GitHub. Das vollständige Beispiel sowie eine Anleitung zum Einrichten und Ausführen finden Sie im Repository mit Serverless-Beispielen.

Konsumieren eines SNS Ereignisses mit Lambda unter Verwendung. NET.

// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 using Amazon.Lambda.Core; using Amazon.Lambda.SNSEvents; // Assembly attribute to enable the Lambda function's JSON input to be converted into a .NET class. [assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.SystemTextJson.DefaultLambdaJsonSerializer))] namespace SnsIntegration; public class Function { public async Task FunctionHandler(SNSEvent evnt, ILambdaContext context) { foreach (var record in evnt.Records) { await ProcessRecordAsync(record, context); } context.Logger.LogInformation("done"); } private async Task ProcessRecordAsync(SNSEvent.SNSRecord record, ILambdaContext context) { try { context.Logger.LogInformation($"Processed record {record.Sns.Message}"); // TODO: Do interesting work based on the new message await Task.CompletedTask; } catch (Exception e) { //You can use Dead Letter Queue to handle failures. By configuring a Lambda DLQ. context.Logger.LogError($"An error occurred"); throw; } } }
Go
SDKfür Go V2
Anmerkung

Es gibt noch mehr dazu GitHub. Das vollständige Beispiel sowie eine Anleitung zum Einrichten und Ausführen finden Sie im Repository mit Serverless-Beispielen.

Ein SNS Ereignis mit Lambda mithilfe von Go konsumieren.

// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 package main import ( "context" "fmt" "github.com/aws/aws-lambda-go/events" "github.com/aws/aws-lambda-go/lambda" ) func handler(ctx context.Context, snsEvent events.SNSEvent) { for _, record := range snsEvent.Records { processMessage(record) } fmt.Println("done") } func processMessage(record events.SNSEventRecord) { message := record.SNS.Message fmt.Printf("Processed message: %s\n", message) // TODO: Process your record here } func main() { lambda.Start(handler) }
Java
SDKfür Java 2.x
Anmerkung

Es gibt noch mehr dazu. GitHub Das vollständige Beispiel sowie eine Anleitung zum Einrichten und Ausführen finden Sie im Repository mit Serverless-Beispielen.

Ein SNS Ereignis mit Lambda unter Verwendung von Java konsumieren.

// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 package example; import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.LambdaLogger; import com.amazonaws.services.lambda.runtime.RequestHandler; import com.amazonaws.services.lambda.runtime.events.SNSEvent; import com.amazonaws.services.lambda.runtime.events.SNSEvent.SNSRecord; import java.util.Iterator; import java.util.List; public class SNSEventHandler implements RequestHandler<SNSEvent, Boolean> { LambdaLogger logger; @Override public Boolean handleRequest(SNSEvent event, Context context) { logger = context.getLogger(); List<SNSRecord> records = event.getRecords(); if (!records.isEmpty()) { Iterator<SNSRecord> recordsIter = records.iterator(); while (recordsIter.hasNext()) { processRecord(recordsIter.next()); } } return Boolean.TRUE; } public void processRecord(SNSRecord record) { try { String message = record.getSNS().getMessage(); logger.log("message: " + message); } catch (Exception e) { throw new RuntimeException(e); } } }
JavaScript
SDKfür JavaScript (v3)
Anmerkung

Es gibt noch mehr dazu GitHub. Das vollständige Beispiel sowie eine Anleitung zum Einrichten und Ausführen finden Sie im Repository mit Serverless-Beispielen.

Konsumieren eines SNS Ereignisses mit Lambda unter Verwendung JavaScript.

// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 exports.handler = async (event, context) => { for (const record of event.Records) { await processMessageAsync(record); } console.info("done"); }; async function processMessageAsync(record) { try { const message = JSON.stringify(record.Sns.Message); console.log(`Processed message ${message}`); await Promise.resolve(1); //Placeholder for actual async work } catch (err) { console.error("An error occurred"); throw err; } }

Konsumieren eines SNS Ereignisses mit Lambda unter Verwendung TypeScript.

// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 import { SNSEvent, Context, SNSHandler, SNSEventRecord } from "aws-lambda"; export const functionHandler: SNSHandler = async ( event: SNSEvent, context: Context ): Promise<void> => { for (const record of event.Records) { await processMessageAsync(record); } console.info("done"); }; async function processMessageAsync(record: SNSEventRecord): Promise<any> { try { const message: string = JSON.stringify(record.Sns.Message); console.log(`Processed message ${message}`); await Promise.resolve(1); //Placeholder for actual async work } catch (err) { console.error("An error occurred"); throw err; } }
PHP
SDK für PHP
Anmerkung

Es gibt noch mehr dazu. GitHub Das vollständige Beispiel sowie eine Anleitung zum Einrichten und Ausführen finden Sie im Repository mit Serverless-Beispielen.

Konsumieren eines SNS Ereignisses mit Lambda unter VerwendungPHP.

// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 <?php /* Since native PHP support for AWS Lambda is not available, we are utilizing Bref's PHP functions runtime for AWS Lambda. For more information on Bref's PHP runtime for Lambda, refer to: https://bref.sh/docs/runtimes/function Another approach would be to create a custom runtime. A practical example can be found here: https://aws.amazon.com/blogs/apn/aws-lambda-custom-runtime-for-php-a-practical-example/ */ // Additional composer packages may be required when using Bref or any other PHP functions runtime. // require __DIR__ . '/vendor/autoload.php'; use Bref\Context\Context; use Bref\Event\Sns\SnsEvent; use Bref\Event\Sns\SnsHandler; class Handler extends SnsHandler { public function handleSns(SnsEvent $event, Context $context): void { foreach ($event->getRecords() as $record) { $message = $record->getMessage(); // TODO: Implement your custom processing logic here // Any exception thrown will be logged and the invocation will be marked as failed echo "Processed Message: $message" . PHP_EOL; } } } return new Handler();
Python
SDKfür Python (Boto3)
Anmerkung

Es gibt noch mehr dazu. GitHub Das vollständige Beispiel sowie eine Anleitung zum Einrichten und Ausführen finden Sie im Repository mit Serverless-Beispielen.

Ein SNS Ereignis mit Lambda unter Verwendung von Python konsumieren.

# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: Apache-2.0 def lambda_handler(event, context): for record in event['Records']: process_message(record) print("done") def process_message(record): try: message = record['Sns']['Message'] print(f"Processed message {message}") # TODO; Process your record here except Exception as e: print("An error occurred") raise e
Ruby
SDKfür Ruby
Anmerkung

Es gibt noch mehr dazu GitHub. Das vollständige Beispiel sowie eine Anleitung zum Einrichten und Ausführen finden Sie im Repository mit Serverless-Beispielen.

Ein SNS Ereignis mit Lambda unter Verwendung von Ruby konsumieren.

# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: Apache-2.0 def lambda_handler(event:, context:) event['Records'].map { |record| process_message(record) } end def process_message(record) message = record['Sns']['Message'] puts("Processing message: #{message}") rescue StandardError => e puts("Error processing message: #{e}") raise end
Rust
SDKfür Rust
Anmerkung

Es gibt noch mehr dazu GitHub. Das vollständige Beispiel sowie eine Anleitung zum Einrichten und Ausführen finden Sie im Repository mit Serverless-Beispielen.

Ein SNS Ereignis mit Lambda unter Verwendung von Rust konsumieren.

// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 use aws_lambda_events::event::sns::SnsEvent; use aws_lambda_events::sns::SnsRecord; use lambda_runtime::{run, service_fn, Error, LambdaEvent}; use tracing::info; // Built with the following dependencies: // aws_lambda_events = { version = "0.10.0", default-features = false, features = ["sns"] } // lambda_runtime = "0.8.1" // tokio = { version = "1", features = ["macros"] } // tracing = { version = "0.1", features = ["log"] } // tracing-subscriber = { version = "0.3", default-features = false, features = ["fmt"] } async fn function_handler(event: LambdaEvent<SnsEvent>) -> Result<(), Error> { for event in event.payload.records { process_record(&event)?; } Ok(()) } fn process_record(record: &SnsRecord) -> Result<(), Error> { info!("Processing SNS Message: {}", record.sns.message); // Implement your record handling code here. Ok(()) } #[tokio::main] async fn main() -> Result<(), Error> { tracing_subscriber::fmt() .with_max_level(tracing::Level::INFO) .with_target(false) .without_time() .init(); run(service_fn(function_handler)).await }
So erstellen Sie die Funktion
  1. Erstellen Sie ein Verzeichnis für das Projekt und wechseln Sie dann zu diesem Verzeichnis.

    mkdir sns-tutorial cd sns-tutorial
  2. Kopieren Sie den JavaScript Beispielcode in eine neue Datei mit dem Namenindex.js.

  3. Erstellen Sie ein Bereitstellungspaket mit dem folgenden zip-Befehl.

    zip function.zip index.js
  4. 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 accountB

    Die 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" } }
  5. Notieren Sie sich den Amazon-Ressourcennamen (ARN) Ihrer Funktion. Sie benötigen es später im Tutorial, wenn Sie Berechtigungen hinzufügen, SNS damit Amazon Ihre Funktion aufrufen kann.

Hinzufügen von Berechtigungen zur Funktion (Konto B)

Nächster Schritt: Fügen Sie der Funktion Berechtigungen hinzu

Damit Amazon SNS Ihre Funktion aufrufen kann, müssen Sie ihr in einer Erklärung zu einer ressourcenbasierten Richtlinie die Erlaubnis erteilen. Sie fügen diese Anweisung mit dem Befehl hinzu. AWS CLI add-permission

Um Amazon die SNS Erlaubnis zu erteilen, Ihre Funktion aufzurufen
  • Führen Sie in Konto B den folgenden AWS CLI Befehl aus und verwenden Sie dabei das zuvor ARN für Ihr SNS Amazon-Thema aufgezeichnete.

    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 accountB

    Die 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 SNS Amazon-Thema in einem Opt-In gehostet wird AWS-Region, müssen Sie die Region im Prinzipal angeben. Wenn Sie beispielsweise mit einem SNS Amazon-Thema in der Region Asien-Pazifik (Hongkong) arbeiten, müssen Sie sns.ap-east-1.amazonaws.com statt sns.amazonaws.com für den Principal angeben.

Kontoübergreifende Berechtigungen für ein SNS Amazon-Abonnement erteilen (Konto A)

Nächster Schritt: Erteilen Sie kontoübergreifende Berechtigungen

Damit Ihre Lambda-Funktion in Konto B das SNS Amazon-Thema abonnieren kann, das Sie in Konto A erstellt haben, müssen Sie Konto B die Erlaubnis erteilen, Ihr Thema zu abonnieren. Sie erteilen 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 das ARN für das SNS Amazon-Thema, das Sie zuvor aufgenommen 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)

Nächster Schritt: Erstellen Sie ein Abonnement

In Konto B abonnieren Sie jetzt Ihre Lambda-Funktion für das SNS Amazon-Thema, das Sie zu Beginn des Tutorials in Konto A erstellt haben. Wenn eine Nachricht an dieses Thema (sns-topic-for-lambda) gesendet wird, SNS ruft Amazon 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, und die ARNs für Ihr Thema und die 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 accountB

    Die 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)

Nächster Schritt: Nachrichten veröffentlichen

Jetzt, da Ihre Lambda-Funktion in Konto B Ihr SNS Amazon-Thema in Konto A abonniert hat, ist es an der Zeit, Ihr Setup zu testen, indem Sie Nachrichten zu Ihrem Thema veröffentlichen. Um zu bestätigen, dass Amazon Ihre Lambda-Funktion aufgerufen SNS hat, verwenden Sie CloudWatch Logs, um die Ausgabe Ihrer Funktion anzusehen.

Veröffentlichen einer Nachricht für Ihr Thema und Anzeigen der Ausgabe Ihrer Funktion
  1. Geben Sie Hello World in eine Textdatei ein und speichern Sie sie als message.txt.

  2. 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 accountA

    Dadurch wird eine Nachrichten-ID mit einer eindeutigen Kennung zurückgegeben, die angibt, dass Amazon die Nachricht akzeptiert SNS hat. Amazon versucht SNS dann, die Nachricht an die Abonnenten des Themas weiterzuleiten. Um zu bestätigen, dass Amazon Ihre Lambda-Funktion aufgerufen SNS hat, verwenden Sie CloudWatch Logs, um die Ausgabe Ihrer Funktion einzusehen:

  3. Öffnen Sie in Konto B die Seite Protokollgruppen der CloudWatch Amazon-Konsole.

  4. Wählen Sie die Protokollgruppe für Ihre Funktion (/aws/lambda/Function-With-SNS) aus.

  5. Wählen Sie den neuesten Protokollstreams aus.

  6. 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. Indem Sie AWS Ressourcen löschen, die Sie nicht mehr verwenden, vermeiden Sie unnötige Kosten für Ihre AWS-Konto.

Bereinigen Sie in Konto A Ihr SNS Amazon-Thema.

Um das SNS Amazon-Thema zu löschen
  1. Öffnen Sie die Themenseite der SNS Amazon-Konsole.

  2. Wählen Sie das Thema aus, das Sie gerade erstellt haben.

  3. Wählen Sie Löschen.

  4. Geben Sie delete me in das Texteingabefeld ein.

  5. Wählen Sie Löschen.

Bereinigen Sie in Konto B Ihre Ausführungsrolle, Ihre Lambda-Funktion und Ihr SNS Amazon-Abonnement.

So löschen Sie die Ausführungsrolle
  1. Öffnen Sie die Rollenseite der IAM Konsole.

  2. Wählen Sie die von Ihnen erstellte Ausführungsrolle aus.

  3. Wählen Sie Löschen.

  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.

Um das SNS Amazon-Abonnement zu löschen
  1. Öffnen Sie die Abonnementseite der SNS Amazon-Konsole.

  2. Wählen Sie das von Ihnen erstellte Abonnement aus.

  3. Wählen Sie Löschen, Löschen aus.