Die Verwaltung von Echtzeitbenachrichtigungen in Ihren Anwendungen kann eine große Herausforderung sein – zumindest ohne den richtigen Messaging-Dienst.
Amazon Simple Notification Service (SNS) bietet eine vollständig verwaltete Messaging-Lösung zur Entkopplung und Skalierung von Mikroservices, verteilten Systemen und serverlosen Anwendungen. SNS ermöglicht es Ihnen, Nachrichten an eine große Anzahl von Abonnenten über mehrere Transportprotokolle wie HTTP/S, E-Mail, SMS und mobile Push-Benachrichtigungen zu senden. AWS SNS übernimmt die gesamte schwere Arbeit der Nachrichtenzustellung, einschließlich zuverlässiger Zustellung, Wiederholungen und Backoff-Funktionalität, sodass Sie sich auf den Aufbau Ihrer Kernanwendungsmerkmale konzentrieren können.
AWS SNS folgt einem Publish-Subscribe Modell, das sowohl leicht skalierbar als auch verständlich ist. Eine einmal veröffentlichte Nachricht kann gleichzeitig an mehrere Endpunkte verteilt werden, was SNS ideal für ereignisgesteuerte Architekturen macht.
In diesem Tutorial werde ich Sie durch die Einrichtung und Nutzung von AWS SNS führen, um Benachrichtigungen über verschiedene Kanäle zu senden.
Was ist AWS SNS?
Amazon Simple Notification Service (SNS) ist der verwaltete Pub/Sub-Nachrichtendienst von AWS, der es Ihnen ermöglicht, Mikrodienste, verteilte Systeme und serverlose Anwendungen zu entkoppeln.
SNS funktioniert nach einem einfachen Publish-Subscribe-Modell, bei dem Publisher Nachrichten an Themen senden und Abonnenten diese Nachrichten erhalten. Denken Sie an ein SNS-Thema als Kommunikationskanal – Sie veröffentlichen Nachrichten auf diesem Kanal, und alle Abonnenten werden sofort benachrichtigt. Das Schöne an diesem System ist, dass Publisher nicht wissen müssen, wer ihre Nachrichten empfängt, und Abonnenten nicht wissen müssen, wer ihnen Nachrichten sendet.
Sie fragen sich vielleicht, wie sich das von anderen AWS-Messaging-Diensten wie Simple Queue Service (SQS) unterscheidet. Ganz einfach, SQS verwendet ein Warteschlangenmodell, das hauptsächlich für die asynchrone Verarbeitung von Aufgaben konzipiert ist, während SNS sich darauf konzentriert, Nachrichten gleichzeitig an mehrere Empfänger zu senden. Dies macht SNS perfekt für Szenarien, in denen Sie viele Systeme über ein gerade eingetretenes Ereignis benachrichtigen müssen. Weitere Informationen zu den Unterschieden finden Sie im SQS vs SNS-Blog-Beitrag.
SNS unterstützt mehrere Zustellungsprotokolle, die Ihnen wiederum Flexibilität darüber geben, wie Ihre Abonnenten Benachrichtigungen erhalten.
Schlüsselfunktionen von AWS SNS
SNS bietet eine Vielzahl von Funktionen, die es zum einzigen Benachrichtigungsdienst machen, den Sie benötigen werden. Ich werde ein paar auflisten:
- Verteilte Architektur: SNS kann Nachrichten gleichzeitig an Tausende von Endpunkten liefern, was es Ihnen wiederum ermöglicht, Updates über Ihr gesamtes Anwendungssystem mit einem einzigen API-Aufruf zu übertragen.
- Mehrere Transportprotokolle: Sie sind nicht auf nur eine Möglichkeit beschränkt, Nachrichten zu senden. SNS unterstützt HTTP/HTTPS-Endpunkte, E-Mail, SMS, mobile Push-Benachrichtigungen und sogar SQS-Warteschlangen als Abonnement-Endpunkte.
- Nachrichtenfilterung: Nicht jeder Abonnent benötigt jede Nachricht. Mit der Nachrichtenfilterung können Abonnenten Filterrichtlinien erstellen, um nur die Nachrichten zu erhalten, die sie interessieren, was Rauschen und Verarbeitungsüberlastung reduziert.
- Nachrichtenarchivierung: Wenn Sie eine Aufzeichnung aller gesendeten Benachrichtigungen behalten müssen, werden Sie sich freuen zu erfahren, dass SNS eine Integration mit Amazon S3 für die Nachrichtenarchivierung und mit Amazon Redshift für Analysen bietet.
- Lieferstatusverfolgung: Sie können den Lieferstatus Ihrer Benachrichtigungen überwachen, um sicherzustellen, dass sie ihr Ziel erreichen. Dies ist besonders nützlich für SMS und mobile Push-Benachrichtigungen, bei denen die Zustellung nicht garantiert ist.
- Verschlüsselung: Ihre sensiblen Daten bleiben mit der Unterstützung von SNS für die serverseitige Verschlüsselung geschützt, was gewährleistet, dass Ihre Nachrichten während der Übertragung vertraulich bleiben.
Aber der beste Teil von SNS muss Skalierbarkeit sein. SNS skaliert automatisch mit den Bedürfnissen Ihrer Anwendung. Es spielt keine Rolle, ob Sie zehn oder zehn Millionen Benachrichtigungen pro Tag senden, der Dienst passt sich entsprechend an, ohne dass manuelles Eingreifen erforderlich ist.
Als Nächstes zeige ich Ihnen, wie Sie SNS einrichten.
Einrichten von AWS SNS
Bevor Sie Ihre erste Benachrichtigung mit SNS senden können, müssen Sie einige Einrichtungsschritte befolgen, um alles vorzubereiten.
Schritt 1: Erstellen eines AWS-Kontos
Wenn Sie noch kein AWS-Konto haben, müssen Sie eines erstellen, bevor Sie mit SNS beginnen können.
Gehe zur AWS-Homepage und klicke auf die Schaltfläche „AWS-Konto erstellen“ in der oberen rechten Ecke. Du musst deine E-Mail-Adresse angeben, ein Passwort erstellen und einige grundlegende Kontoinformationen eingeben. AWS wird auch nach deinen Kreditkartendaten fragen – keine Sorge, SNS bietet eine ziemlich großzügige kostenlose Nutzungsschicht, und du wirst nur belastet, wenn du diese Limits überschreitest.
Sobald Ihr Konto eingerichtet ist, sind Sie bereit, weiter fortzufahren. Ich empfehle jedoch dringend, einen dedizierten IAM-Benutzer anstelle Ihres Root-Kontos zu erstellen. Das fällt nicht in den Rahmen des heutigen Artikels, aber sehen Sie sich die offiziellen Anweisungen für detaillierte Richtlinien an.
Schritt 2: Einrichten von SNS in der AWS-Managementkonsole
Jetzt, da Sie über ein AWS-Konto verfügen, ist es an der Zeit, auf den SNS-Dienst zuzugreifen.
Melden Sie sich mit Ihren Anmeldeinformationen im AWS-Management-Console an und suchen Sie SNS. Dies können Sie auf drei Arten tun:
- Geben Sie „SNS“ in die Suchleiste oben in der Konsole ein
- Klicken Sie auf „Dienste“ in der oberen Navigationsleiste und suchen Sie SNS unter der Kategorie „Anwendungintegration“
- Gehen Sie direkt zum SNS-Console
Unabhängig von der Methode sollten Sie folgenden Bildschirm sehen:
Bild 1 – AWS SNS Service-Seite
Sobald Sie im SNS-Dashboard sind, sehen Sie auf der linken Seite ein Menü mit Optionen wie „Themen“, „Abonnements“ und „Mobile“. Das Dashboard gibt Ihnen einen Überblick über Ihre SNS-Ressourcen und die aktuellen Aktivitäten.
Dies wird für ein neues Konto ziemlich leer sein – das ist zu erwarten. Nun, lassen Sie uns unser erstes SNS-Thema erstellen.
Schritt 3: Erstellen eines SNS-Themas
Ein SNS-Thema ist im Grunde ein Kommunikationskanal, an den Publisher Nachrichten senden und Abonnenten zuhören.
Denken Sie an einen Radiosender – der Sender sendet auf einer bestimmten Frequenz (dem Thema), und jeder, der auf diese Frequenz eingestellt ist, empfängt die Sendung. In SNS-Begriffen veröffentlicht Ihre Anwendung Nachrichten zu einem Thema, und alle Endpunkte, die diesem Thema abonniert sind, empfangen diese Nachrichten.
So erstellen Sie Ihr erstes SNS-Thema:
- Geben Sie auf dem Bildschirm, den Sie in Bild 1 gesehen haben, einen Themenname ein.
- Klicken Sie auf die Schaltfläche „Nächster Schritt“.
- Wählen Sie „Standard“ als Typ aus (FIFO-Themen haben andere Anwendungsfälle, die wir später behandeln werden).
- (Optional) Geben Sie einen Anzeigenamen ein. Dieser wird in Nachrichten an SMS- oder E-Mail-Abonnenten enthalten sein.
- Lassen Sie alle anderen Einstellungen vorerst auf ihren Standardwerten.
- Klicken Sie auf „Thema erstellen“.
Wenn Sie Bilder gegenüber Text bevorzugen, sollte Ihr Bildschirm so aussehen:
Bild 2 – Erstellung eines SNS-Themas
Wenn Sie mit den Werten zufrieden sind, scrollen Sie nach unten, bis Sie die Schaltfläche „Thema erstellen“ sehen:
Bild 3 – Erstellung eines SNS-Themas (2)
Und das ist es! Ihr SNS-Thema ist jetzt einsatzbereit. Sie sehen Details wie den Thema ARN (Amazon Resource Name), der Ihr Thema eindeutig identifiziert:
Bild 4 – Erstellte Themen-Details
Ihr neues Thema ist bereit für Abonnements, hat aber noch keine, was bedeutet, dass keine Ihrer veröffentlichten Nachrichten empfangen werden. Keine Sorge, das werden Sie im nächsten Abschnitt beheben, wenn Sie Abonnenten hinzufügen.
SNS-Abonnenten und Abonnements
Wie bereits erwähnt, ist Ihr SNS-Thema wie ein Radiosender. Es hat derzeit keine Zuhörer, aber das wird sich ändern, wenn Sie Abonnenten hinzufügen, die Ihre Nachrichten empfangen sollen.
Was ist ein SNS-Abonnent?
Ein Abonnent ist ein Endpunkt, der Benachrichtigungen von Ihrem SNS-Thema empfängt, wenn eine Nachricht veröffentlicht wird.
Betrachten Sie die Analogie eines Newsletters. Jedes Mal, wenn Sie eine neue Ausgabe (Nachricht) veröffentlichen, wird sie an alle auf Ihrer Mailingliste zugestellt. SNS macht diesen Prozess automatisch und skalierbar und übernimmt alle Zustellungslogistik für Sie.
AWS unterstützt eine Vielzahl von Abonnementtypen, was Ihnen Flexibilität bei der Verarbeitung Ihrer Nachrichten ermöglicht. Ich werde die Haupttypen unten auflisten:
- E-Mail-Adressen:Senden Sie einfache Textbenachrichtigungen direkt an E-Mail-Postfächer.
- SMS-Nummern:Liefern Sie Textbenachrichtigungen an Mobiltelefone.
- SQS-Warteschlangen: Routen von Nachrichten an andere AWS-Dienste zur weiteren Verarbeitung.
- Lambda-Funktionen: Auslösen der serverlosen Codeausführung als Reaktion auf Benachrichtigungen.
- HTTP/HTTPS-Endpunkte: Senden von Nachrichten an Webanwendungen oder APIs.
- Mobile-Push:Senden Sie Benachrichtigungen direkt an mobile Apps.
Jeder Abonnententyp hat seine eigenen Vorteile und Anwendungsfälle. Zum Beispiel sind E-Mail und SMS großartig für menschliche Empfänger, während SQS-Warteschlangen und Lambda-Funktionen besser für die systemübergreifende Kommunikation geeignet sind.
Schritt 1: Hinzufügen eines Abonnenten
Jetzt, da Sie wissen, was Abonnenten sind, fügen wir einen Ihrem Thema hinzu. In diesem Tutorial werde ich E-Mail verwenden, da es am einfachsten einzurichten ist.
So fügen Sie einen E-Mail-Abonnenten zu Ihrem SNS-Thema hinzu:
- Von der Detailseite Ihres Themas (wie in Bild 4 gezeigt) klicken Sie auf die Schaltfläche „Abonnement erstellen“.
- Wählen Sie im Dropdown-Menü „Protokoll“ die Option „E-Mail“ aus.
- Geben Sie im Feld „Endpunkt“ die E-Mail-Adresse ein, an die Benachrichtigungen gesendet werden sollen.
- Lassen Sie alle anderen Einstellungen auf ihren Standardwerten.
- Klicken Sie auf „Abonnement erstellen“.
Ihr Bildschirm sollte ungefähr so aussehen:
Bild 5 – Erstellung eines E-Mail-Abonnements
Nachdem Sie auf „Abonnement erstellen“ geklickt haben, fügt AWS das Abonnement zu Ihrem Thema hinzu, aber es wird sich im Status „Bestätigung ausstehend“ befinden:
Bild 6 – Status „Bestätigung ausstehend“
Dies ist eine wichtige Sicherheitsfunktion, da AWS sicherstellen möchte, dass der Besitzer der E-Mail-Adresse tatsächlich diese Benachrichtigungen erhalten möchte.
Schritt 2: Bestätigung von Abonnements
Nachdem ein Abonnent hinzugefügt wurde, muss er bestätigen, dass er Benachrichtigungen von Ihrem SNS-Thema erhalten möchte.
Für E-Mail-Abonnements sendet AWS automatisch eine Bestätigungs-E-Mail an die angegebene Adresse. Die E-Mail enthält einen Link, den der Empfänger anklicken muss, um das Abonnement zu aktivieren. Bis dies geschieht, werden keine Nachrichten, die an das Thema veröffentlicht wurden, an dieses Endpunkt geliefert.
So sieht eine typische Bestätigungs-E-Mail aus:
Bild 7 – SNS Bestätigungs-E-Mail
Der Empfänger muss einfach auf den Link „Abonnement bestätigen“ in der E-Mail klicken. Sie gelangen zu einer Seite, die die Aktivierung ihres Abonnements bestätigt:
Bild 8 – Bestätigungsnachricht für das Abonnement
Der Prozess ist ähnlich für SMS-Abonnenten – AWS sendet eine SMS mit einem Bestätigungslink, dem der Empfänger folgen muss. HTTP/HTTPS-Endpunkte müssen auf eine Bestätigungsanfrage von AWS antworten, während AWS-Ressourcen wie Lambda-Funktionen und SQS-Warteschlangen für automatische Bestätigung konfiguriert werden können.
Sie können den Status Ihrer Abonnements über den Abschnitt „Abonnements“ im linken Seitenbereich der SNS-Konsole überprüfen. Bestätigte Abonnements zeigen einen Status von „Bestätigt“ an, während diejenigen, die auf Bestätigung warten, „Ausstehende Bestätigung“ anzeigen.
Bild 9 – Abonnementstatus
Sobald Ihr Abonnement bestätigt ist, können Sie mit dem Versenden von Nachrichten beginnen! Jede Nachricht, die an das Thema veröffentlicht wird, wird an alle bestätigten Abonnenten mit ihrem angegebenen Protokoll zugestellt.
Das ist alles, was Sie zur Einrichtung von SNS-Abonnements benötigen. Im nächsten Abschnitt erfahren Sie, wie Sie Nachrichten an Ihr Thema veröffentlichen und überprüfen können, ob Ihre Abonnenten sie korrekt empfangen.
Veröffentlichen von Nachrichten in SNS-Themen
Jetzt, da Sie Ihr SNS-Thema eingerichtet und Abonnenten hinzugefügt haben, ist es an der Zeit, Ihre erste Benachrichtigung zu senden.
Schritt 1: Veröffentlichen einer Nachricht
Ein guter Einstieg ist die Veröffentlichung einer Nachricht über die AWS-Konsole.
Um Ihre erste Nachricht zu senden, navigieren Sie zur Detailseite Ihres Themas und klicken Sie oben rechts auf die Schaltfläche „Nachricht veröffentlichen“ (siehe Bild 4). Dadurch wird das Formular zur Nachrichtenveröffentlichung geöffnet, in dem Sie Ihre Benachrichtigung verfassen können. Sie sehen Felder für den Betreff und den Inhalt der Nachricht. Der Betreff ist optional, aber hilfreich für E-Mail-Benachrichtigungen, da er zur E-Mail-Betreffzeile wird.
Für eine einfache Testnachricht könnten Sie beispielsweise Folgendes eingeben:
Bild 10 – Inhalt der ersten Nachricht
Wenn Sie mit Ihrer Nachricht zufrieden sind, scrollen Sie nach unten und klicken Sie auf die Schaltfläche „Nachricht veröffentlichen“ am unteren Rand des Formulars:
Bild 11 – Veröffentlichung einer Nachricht über die Konsole
Nach dem Klicken verteilt SNS Ihre Nachricht sofort an alle bestätigten Abonnenten. Wenn Sie ein E-Mail-Abonnement eingerichtet haben, sollten Sie die Testnachricht innerhalb von Sekunden in Ihrem Posteingang erhalten:
Bild 12 – Nachricht im E-Mail-Eingang erhalten
Einfach, oder? Lassen Sie uns nun sehen, wie Sie es weiter anpassen können.
Schritt 2: Senden von SMS- und E-Mail-Benachrichtigungen
Mit SNS können Sie anpassen, wie Ihre Nachrichten für verschiedene Arten von Abonnenten erscheinen.
Beim Veröffentlichen einer Nachricht fällt Ihnen die Option „Nachrichtenstruktur“ auf. Standardmäßig ist sie auf „Identischer Payload für alle Übermittlungsprotokolle“ eingestellt, was bedeutet, dass alle Abonnenten genau dieselbe Nachricht erhalten. Sie können jedoch auch „Benutzerdefinierten Payload für jedes Übermittlungsprotokoll“ auswählen, was es Ihnen ermöglicht, das Nachrichtenformat für jeden Abonnententyp anzupassen.
Für E-Mail-Benachrichtigungen stehen Ihnen zwei Formatoptionen zur Verfügung:
- E-Mail-JSON: Sendet den Roh-JSON-Payload an den E-Mail-Endpunkt.
- E-Mail: Sendet eine formatierte E-Mail mit Betreff und Nachrichtentext.
Bild 13 – Nutzlastanpassung
Bei SMS-Benachrichtigungen gilt eine Zeichenbegrenzung von 160 Zeichen. SNS liefert längere Nachrichten, behandelt sie jedoch als mehrere Nachrichten. Sie können auch den SMS-Nachrichtentyp auf „Werbeaktion“ oder „Transaktional“ festlegen, was die Zustelloptimierung beeinflusst:
Bild 14 – SMS-Optionen
Sie wissen nun, wie Sie E-Mail-Benachrichtigungen über die AWS-Konsole senden und anpassen können. Als nächstes erfahren Sie, wie Sie dasselbe über die CLI und Python tun können.
Schritt 3: Verwenden der AWS CLI oder SDK zum Veröffentlichen von Nachrichten
Die Konsole ist großartig für manuelle Tests, aber in der realen Welt möchten Sie Nachrichten programmgesteuert veröffentlichen.
Die AWS-Befehlszeilenschnittstelle (CLI) erleichtert das Senden von SNS-Nachrichten von Ihrem Terminal oder aus Automatisierungsskripten.
Angenommen, Sie haben die AWS CLI installiert und konfiguriert, führen Sie diesen Befehl aus, um eine Nachricht über die CLI zu veröffentlichen:
aws sns publish --topic-arn "sns-arn" --subject "CLI Notification" --message "Hello from the AWS CLI!"
Bild 15 – Nachrichtenveröffentlichung über AWS CLI
In einem Augenblick sehen Sie eine ähnliche Nachricht in Ihrem Posteingang:
Bild 16 – Nachrichtveröffentlichung über AWS CLI (2)
Für anspruchsvollere Anwendungen bieten die AWS SDKs programmatischen Zugriff auf SNS in vielen Programmiersprachen.
Hier ist ein einfaches Beispiel für die Veröffentlichung einer Nachricht mit Python unter Verwendung der boto3
-Bibliothek:
import boto3 # SNS-Client initialisieren sns_client = boto3.client("sns", region_name="eu-central-1") # Thema ARN (Amazon Resource Name) topic_arn = "sns-arn" # Eine einfache Nachricht veröffentlichen response = sns_client.publish( TopicArn=topic_arn, Message="Hello from Python!", Subject="Python Notification" ) # Überprüfen, ob die Nachricht erfolgreich gesendet wurde if "MessageId" in response: print(f"Message published successfully! Message ID: {response['MessageId']}")
Bild 17 – Nachrichtveröffentlichung über Python SDK
Einmal mehr wird die Nachricht sofort in mein Postfach zugestellt:
Bild 18 – Nachrichtenveröffentlichung über das Python SDK (2)
Das ist alles, was es zur Veröffentlichung von Nachrichten mit SNS zu wissen gibt! Sie haben jetzt mehrere Möglichkeiten, Benachrichtigungen zu senden, vom einfachen Konsoleninterface bis hin zur programmatischen Veröffentlichung mit der AWS CLI oder SDK.
> Neu bei AWS Boto in Python? Melden Sie sich für unseren Kurs an, um in kürzester Zeit kompetent zu werden.
Im nächsten Abschnitt werden wir einige erweiterte Funktionen von SNS erkunden, die Ihre Benachrichtigungen auf die nächste Stufe heben.
Erweiterte SNS-Funktionen
Bis jetzt haben Sie die Grundlagen von SNS gelernt. In diesem Abschnitt sehen Sie einige erweiterte Funktionen, die SNS wirklich leistungsstark machen.
SNS-Nachrichtenfilterung
Die gleiche Benachrichtigung an alle Abonnenten zu senden, führt oft dazu, dass Endpunkte Nachrichten erhalten, die sie nicht interessieren.
Die Nachrichtenfilterung löst dieses Problem, indem sie Abonnenten ermöglicht, zu filtern, welche Nachrichten sie basierend auf Nachrichtenattributen erhalten. Man kann sich das wie das Einrichten von E-Mail-Filtern vorstellen – man erstellt Regeln, die bestimmen, welche Nachrichten durchkommen. Für SNS werden diese Regeln Filterrichtlinien genannt.
Um zu beginnen, können Sie Filterrichtlinien für Ihre Abonnements einrichten, damit sie nur relevante Nachrichten erhalten:
Bild 19 – Benachrichtigungsfilterrichtlinien
In diesem Beispiel erhält der Abonnent nur Benachrichtigungen für Nachrichten, die das Attribut order_value
mit einem numerischen Wert von 1500 und höher haben.
Um eine solche Benachrichtigung zu senden, können Sie den folgenden Python-Code verwenden:
import boto3 # Initialisieren des SNS-Clients sns_client = boto3.client("sns", region_name="eu-central-1") # Topic-ARN (Amazon Resource Name) topic_arn = "arn:aws:sns:eu-central-1:105036517833:TestTopic" response = sns_client.publish( TopicArn=topic_arn, Message="A new high-value order has been placed", Subject="New Order Notification", MessageAttributes={ "order_value": {"DataType": "Number", "StringValue": "2000"}, "region": {"DataType": "String", "StringValue": "EU"}, "category": {"DataType": "String", "StringValue": "Electronics"}, }, ) print(response)
Dies ist das, was Sie nach Ausführung des Python-Skripts sehen werden:
Bild 20 – Senden einer Benachrichtigung über Python
Nur wenn der Wert von order_value
1500 oder höher ist, erhalten Sie die Benachrichtigung:
Bild 21 – Benachrichtigungsinhalt
Kurz gesagt ermöglichen Filterrichtlinien das Senden gezielter Benachrichtigungen, ohne Ihren Veröffentlichungscode zu ändern. Das Beste daran ist, dass die Filterung auf der Seite von AWS erfolgt und nicht in Ihrer Anwendung, was die Effizienz verbessert und den unnötigen Datenverkehr reduziert.
SNS-Dead-Letter-Warteschlangen (DLQ)
Die Nachrichtenzustellung kann manchmal selbst bei den zuverlässigsten Systemen fehlschlagen.
Ein Dead Letter Queue (DLQ) ist eine spezielle Amazon SQS-Warteschlange, in die SNS Nachrichten senden kann, die nicht an ihre Abonnenten zugestellt werden konnten. Dies geschieht typischerweise, wenn ein Abonnent nicht verfügbar ist oder einen Fehler zurückgibt. Anstatt diese fehlgeschlagenen Nachrichten für immer zu verlieren, leitet SNS sie an die DLQ weiter, wo Sie sie später analysieren oder die Zustellung erneut versuchen können.
Die Einrichtung einer DLQ erfolgt in zwei Schritten. Erstellen Sie zunächst eine SQS-Warteschlange, die als Ihre DLQ fungiert:
Bild 22 – Erstellen einer SQS-Warteschlange
Konfigurieren Sie dann Ihr SNS-Abonnement so, dass diese Warteschlange für nicht zustellbare Nachrichten verwendet wird:
Bild 23 – Hinzufügen einer Redrive-Richtlinie zur SQS-Warteschlange
Diese Konfiguration erfordert die richtigen Berechtigungen, da SNS in der Lage sein muss, Nachrichten an die SQS-Warteschlange zu senden. In der AWS-Konsole können Sie dies über ein einfaches Kontrollkästchen einrichten, aber wenn Sie CloudFormation oder andere Infrastructure-as-Code-Tools verwenden, müssen Sie die entsprechenden IAM-Berechtigungen hinzufügen.
Mit einer DLQ können Sie Lieferfehler überwachen und bei Bedarf Maßnahmen ergreifen. Zum Beispiel könnten Sie einen Alarm einrichten, der ausgelöst wird, wenn Nachrichten in Ihrer DLQ erscheinen, um Sie auf potenzielle Probleme mit Ihren Abonnenten aufmerksam zu machen, aber das liegt außerhalb des Rahmens dieses Abschnitts.
Verwendung von AWS Lambda mit SNS
Lambda-Funktionen eröffnen eine Welt von Möglichkeiten zur Verarbeitung von SNS-Nachrichten.
Wenn Sie eine Lambda-Funktion mit einem SNS-Thema abonnieren, wird die Funktion automatisch ausgelöst, sobald eine Nachricht veröffentlicht wird. Der serverlose Ansatz von Lambda bedeutet, dass Sie keine Infrastruktur für die Nachrichtenverarbeitung verwalten müssen, da sie basierend auf dem Nachrichtenvolumen automatisch skaliert.
Um zu beginnen, erstellen Sie zuerst eine Lambda-Funktion:
Bild 24 – Erstellen einer Lambda-Funktion
Füllen Sie es dann mit einem Code ähnlich diesem aus:
def lambda_handler(event, context): # SNS-Nachrichten befinden sich im 'Records'-Array for record in event["Records"]: # Extrahiere die Nachricht message = record["Sns"]["Message"] subject = record["Sns"]["Subject"] timestamp = record["Sns"]["Timestamp"] # Verarbeite die Nachricht print(f"Received message: {message}") print(f"Subject: {subject}") print(f"Timestamp: {timestamp}") # Deine Geschäftslogik hier # Zum Beispiel, speichere die Nachricht in einer Datenbank # oder löse einen anderen AWS-Dienst aus print("ALL DONE!") # Erfolgreiche Rückgabe return {"statusCode": 200, "body": "Message processed successfully"}
Bild 25 – Lambda-Funktionscode
Sobald dein Code bereit ist, klicke auf die Schaltfläche „Trigger hinzufügen“, um die Lambda-Funktion mit SNS zu verbinden:
Bild 26 – Verbindung von SNS zu Lambda
Die Funktion ist jetzt mit der Warteschlange verbunden, was bedeutet, dass du eine Testbenachrichtigung senden kannst:
Bild 27 – Testbenachrichtigung
Lambda-Funktionen ermöglichen es Ihnen, Protokolle zu überwachen, was bedeutet, dass Sie kürzliche Funktionsaufrufe sehen können – das Ergebnis des Sendens einer Benachrichtigung:
Bild 28 – Lambda-Funktionsprotokolle
Lambda-Funktionen können praktisch alles mit diesen Nachrichten machen – sie in einer Datenbank speichern, andere AWS-Dienste auslösen, E-Mails senden oder sogar externe APIs aufrufen. Dies macht SNS und Lambda zu einer leistungsstarken Kombination für den Aufbau von ereignisgesteuerten Architekturen. Sie können mehr über Lambda-Funktionen im Einsteigerleitfaden für AWS Lambda Tutorial erfahren.
Als Nächstes lernen Sie die Grundlagen der SNS-Überwachung und -Protokollierung.
Überwachung und Protokollierung der SNS-Aktivität
Die Verfolgung Ihrer SNS-Aktivitäten ist entscheidend, um ein zuverlässiges Benachrichtigungssystem aufrechtzuerhalten.
Verwendung von Amazon CloudWatch mit SNS
Amazon CloudWatch bietet umfassendes Monitoring für alle Ihre AWS-Dienste, einschließlich SNS. Wenn Sie CloudWatch mit SNS einrichten, erhalten Sie Einblick in wichtige betriebliche Kennzahlen wie die Zustellraten von Nachrichten, Ausfälle und API-Nutzungsmuster.
Um mit der CloudWatch-Überwachung für SNS zu beginnen, navigieren Sie zur CloudWatch-Konsole in Ihrem AWS-Konto. Von dort aus können Sie auf die vorab konfigurierten SNS-Kennzahlen zugreifen, die AWS automatisch für Sie sammelt.
Die wertvollsten SNS-Kennzahlen, die überwacht werden sollten, sind:
- AnzahlDerVeröffentlichtenNachrichten: Verfolgt, wie viele Nachrichten an Ihre Themen veröffentlicht werden.
- AnzahlDerZugestelltenBenachrichtigungen: Zeigt erfolgreiche Nachrichtenlieferungen an Abonnenten an.
- AnzahlDerFehlgeschlagenenBenachrichtigungen: Hebt fehlgeschlagene Lieferversuche hervor, die auf Konfigurationsprobleme hinweisen könnten.
- Veröffentlichungsgröße: Misst die Größe von veröffentlichten Nachrichten und hilft Ihnen, innerhalb der Servicegrenzen zu bleiben.
Bild 29 – Standard-CloudWatch-Dashboard für SNS
Das Einrichten von CloudWatch-Alarmen ermöglicht es Ihnen, schnell auf potenzielle Probleme zu reagieren, bevor sie sich auf Ihre Benutzer auswirken. Sie könnten beispielsweise einen Alarm erstellen, der ausgelöst wird, wenn die Nachrichtenzustellungsausfälle einen bestimmten Schwellenwert überschreiten:
- In der CloudWatch-Konsole wechseln Sie zum Abschnitt „Alarme“.
- Klicken Sie auf „Alarm erstellen“ und wählen Sie die SNS-Metrik aus, die Sie überwachen möchten.
- Legen Sie Ihren Schwellenwert fest (z.B. mehr als 5 fehlgeschlagene Lieferungen in 5 Minuten).
- Konfigurieren Sie Benachrichtigungsaktionen, z.B. das Senden eines Alarms an ein Betriebsteam.
Wenn Sie Bilder anstelle von Anweisungen bevorzugen, beginnen Sie mit der Erstellung eines Alarms für eine interessante Metrik, z.B. AnzahlDerFehlgeschlagenenBenachrichtigungen
. Richten Sie Schwellenwerte ein, die den Alarm auslösen werden:
Bild 30 – Alarm erstellen
Und das war’s – der Alarm ist jetzt erstellt und aktiv:
Bild 31 – Alarm erstellen (2)
Diese Alarme können den Unterschied ausmachen, ob man proaktiv ein Problem angeht oder es von unzufriedenen Nutzern erfährt.
Überprüfung der SNS-Protokolle
AWS CloudTrail erfasst alle API-Aktivitäten in Ihrem AWS-Konto, einschließlich der innerhalb des SNS-Dienstes durchgeführten Aktionen.
Jede Operation, die an Ihren SNS-Themen durchgeführt wird – sei es über die Konsole, CLI oder SDK – erzeugt einen Eintrag in den CloudTrail-Protokollen. Diese Protokolle liefern wertvolle Informationen für Sicherheitsanalysen, Nachverfolgung von Ressourcenänderungen und Compliance-Prüfungen.
Um auf SNS-Protokolle in CloudTrail zuzugreifen:
- Öffnen Sie die CloudTrail-Konsole in Ihrem AWS-Konto (Sie müssen wahrscheinlich einen neuen Trail erstellen).
- Navigieren Sie zu „Ereignishistorie“, um die aktuellen SNS-Aktivitäten zu sehen.
- Filtern Sie die Ereignisse, indem Sie „Ereignisquelle“ auswählen und „sns.amazonaws.com“ eingeben.
Wenn die schriftlichen Anweisungen nicht ausreichen, beziehen Sie sich auf die unten stehenden Bilder. Beginnen Sie mit der Erstellung eines neuen Trails:
Bild 32 – Erstellung eines neuen Trails
Filtern Sie dann unter „Ereignishistorie“ die Ereignisse, um nur die für SNS anzuzeigen:
Bild 33 – Filtern von Logs
Logs werden automatisch in einem S3-Bucket gespeichert, was bedeutet, dass dieser Ansatz eine dauerhafte Speicherung Ihrer Logs ermöglicht und erweiterte Abfragefähigkeiten ermöglicht.
> Wie funktioniert die Speicherung auf AWS? Lesen Sie unseren Leitfaden zu S3 und EFS.
Zusammenfassend: Durch die Kombination von CloudWatch-Metriken mit CloudTrail-Logs erstellen Sie ein umfassendes Überwachungssystem, das dazu beiträgt, dass Ihre SNS-Infrastruktur zuverlässig funktioniert.
Best Practices für die Verwendung von AWS SNS
Sie kennen nun die grundlegenden und erweiterten Funktionen von AWS SNS. Es bleibt noch zu besprechen, welche bewährten Verfahren bei der Erstellung von Themen und dem Versenden von Nachrichten zu beachten sind.
Sichern von SNS-Themen
Sicherheit sollte oberste Priorität haben, wenn Sie Ihre SNS-Infrastruktur einrichten. Ohne angemessene Kontrollen könnten Ihre Themen anfällig für unbefugten Zugriff sein, was ein massives Sicherheitsrisiko darstellt.
Das AWS Identity and Access Management (IAM) bietet die Tools, die Sie benötigen, um Ihre SNS-Themen zu sichern. Beginnen Sie damit, Richtlinien zu erstellen, die dem Prinzip des minimalen Rechts folgen – gewähren Sie nur die spezifischen Berechtigungen, die für jeden Benutzer oder Dienst benötigt werden. Beispielsweise möchten Sie, dass einige Anwendungen nur Nachrichten veröffentlichen können, während andere nur Themen abonnieren müssen.
Hier ist eine Beispiel-IAM-Richtlinie, die das Veröffentlichen auf ein bestimmtes Thema beschränkt:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sns:Publish", "Resource": "sns-arn" } ] }
Sie können auch Themenrichtlinien verwenden, um zu steuern, welche AWS-Konten Ihre Themen abonnieren können. Dies ist besonders wichtig, wenn Sie Daten über organisatorische Grenzen hinweg teilen.
Vergessen Sie nicht, Berechtigungen regelmäßig mithilfe von AWS CloudTrail zu überprüfen und den Zugriff zu entfernen, der nicht mehr benötigt wird.
Verwaltung des Nachrichtenvolumens
Ein hohes Nachrichtenvolumen kann Abonnenten überwältigen, wenn es nicht ordnungsgemäß behandelt wird. Hier wird die Kombination von SNS mit anderen AWS-Services unerlässlich.
Ein beliebtes Muster ist die „Fanout“-Architektur, bei der Nachrichten an ein SNS-Thema veröffentlicht werden, das mehrere SQS-Warteschlangen abonniert hat. Jede Warteschlange kann dann in unterschiedliche Verarbeitungssysteme in ihrem eigenen Tempo einspeisen. Dies entkoppelt Ihre Publisher von Ihren Verbrauchern und bietet einen Puffer bei Verkehrsspitzen.
Für Echtzeitverarbeitungsanforderungen sollten Lambda-Funktionen für Ihre Themen abonniert werden. Lambda skaliert automatisch mit Ihrem Nachrichtenvolumen, was die Notwendigkeit der Bereitstellung und Verwaltung von Servern beseitigt.
Kostensenkung
Obwohl SNS kostengünstig ist, können sich die Ausgaben schnell summieren, wenn Ihr Nachrichtenvolumen wächst. Einige strategische Entscheidungen können dazu beitragen, Ihre Kosten im Griff zu behalten.
Zunächst sollten Sie bei Ihren Abonnementprotokollen wählerisch sein. HTTP/HTTPS-Endpunkte sind im Allgemeinen die kostengünstigste Option. E-Mail-Benachrichtigungen sollten zwar bequem sein, sollten jedoch sparsam eingesetzt werden, da sie höhere Kosten pro Nachricht verursachen.
Nachrichtenfilterung ist ein weiteres leistungsstarkes Kosteneinsparungstool. Durch die Implementierung von Filterrichtlinien für Ihre Abonnements stellen Sie sicher, dass die Nachrichten nur an interessierte Abonnenten geliefert werden. Wenn Sie beispielsweise ein Thema für alle Systemmeldungen haben, möchten Sie möglicherweise, dass Ihre Bereitschaftsingenieure während ihrer Schicht nur kritische Meldungen erhalten, nicht jede Benachrichtigung:
# Abonnieren mit einer Filterrichtlinie response = sns.subscribe( TopicArn="sns-arn", Protocol="email", Endpoint="[email protected]", Attributes={"FilterPolicy": '{"severity": ["critical"]}'}, )
Überprüfen Sie regelmäßig Ihre SNS-Nutzung im AWS Cost Explorer und suchen Sie nach Möglichkeiten, Themen zu konsolidieren oder ungenutzte Abonnements zu entfernen. Ungenutzte oder doppelte Ressourcen verursachen nicht nur unnötige Kosten, sondern komplizieren auch Ihre Architektur.
Wenn Sie diese Best Practices befolgen, erstellen Sie eine SNS-Implementierung, die sicher, skalierbar und kosteneffektiv ist – alles, was Sie benötigen, um einen zuverlässigen Benachrichtigungsdienst ohne unerwartete Ausgaben oder Sicherheitsbedenken zu haben.
Zusammenfassung AWS SNS
Wenn Sie eine Echtzeitbenachrichtigung über verteilte Anwendungen benötigen, ist AWS SNS die richtige Wahl. Es ist einfach zu bedienen, lässt sich gut in andere AWS-Dienste integrieren und skaliert unbegrenzt, um Ihren Bedürfnissen gerecht zu werden.
Das Publish-Subscribe-Modell in SNS erleichtert die Implementierung von Benachrichtigungssystemen, die gleichzeitig mehrere Kanäle erreichen können. Vom Erstellen von Themen und Verwalten von Abonnenten bis hin zur Implementierung fortschrittlicher Funktionen wie Nachrichtenfilterung und Dead-Letter-Queues verfügen Sie nun über das Wissen, um eine robuste Benachrichtigungsinfrastruktur aufzubauen.
Sie haben auch wichtige Aspekte des Monitorings, der Sicherheit und des Kostenmanagements kennengelernt, die sicherstellen, dass Ihre SNS-Implementierung in Produktionsumgebungen zuverlässig und effizient bleibt.
Da Anwendungen weiterhin ereignisgesteuerte Architekturen übernehmen, werden Dienste wie SNS zunehmend wertvoll. Egal, ob Sie ein einfaches Warnsystem oder komplexe Mikroservices erstellen, die Muster in diesem Tutorial bieten eine Grundlage für eine effektive Kommunikation zwischen den Komponenten Ihres Systems.
Um mehr über AWS zu erfahren, folgen Sie diesen Kursen von DataCamp:
Sie können sogar DataCamp verwenden, um sich auf AWS-Zertifizierungsprüfungen vorzubereiten – AWS Cloud Practitioner (CLF-C02).