Schreiben eines Node.js-Canary-Skript mit der Playwright-Laufzeit
Themen
Bündeln Ihrer Node.js-Canary-Dateien für die Playwright-Laufzeit
Ihr Canary-Skript besteht aus einer .js (CommonJS-Syntax) oder .mjs (ES-Syntax)-Datei, die Ihren Synthetics-Handler-Code enthält, zusammen mit allen zusätzlichen Paketen und Modulen, von denen Ihr Code abhängt. Im ES-Format (ECMAScript) erstellte Skripte sollten entweder .mjs als Erweiterung verwenden oder eine package.json-Datei mit dem Feldsatz „type“: „module“ enthalten. Im Gegensatz zu anderen Laufzeiten wie Node.js Puppeteer müssen Sie Ihre Skripts nicht in einer bestimmten Ordnerstruktur speichern. Sie können Ihre Skripte direkt bündeln. Erstellen Sie mit Ihrem bevorzugten zip-Programm eine .zip-Datei mit Ihrer Handler-Datei im Stammverzeichnis. 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. Um dies zu tun, können Sie die erforderlichen Bibliotheken Ihrer Funktion im node_modules-Verzeichnis installieren, indem Sie den npm install-Befehl ausführen. Die folgenden CLI-Befehle erstellen eine .zip-Datei mit dem Namen my_deployment_package.zip, welche die index.js- oder index.mjs-Datei (Synthetics-Handler) und die zugehörigen Abhängigkeiten enthält. Im Beispiel installieren Sie Abhängigkeiten mit dem npm-Paketmanager.
~/my_function ├── index.mjs ├── synthetics.json ├── myhelper-util.mjs └── node_modules ├── mydependency
Erstellen Sie im Stammverzeichnis eine .zip-Datei mit den Inhalten Ihres Projektordners. Verwenden Sie die r (rekursive) Option, wie im folgenden Beispiel gezeigt, um sicherzustellen, dass zip die Unterordner komprimiert.
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 auch in einem separaten Ordner (z. B. myFolder/my_canary_filename.mjs) ablegen. 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).
Ändern 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 Canary zu verwenden. Weitere Informationen zu Playwright finden Sie in der Dokumentation in der Playwright-Bibliothek
Sie können das folgende Playwright-Skript verwenden, das in der Datei exampleCanary.mjs gespeichert ist.
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 wie folgt:
-
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 SkriptnameexampleCanary.mjslautet und der Name der Handler-Funktionmyhandlerlautet, wird Ihr Canary-HandlerexampleCanary.myhandlergenannt. Im folgenden Beispiel lautet der Name der Handler-Funktionhandler.exports.handler = async () => { // Your script here }; -
Importieren Sie das
Synthetics Playwright moduleals Abhängigkeit.import { synthetics } from '@amzn/synthetics-playwright'; -
Starten Sie einen Browser mit der Synthetics
Launch-Funktion.const browser = await synthetics.launch(); -
Erstellen Sie mithilfe der Synthetics
newPage-Funktion eine neue Playwright-Seite.const page = await synthetics.newPage();
Ihr Skript kann nun als Synthetics-Canary ausgeführt werden. Das aktualisierte Skript ist das folgende:
Aktualisiertes Skript im ES6-Format
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(); } };
Aktualisiertes Skript im CommonJS-Format
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 synthetics.json bereitstellen. Diese Datei sollte am selben Speicherort wie die Handler-Datei gebündelt werden. Eine Konfigurationsdatei ist zwar optional, aber wenn Sie keine Konfigurationsdatei angeben oder ein Konfigurationsschlüssel fehlt, geht CloudWatch von Standardwerten aus.
Bündeln Ihrer 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 }
Schritt-Konfigurationen
-
screenshotOnStepStart– Legt fest, ob Synthetics vor Beginn des Schritts einen Screenshot aufnehmen soll. Der Standardwert isttrue. -
screenshotOnStepSuccess– Legt fest, ob Synthetics einen Screenshot aufnehmen soll, nachdem ein Schritt erfolgreich war. Der Standardwert isttrue. -
screenshotOnStepFailure– Legt fest, ob Synthetics einen Screenshot aufnehmen soll, nachdem ein Schritt fehlgeschlagen ist. Der Standardwert isttrue. -
continueOnStepFailure– Legt fest, ob ein Skript auch dann fortgesetzt werden soll, wenn ein Schritt fehlgeschlagen ist. Der Standardwert istfalse. -
stepSuccessMetric– Bestimmt, ob dieSuccessPercent-Metrik eines Schritts ausgegeben wird. DieSuccessPercent-Metrik für einen Schritt ist100für die Canary-Ausführung, wenn der Schritt erfolgreich ist und0, wenn der Schritt fehlschlägt. Der Standardwert isttrue. -
stepDurationMetric– Ermittelt, ob dieDuration-Metrik eines Schritts ausgegeben wird. DieDuration-Metrik wird als Dauer der Ausführung des Schritts in Millisekunden ausgegeben. Der Standardwert isttrue.
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 restrictedUrlParameters gelten auch für von Synthetics generierte Protokolle.
-
includeRequestHeaders– Gibt an, ob Anforderungs-Header in den Bericht aufgenommen werden sollen. Der Standardwert istfalse. -
includeResponseHeaders– Gibt an, ob Antwort-Header in den Bericht aufgenommen werden sollen. Der Standardwert istfalse. -
includeUrlPassword– Gibt an, ob ein Passwort eingefügt werden soll, das in der URL angezeigt wird. Standardmäßig werden Passwörter, die in URLs angezeigt werden, aus Protokollen und Berichten abgedichtet, um die Offenlegung vertraulicher Daten zu verhindern. Der Standardwert istfalse. -
includeRequestBody– Gibt an, ob der Anforderungstext in den Bericht aufgenommen werden soll. Der Standardwert istfalse. -
includeResponseBody– Gibt an, ob der Antworttext in den Bericht aufgenommen werden soll. Der Standardwert istfalse. -
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 Ihre Anmeldeinformationen beispielsweise verbergen, indem SieincludeRequestHeadersals wahr undrestrictedHeadersals['Authorization']übergeben. -
restrictedUrlParameters– Eine Liste von URL-Pfad- oder Abfrageparametern, die geschwärzt werden sollen. Dies gilt für URLs, die in Protokollen, Berichten und Fehlern angezeigt werden. Bei dem Parameter wird die Groß-/Kleinschreibung nicht beachtet. Sie können ein Sternchen (*) als Wert übergeben, um alle URL-Pfad- und Abfrageparameterwerte zu überarbeiten. Der Standardwert ist ein leeres Array. -
har– Legt fest, ob ein HTTP-Archiv (HAR) generiert werden soll. Der Standardwert isttrue.
Nachfolgend finden Sie ein Beispiel einer Berichts-Konfigurationsdatei.
"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
Protokollierungskonfigurationen
Gilt für von CloudWatch Synthetics generierte Protokolle. Steuert die Ausführlichkeit von Anfrage- und Antwortprotokollen.
-
logRequest– Gibt an, ob jede Anforderung in Canary-Protokollen protokolliert werden soll. Bei UI-Canarys protokolliert dies jede Anforderung, die vom Browser gesendet wird. Der Standardwert istfalse. -
logResponse– Gibt an, ob jede Antwort in Canary-Protokollen protokolliert werden soll. Bei UI-Canarys protokolliert dies jede vom Browser empfangene Antwort. Der Standardwert istfalse. -
logRequestBody– Gibt an, ob Anforderungstexte zusammen mit den Anforderungen in Canary- Protokollen protokolliert werden sollen. Diese Konfiguration gilt nur, wennlogRequestwahr ist. Der Standardwert istfalse. -
logResponseBody– Gibt an, ob Anforderungstexte zusammen mit den Anforderungen in Canary-Protokollen protokolliert werden sollen. Diese Konfiguration gilt nur, wennlogResponsewahr ist. Der Standardwert istfalse. -
logRequestHeaders– Gibt an, ob Anforderungsheader zusammen mit den Anforderungen in Canary-Protokollen protokolliert werden sollen. Diese Konfiguration gilt nur, wennlogRequestwahr ist. Der Standardwert istfalse. -
logResponseHeaders– Gibt an, ob Antwortheader zusammen mit den Antworten in Canary-Protokollen protokolliert werden sollen. Diese Konfiguration gilt nur, wennlogResponsewahr ist. Der Standardwert istfalse.
Konfigurationen von HTTP-Metriken
Konfigurationen für Metriken, die sich auf die Anzahl der Netzwerkanforderungen mit unterschiedlichen HTTP-Statuscodes beziehen, die von CloudWatch Synthetics für diesen Canary ausgegeben wurden.
-
metric_2xx– Gibt an, ob die2xx-Metrik (mit derCanaryName-Dimension) für diesen Canary emittiert werden soll. Der Standardwert isttrue. -
metric_4xx– Gibt an, ob die4xx-Metrik (mit derCanaryName-Dimension) für diesen Canary emittiert werden soll. Der Standardwert isttrue. -
metric_5xx– Gibt an, ob die5xx-Metrik (mit derCanaryName-Dimension) für diesen Canary emittiert werden soll. Der Standardwert isttrue. -
failedRequestsMetric– Gibt an, ob diefailedRequests-Metrik (mit derCanaryName-Dimension) für diesen Canary emittiert werden soll. Der Standardwert isttrue. -
aggregatedFailedRequestsMetric– Gibt an, ob diefailedRequests-Metrik (ohne dieCanaryName-Dimension) für diesen Canary emittiert werden soll. Der Standardwert isttrue. -
aggregated2xxMetric– Gibt an, ob die2xx-Metrik (ohne dieCanaryName-Dimension) für diesen Canary emittiert werden soll. Der Standardwert isttrue. -
aggregated4xxMetric– Gibt an, ob die4xx-Metrik (ohne dieCanaryName-Dimension) für diesen Canary emittiert werden soll. Der Standardwert isttrue. -
aggregated5xxMetric– Gibt an, ob die5xx-Metrik (ohne dieCanaryName-Dimension) für diesen Canary emittiert werden soll. Der Standardwert isttrue.
Canary-Metrik-Konfigurationen
Konfigurationen für andere von CloudWatch Synthetics ausgegebene Metriken.
-
failedCanaryMetric– Gibt an, ob dieFailed-Metrik (mit derCanaryName-Dimension) für diesen Canary emittiert werden soll. Der Standardwert isttrue. -
aggregatedFailedCanaryMetric– Gibt an, ob dieFailed-Metrik (ohne dieCanaryName-Dimension) für diesen Canary emittiert werden soll. Der Standardwert isttrue.
Sonstige 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 aufrufen, wenn Sie den Headless-Browser verwenden. CloudWatch Synthetics fügt automatischCloudWatchSynthetics/hinzu. Die angegebene Konfiguration wird an den generierten Benutzeragenten angehängt. Der Standard-Benutzeragent, der angehängt wird, ist eine leere Zeichenfolge (canary-arnto the user agent"").
CloudWatch-Synthetics-Umgebungsvariablen
Konfigurieren Sie die Protokollierungsebene und das Format mithilfe von Umgebungsvariablen.
Protokollformat
Die CloudWatch-Synthetics-Playwright-Laufzeit erstellt CloudWatch-Protokolle für jede Canary-Ausführung. Die Protokolle werden zur bequemen Abfrage im JSON-Format geschrieben. Optional können Sie das Protokollformat in TEXT ändern.
-
Environment variable name– CW_SYNTHETICS_LOG_FORMAT -
Supported values– JSON, TEXT -
Default– JSON
Protokollstufen
Die Aktivierung des Modus Debug erhöht zwar die Ausführlichkeit, kann aber bei der Fehlerbehebung nützlich sein.
-
Environment variable name– CW_SYNTHETICS_LOG_LEVEL -
Supported values– TRACE, DEBUG, INFO, WARN, ERROR, FATAL -
Default– INFO