Schreiben eines kanarischen Skripts für Node.js mit der Playwright-Laufzeit - Amazon CloudWatch

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.

Schreiben eines kanarischen Skripts für Node.js mit der Playwright-Laufzeit

Ihre kanarischen Dateien vom Typ Node.js für die Playwright-Laufzeit verpacken

Ihr kanarisches Skript besteht aus einer Datei .js (CommonJS-Syntax) oder .mjs (ES-Syntax), die Ihren Synthetics-Handler-Code enthält, zusammen mit allen zusätzlichen Paketen und Modulen, von denen Ihr Code abhängt. Skripte, die im ES (ECMAScript) -Format erstellt wurden, sollten entweder .mjs als Erweiterung verwenden oder eine package.json-Datei mit dem Feldsatz „type“: „module“ enthalten. Im Gegensatz zu anderen Runtimes wie Node.js Puppeteer müssen Sie Ihre Skripts nicht in einer bestimmten Ordnerstruktur speichern. Sie können Ihre Skripte direkt verpacken. Verwenden Sie Ihr bevorzugtes zip Hilfsprogramm, um eine .zip Datei mit Ihrer Handler-Datei im Stammverzeichnis zu erstellen. Wenn Ihr Canary-Skript von zusätzlichen Paketen oder Modulen abhängt, die nicht in der Synthetics-Laufzeit enthalten sind, können Sie diese Abhängigkeiten zu Ihrer .zip Datei hinzufügen. Dazu können Sie die für Ihre Funktion erforderlichen Bibliotheken im node_modules Verzeichnis installieren, indem Sie den npm install Befehl ausführen. Die folgenden CLI-Beispielbefehle erstellen eine .zip Datei my_deployment_package.zip mit dem Namen, die die index.js index.mjs OR-Datei (Synthetics-Handler) und ihre Abhängigkeiten enthält. In dem Beispiel installieren Sie Abhängigkeiten mit dem npm Paketmanager.

~/my_function ├── index.mjs ├── synthetics.json ├── myhelper-util.mjs └── node_modules ├── mydependency

Erstellen Sie eine .zip Datei, die den Inhalt Ihres Projektordners im Stammverzeichnis enthält. Verwenden Sie die Option r (rekursiv), wie im folgenden Beispiel gezeigt, um sicherzustellen, dass die zip Unterordner komprimiert werden.

zip -r my_deployment_package.zip .

Fügen Sie eine Synthetics-Konfigurationsdatei hinzu, um das Verhalten von CloudWatch Synthetics zu konfigurieren. Sie können eine synthetics.json Datei erstellen und sie unter demselben Pfad wie Ihren Einstiegspunkt oder Ihre Handler-Datei speichern.

Optional können Sie Ihre Einstiegspunktdatei auch in einer Ordnerstruktur Ihrer Wahl speichern. Stellen Sie jedoch sicher, dass der Ordnerpfad in Ihrem Handlernamen angegeben ist.

Handlername

Legen Sie den Skript-Eintrittspunkt Ihres Canary (Handler) als myCanaryFilename.functionName fest, damit er mit dem Dateinamen des Skript-Eintrittspunkts übereinstimmt. Sie können den Canary optional in einem separaten Ordner speichern, z. myFolder/my_canary_filename.mjs B. Wenn Sie ihn in einem separaten Ordner speichern, geben Sie den entsprechenden Pfad in Ihrem Skript-Eintrittspunkt an (z. B. myFolder/my_canary_filename.functionName).

Änderung eines vorhandenen Playwright-Skripts zur Verwendung als CloudWatch Synthetics Canary

Sie können ein vorhandenes Skript für Node.js und Playwright bearbeiten, um es als Kanariensystem zu verwenden. Weitere Informationen zu Playwright finden Sie in der Dokumentation zur Playwright-Bibliothek.

Sie können das folgende Playwright-Skript verwenden, das in einer Datei gespeichert ist. exampleCanary.mjs

import { chromium } from 'playwright'; import { expect } from '@playwright/test'; const browser = await chromium.launch(); const page = await browser.newPage(); await page.goto('https://example.com', {timeout: 30000}); await page.screenshot({path: 'example-home.png'}); const title = await page.title(); expect(title).toEqual("Example Domain"); await browser.close();

Konvertieren Sie das Skript, indem Sie die folgenden Schritte ausführen:

  1. Erstellen und exportieren Sie eine handler-Funktion. Der Handler ist die Eintrittsfunktion für das Skript. Sie können einen beliebigen Namen für die Handler-Funktion wählen, aber die Funktion, die in Ihrem Skript verwendet wird, sollte dieselbe sein wie in Ihrem Canary-Handler. Wenn Ihr Skriptname lautet exampleCanary.mjs und der Name der Handler-Funktion lautetmyhandler, ist Ihr Canary-Handler benanntexampleCanary.myhandler. Im folgenden Beispiel lautet der Name der Handler-Funktionhandler.

    exports.handler = async () => { // Your script here };
  2. Importieren Sie das Synthetics Playwright module als Abhängigkeit.

    import { synthetics } from '@amzn/synthetics-playwright';
  3. Starten Sie einen Browser mit der Launch Synthetics-Funktion.

    const browser = await synthetics.launch();
  4. Erstellen Sie mithilfe der newPage Synthetics-Funktion eine neue Playwright-Seite.

    const page = await synthetics.newPage();

Ihr Skript ist jetzt bereit, als Synthetics Canary ausgeführt zu werden. Das Folgende ist das aktualisierte Skript:

Das ES6 Format des Skripts wurde aktualisiert

Die Skriptdatei wurde mit einer .mjs Erweiterung gespeichert.

import { synthetics } from '@amzn/synthetics-playwright'; import { expect } from '@playwright/test'; export const handler = async (event, context) => { try { // Launch a browser const browser = await synthetics.launch(); // Create a new page const page = await synthetics.newPage(browser); // Navigate to a website await page.goto('https://www.example.com', {timeout: 30000}); // Take screenshot await page.screenshot({ path: '/tmp/example.png' }); // Verify the page title const title = await page.title(); expect(title).toEqual("Example Domain"); } finally { // Ensure browser is closed await synthetics.close(); } };

Das Skript im CommonJS-Format wurde aktualisiert

Die Skriptdatei wurde mit einer .js Erweiterung gespeichert.

const { synthetics } = require('@amzn/synthetics-playwright'); const { expect } = require('@playwright/test'); exports.handler = async (event) => { try { const browser = await synthetics.launch(); const page = await synthetics.newPage(browser); await page.goto('https://www.example.com', {timeout: 30000}); await page.screenshot({ path: '/tmp/example.png' }); const title = await page.title(); expect(title).toEqual("Example Domain"); } finally { await synthetics.close(); } };

CloudWatch Synthetics Konfigurationen

Sie können das Verhalten der Synthetics Playwright-Laufzeit konfigurieren, indem Sie eine optionale JSON-Konfigurationsdatei mit dem Namen bereitstellen. synthetics.json Diese Datei sollte am selben Speicherort wie die Handler-Datei gepackt werden. Eine Konfigurationsdatei ist zwar optional, wenn Sie jedoch keine Konfigurationsdatei angeben oder ein Konfigurationsschlüssel fehlt, wird von Standardwerten CloudWatch ausgegangen.

Verpacken Sie Ihre Konfigurationsdatei

Im Folgenden sind die unterstützten Konfigurationswerte und ihre Standardwerte aufgeführt.

{ "step": { "screenshotOnStepStart": false, "screenshotOnStepSuccess": false, "screenshotOnStepFailure": false, "stepSuccessMetric": true, "stepDurationMetric": true, "continueOnStepFailure": true, "stepsReport": true }, "report": { "includeRequestHeaders": true, "includeResponseHeaders": true, "includeUrlPassword": false, "includeRequestBody": true, "includeResponseBody": true, "restrictedHeaders": ['x-amz-security-token', 'Authorization'], // Value of these headers is redacted from logs and reports "restrictedUrlParameters": ['Session', 'SigninToken'] // Values of these url parameters are redacted from logs and reports }, "logging": { "logRequest": false, "logResponse": false, "logResponseBody": false, "logRequestBody": false, "logRequestHeaders": false, "logResponseHeaders": false }, "httpMetrics": { "metric_2xx": true, "metric_4xx": true, "metric_5xx": true, "failedRequestsMetric": true, "aggregatedFailedRequestsMetric": true, "aggregated2xxMetric": true, "aggregated4xxMetric": true, "aggregated5xxMetric": true }, "canaryMetrics": { "failedCanaryMetric": true, "aggregatedFailedCanaryMetric": true }, "userAgent": "", "har": true }

Schrittweise Konfigurationen

  • screenshotOnStepStart— Legt fest, ob Synthetics vor Beginn des Schritts einen Screenshot aufnehmen soll. Der Standardwert ist true.

  • screenshotOnStepSuccess— Legt fest, ob Synthetics einen Screenshot aufnehmen soll, nachdem ein Schritt erfolgreich war. Der Standardwert ist true.

  • screenshotOnStepFailure— Legt fest, ob Synthetics einen Screenshot aufnehmen soll, nachdem ein Schritt fehlgeschlagen ist. Der Standardwert ist true.

  • continueOnStepFailure— Legt fest, ob ein Skript auch dann fortgesetzt werden soll, wenn ein Schritt fehlgeschlagen ist. Der Standardwert ist false.

  • stepSuccessMetric— Bestimmt, ob die SuccessPercent Metrik eines Schritts ausgegeben wird. Die SuccessPercent Metrik für einen Schritt gilt 100 für den Canary Run, wenn der Schritt erfolgreich ist und 0 wenn der Schritt fehlschlägt. Der Standardwert ist true.

  • stepDurationMetric— Ermittelt, ob die Duration Metrik eines Schritts ausgegeben wird. Die Duration Metrik wird als Dauer der Ausführung des Schritts in Millisekunden ausgegeben. Der Standardwert ist true.

Konfigurationen melden

Beinhaltet alle von CloudWatch Synthetics generierten Berichte, z. B. eine HAR-Datei und einen Synthetics-Schrittbericht. Felder zur Schwärzung sensibler Daten restrictedHeaders und gelten restrictedUrlParameters auch für von Synthetics generierte Protokolle.

  • includeRequestHeaders— Ob Anforderungsheader in den Bericht aufgenommen werden sollen. Der Standardwert ist false.

  • includeResponseHeaders— Ob Antwort-Header in den Bericht aufgenommen werden sollen. Der Standardwert ist false.

  • includeUrlPassword— Ob ein Passwort aufgenommen werden soll, das in der URL erscheint. Standardmäßig URLs werden Passwörter, die in erscheinen, aus Protokollen und Berichten entfernt, um die Offenlegung vertraulicher Daten zu verhindern. Der Standardwert ist false.

  • includeRequestBody— Ob der Text der Anfrage in den Bericht aufgenommen werden soll. Der Standardwert ist false.

  • includeResponseBody— Ob die Antwortstelle in den Bericht aufgenommen werden soll. Der Standardwert ist false.

  • restrictedHeaders— Eine Liste von Header-Werten, die ignoriert werden sollen, wenn Header enthalten sind. Dies gilt sowohl für Anforderungs- als auch für Antwort-Header. Sie können beispielsweise Ihre Anmeldeinformationen verbergen, indem Sie die Werte true und includeRequestHeaders restrictedHeaders as ['Authorization'] übergeben.

  • restrictedUrlParameters— Eine Liste von URL-Pfad- oder Abfrageparametern, die geschwärzt werden sollen. Dies gilt für Daten URLs , die in Protokollen, Berichten und Fehlern vorkommen. Bei dem Parameter wird die Groß-/Kleinschreibung nicht beachtet. Sie können ein Sternchen (*) als Wert angeben, um alle URL-Pfad- und Abfrageparameterwerte zu unkennzeichnen. Der Standardwert ist ein leeres Array.

  • har— Legt fest, ob ein HTTP-Archiv (HAR) generiert werden soll. Der Standardwert ist true.

Im Folgenden finden Sie ein Beispiel für eine Berichtskonfigurationsdatei.

"includeRequestHeaders": true, "includeResponseHeaders": true, "includeUrlPassword": false, "includeRequestBody": true, "includeResponseBody": true, "restrictedHeaders": ['x-amz-security-token', 'Authorization'], // Value of these headers is redacted from logs and reports "restrictedUrlParameters": ['Session', 'SigninToken'] // Values of these URL parameters are redacted from logs and reports

Konfigurationen protokollieren

Gilt für von CloudWatch Synthetics generierte Protokolle. Steuert die Ausführlichkeit von Anfrage- und Antwortprotokollen.

  • logRequest— Ob jede Anfrage in Canary-Logs protokolliert werden soll. Bei UI-Canarys protokolliert dies jede Anforderung, die vom Browser gesendet wird. Der Standardwert ist false.

  • logResponse— Ob jede Antwort in Canary-Logs protokolliert werden soll. Bei UI-Canarys protokolliert dies jede vom Browser empfangene Antwort. Der Standardwert ist false.

  • logRequestBody— Ob Anfragetexte zusammen mit den Anfragen in Canary-Logs protokolliert werden sollen. Diese Konfiguration gilt nur, wenn sie wahr logRequest ist. Der Standardwert ist false.

  • logResponseBody— Ob die Antworttexte zusammen mit den Anfragen in Canary-Logs protokolliert werden sollen. Diese Konfiguration gilt nur, wenn sie wahr logResponse ist. Der Standardwert ist false.

  • logRequestHeaders— Ob die Header der Anfragen zusammen mit den Anfragen in den Canary-Logs protokolliert werden sollen. Diese Konfiguration gilt nur, wenn sie wahr logRequest ist. Der Standardwert ist false.

  • logResponseHeaders— Ob die Antwort-Header zusammen mit den Antworten in Canary-Logs protokolliert werden sollen. Diese Konfiguration gilt nur, wenn sie wahr logResponse ist. Der Standardwert ist false.

Konfigurationen von HTTP-Metriken

Konfigurationen für Metriken, die sich auf die Anzahl der Netzwerkanfragen mit unterschiedlichen HTTP-Statuscodes beziehen, die von CloudWatch Synthetics für diesen Kanarienvogel ausgegeben wurden.

  • metric_2xx— Ob die 2xx Metrik (mit der CanaryName Dimension) für diesen Canary ausgegeben werden soll. Der Standardwert ist true.

  • metric_4xx— Ob die 4xx Metrik (mit der CanaryName Dimension) für diesen Kanarienvogel ausgegeben werden soll. Der Standardwert ist true.

  • metric_5xx— Ob die 5xx Metrik (mit der CanaryName Dimension) für diesen Kanarienvogel ausgegeben werden soll. Der Standardwert ist true.

  • failedRequestsMetric— Ob die failedRequests Metrik (mit der CanaryName Dimension) für diesen Kanarienvogel ausgegeben werden soll. Der Standardwert ist true.

  • aggregatedFailedRequestsMetric— Ob die failedRequests Metrik (ohne die CanaryName Dimension) für diesen Kanarienvogel ausgegeben werden soll. Der Standardwert ist true.

  • aggregated2xxMetric— Ob die 2xx Metrik (ohne die CanaryName Dimension) für diesen Kanarienvogel ausgegeben werden soll. Der Standardwert ist true.

  • aggregated4xxMetric— Ob die 4xx Metrik (ohne die CanaryName Dimension) für diesen Kanarienvogel ausgegeben werden soll. Der Standardwert ist true.

  • aggregated5xxMetric— Ob die 5xx Metrik (ohne die CanaryName Dimension) für diesen Kanarienvogel ausgegeben werden soll. Der Standardwert ist true.

Kanarische metrische Konfigurationen

Konfigurationen für andere von CloudWatch Synthetics ausgegebene Metriken.

  • failedCanaryMetric— Ob die Failed Metrik (mit der CanaryName Dimension) für diesen Kanarienvogel ausgegeben werden soll. Der Standardwert ist true.

  • aggregatedFailedCanaryMetric— Ob die Failed Metrik (ohne die CanaryName Dimension) für diesen Kanarienvogel ausgegeben werden soll. Der Standardwert ist true.

Andere Konfigurationen

  • userAgent— Eine Zeichenfolge, die an den Benutzeragenten angehängt werden soll. Der Benutzeragent ist eine Zeichenfolge, die im Anforderungsheader enthalten ist und Ihren Browser gegenüber Websites identifiziert, die Sie besuchen, wenn Sie den Headless-Browser verwenden. CloudWatch Synthetics fügt automatisch hinzuCloudWatchSynthetics/canary-arn to the user agent. Die angegebene Konfiguration wird an den generierten Benutzeragenten angehängt. Der Standardwert für den Benutzeragenten, der angehängt werden soll, ist eine leere Zeichenfolge ()"".

CloudWatch Synthetics-Umgebungsvariablen

Konfigurieren Sie die Protokollierungsebene und das Format mithilfe von Umgebungsvariablen.

Format des Protokolls

Die CloudWatch Synthetics Playwright Runtime erstellt CloudWatch Protokolle für jeden Canary-Run. Die Protokolle werden zur bequemen Abfrage im JSON-Format geschrieben. Optional können Sie das Protokollformat in ändern. TEXT

  • Environment variable name— CW_SYNTHETICS_LOG_FORMAT

  • Supported values— JSON, TEXT

  • Default— JSON

Protokollebenen

DebugDer Aktivierungsmodus erhöht zwar die Ausführlichkeit, kann aber bei der Problembehandlung nützlich sein.

  • Environment variable name— CW_SYNTHETICS_LOG_LEVEL

  • Supported values— TRACE, DEBUG, INFO, WARN, FEHLER, SCHWERWIEGEND

  • Default— INFORMATIONEN