Amazon SNS undAWS X-Ray - AWS X-Ray

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.

Amazon SNS undAWS X-Ray

AWS X-RayKann in Amazon Simple Notification Service (Amazon SNS) integriert werden, um über Amazon SNS übertragene Nachrichten nachzuverfolgen. Wenn ein Amazon SNS SNS-Publisher seinen Client mit dem X-Ray SDK verfolgt, können AbonnentenNachverfolgungs-Headerund verbreiten Sie den ursprünglichen Trace vom Herausgeber mit derselben Trace-ID weiter. Diese Kontinuität ermöglicht Benutzern das Nachverfolgen, Analysieren und Debuggen in allen nachgeschalteten Services.

Amazon SNS SNS-Trace-Kontextverbreitung unterstützt derzeit die folgenden Abonnenten:

  • HTTP/HTTPS— Für HTTP/HTTPS-Abonnenten können Sie das X-Ray SDK verwenden, um die Anfrage zur eingehenden Nachricht nachzuverfolgen. Weitere Informationen und Beispiele für Java finden Sie unter Ablaufverfolgung eingehender Anfragen mit dem X-Ray-SDK SDK for Java.

  • AWS Lambda- Für Lambda-Abonnenten mit aktivierter Nachverfolgung zeichnet Lambda ein Segment mit Informationen zum Funktionsaufruf auf und sendet es an den Trace des Herausgebers. Weitere Informationen finden Sie unter AWS Lambda und AWS X-Ray .

Hier erhalten Sie Anweisungen zum Erstellen eines grundlegenden Kontexts zwischen X-Ray und Amazon SNS mit einem Lambda-Abonnenten. Sie erstellen zwei Lambda-Funktionen und ein Amazon-SNS-Thema. In der X-Ray-Konsole können Sie dann die während der Interaktionen verbreitete Trace-ID anzeigen.

Voraussetzungen

Erstellen einer Lambda-Abonnentenfunktion

In den folgenden Schritten wird die Lambda-FunktionMessageSubscriberEs wird in Node.js implementiert und als Endpunkt für ein Amazon SNS SNS-Thema abonniert. Die Funktion MessageSubscriber erstellt das Untersegment custom process_message mit dem Befehl AWSXRay.captureFunc. Die Funktion schreibt eine einfache Nachricht als Anmerkung in das Untersegment.

So erstellen Sie das Abonnentenpaket

  1. Erstellen Sie einen Dateiordner und benennen Sie ihn, um anzugeben, dass es sich um die Abonnentenfunktion handelt (z. B. sns-xray-subscriber).

  2. Erstellen Sie zwei Dateien: index.js und package.json.

  3. Fügen Sie folgenden Code in ei index.js.

    var AWSXRay = require('aws-xray-sdk'); exports.handler = function(event, context, callback) { AWSXRay.captureFunc('process_message', function(subsegment) { var message = event.Records[0].Sns.Message; subsegment.addAnnotation('message_content', message); subsegment.close(); }); callback(null, "Message received."); };
  4. Fügen Sie folgenden Code in ei package.json.

    { "name": "sns-xray-subscriber", "version": "1.0.0", "description": "A demo service to test SNS X-Ray trace header propagation", "dependencies": { "aws-xray-sdk": "^2.2.0" } }
  5. Führen Sie das folgende Skript innerhalb des Ordners sns-xray-subscriber aus. Dieses erstellt die Datei package-lock.json und den Ordner node_modules, die alle Abhängigkeiten verarbeiten.

    npm install --production
  6. Komprimieren Sie den Ordner sns-xray-subscriber in eine ZIP-Datei.

So erstellen Sie eine Abonnentenfunktion und aktivieren X-Ray

  1. Öffnen Sie die Lambda-Konsole und wählen Sie Create a function (Funktion erstellen) aus.

  2. Wählen Sie Author from scratch (Vollkommen neu erstellen) aus.

    • Geben Sie für Function name (Funktionsname) einen Namen ein (z. B. MessageSubscriber).

    • Verwenden Sie für Runtime (Laufzeit) die Option Node.js 10.x.

  3. Klicken Sie aufFunktion erstellenum Ihre Funktion in der Lambda-Konsole zu erstellen und anzuzeigen.

  4. Wählen Sie unter Function code (Funktionscode) für Code entry type (Codeeingabetyp) die Option Upload a .zip file (ZIP-Datei hochladen) aus.

  5. Wählen Sie das Abonnentenpaket, das Sie erstellt haben. Wählen Sie zum Hochladen oben rechts in der Konsole Save (Speichern) aus.

  6. In :Debuggen und FehlerbehandlungWählen Sie die OptionAktivieren vonAWSX-Rayaus.

  7. Wählen Sie Save (Speichern) aus.

Erstellen Sie ein Amazon SNS-Thema

Wenn Amazon SNS Anfragen empfängt, verbreitet es den Trace-Header an seinen Endpunktabonnenten. In den folgenden Schritten erstellen Sie ein Thema und legen dann den Endpunkt wie die Lambda-Funktion fest, die Sie zuvor erstellt haben.

So erstellen Sie ein Amazon SNS SNS-Thema und abonnieren eine Lambda-Funktion

  1. Öffnen Sie die SNS-Konsole.

  2. Klicken Sie auf Topics (Themen) und wählen Sie Create topic (Thema erstellen). Geben Sie im Feld Name einen Namen ein.

  3. Wählen Sie unter Subscriptions (Abonnements) die Option Create subscription (Abonnement erstellen) aus.

  4. Notieren Sie den ARN des Themas (z. B. arn:aws:sns:{region}:{account id}:{topic name}).

  5. Wählen Sie Create subscription (Abonnement erstellen) aus:

    • FürProtocol (Protokoll), wählenAWSLambdaaus.

    • Für-EndpunktWählen Sie aus der Liste der verfügbaren Lambda-Funktionen den ARN der erstellten Lambda-Funktion aus.

  6. Wählen Sie Create subscription (Abonnement erstellen) aus.

Lambda -Herausgeberfunktion erstellen

In den folgenden Schritten wird die Lambda-FunktionMessagePublisherwird in Node.js implementiert. Die Funktion sendet eine Nachricht an das Amazon SNS SNS-Thema, das Sie zuvor erstellt haben. Die Funktion verwendetAWS SDK for JavaScriptSo senden Sie Benachrichtigungen von Amazon SNS und dem X-Ray SDK für Node.js zur InstrumentierungAWSSDK-Client.

So erstellen Sie die Herausgeberpaket

  1. Erstellen Sie einen Dateiordner und benennen Sie ihn, um anzugeben, dass es sich um die Herausgeberfunktion handelt (z. B. sns-xray-publisher).

  2. Erstellen Sie zwei Dateien: index.js und package.json.

  3. Fügen Sie folgenden Code in ei index.js.

    var AWSXRay = require('aws-xray-sdk'); var AWS = AWSXRay.captureAWS(require('aws-sdk')); exports.handler = function(event, context, callback) { var sns = new AWS.SNS(); sns.publish({ // You can replace the following line with your custom message. Message: process.env.MESSAGE || "Testing X-Ray trace header propagation", TopicArn: process.env.TOPIC_ARN }, function(err, data) { if (err) { console.log(err.stack); callback(err); } else { callback(null, "Message sent."); } }); };
  4. Fügen Sie folgenden Code in ei package.json.

    { "name": "sns-xray-publisher", "version": "1.0.0", "description": "A demo service to test SNS X-Ray trace header propagation", "dependencies": { "aws-xray-sdk": "^2.2.0" } }
  5. Führen Sie das folgende Skript innerhalb des Ordners sns-xray-publisher aus. Dieses erstellt die Datei package-lock.json und den Ordner node_modules, die alle Abhängigkeiten verarbeiten.

    npm install --production
  6. Komprimieren Sie den Ordner sns-xray-publisher in eine ZIP-Datei.

So erstellen Sie eine Herausgeberfunktion und aktivieren X-Ray

  1. Öffnen Sie die Lambda-Konsole und wählen Sie Create function (Funktion erstellen) aus.

  2. Wählen Sie Author from scratch (Vollkommen neu erstellen) aus.

    • Geben Sie im Feld Name einen Namen ein (z. B. MessagePublisher).

    • Verwenden Sie für Runtime (Laufzeit) die Option Node.js 10.x.

  3. Erweitern Sie unter Permissions (Berechtigungen) den Bereich Choose or create an execution role (Ausführungsrolle wählen oder erstellen):

    • Wählen Sie unter Ausführungsrolle die Option Neue Rolle aus AWS-Richtlinienvorlagen erstellen aus.

    • Geben Sie im Feld Role name (Rollenname) einen Namen ein.

    • Wählen Sie unter Policy Templates (Richtlinienvorlagen) die Option Amazon SNS publish policy (Amazon SNS-Veröffentlichungsrichtlinie) aus.

  4. Klicken Sie aufFunktion erstellenum Ihre Funktion in der Lambda-Konsole zu erstellen und anzuzeigen.

  5. Wählen Sie unter Function code (Funktionscode) für Code entry type (Codeeingabetyp) die Option Upload a .zip file (ZIP-Datei hochladen) aus.

  6. Wählen Sie das Herausgeberpaket, das Sie erstellt haben. Wählen Sie zum Hochladen oben rechts in der Konsole Save (Speichern) aus.

  7. Fügen Sie unter Environment variables (Umgebungsvariablen) eine Variable hinzu:

    • Verwenden Sie für Key (Schlüssel) den Schlüsselnamen TOPIC_ARN, der in der Publisher-Funktion definiert ist.

    • FürValueVerwenden Sie den Amazon SNS SNS-Thema ARN, den Sie zuvor aufgezeichnet haben.

  8. Fügen Sie optional eine andere Variable hinzu:

    • Geben Sie unter Key (Schlüssel) einen Schlüsselnamen ein (z. B. MESSAGE).

    • Geben Sie für Value (Wert) eine benutzerdefinierte Nachricht ein.

  9. In :Debuggen und FehlerbehandlungWählen Sie die OptionAktivieren vonAWSX-Rayaus.

  10. Wählen Sie Save (Speichern) aus.

Testen und Validieren der Kontextverbreitung

Sowohl Herausgeber- als auch Abonnentenfunktionen ermöglichen Lambda Active Tracing beim Senden von Traces. Die Herausgeberfunktion verwendet das X-Ray SDK, um denpublishSNS-API-Aufruf. Dann verbreitet Amazon SNS den Trace-Header an den Abonnenten. Der Abonnent nimmt den Trace-Header schließlich auf und führt den Trace fort. Verfolgen Sie die Trace-ID in den folgenden Schritten.

So erstellen Sie eine Herausgeberfunktion und aktivieren X-Ray

  1. Öffnen Sie die Lambda-Konsole und wählen Sie dann die Herausgeberfunktion, die Sie zuvor erstellt haben.

  2. Wählen Sie Test aus.

  3. Wählen Sie Create new test event (Neues Testereignis erstellen) aus.

    • Wählen Sie für Event template (Ereignisvorlage) die Vorlage Hello World aus.

    • Geben Sie im Feld Event name (Ereignisname) einen Namen ein.

  4. Wählen Sie Create (Erstellen) aus.

  5. Wählen Sie erneut Test (Testen) aus.

  6. Öffnen Sie zum Überprüfen die X-Ray-Konsole. Warten Sie mindestens 10 Sekunden, bis der Trace angezeigt wird.

  7. Wenn die Service-Karte erstellt wurde, vergewissern Sie sich, dass Ihre beiden Lambda-Funktionen und das Amazon SNS SNS-Thema angezeigt werden.

  8. Wählen Sie das Segment MessageSubscriber und anschließend View traces (Traces anzeigen).

  9. Wählen Sie den Trace in der Liste aus, um die Seite Details aufzurufen.

  10. Wählen Sie das Untersegment process_message.

  11. Wählen Sie die Registerkarte Annotations (Anmerkungen), um den Schlüssel message_content mit dem Nachrichtenwert des Absenders anzuzeigen.