

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 Node.js-Canary-Skript mit der Playwright-Laufzeit
<a name="Synthetics_WritingCanary_Nodejs_Playwright"></a>

**Topics**
+ [Bündeln Ihrer Node.js-Canary-Dateien für die Playwright-Laufzeit](#Synthetics_canary_Nodejs_Playwright_package)
+ [Änderung eines vorhandenen Playwright-Skripts zur Verwendung als CloudWatch Synthetics Canary](#CloudWatch_Synthetics_canary_edit_Playwright_script)
+ [CloudWatch Synthetics Konfigurationen](#Synthetics_canary_configure_Playwright_script)

## Bündeln Ihrer Node.js-Canary-Dateien für die Playwright-Laufzeit
<a name="Synthetics_canary_Nodejs_Playwright_package"></a>

 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 (ECMAScript) -Format erstellte Skripts 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`).

## Änderung eines vorhandenen Playwright-Skripts zur Verwendung als CloudWatch Synthetics Canary
<a name="CloudWatch_Synthetics_canary_edit_Playwright_script"></a>

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](https://playwright.dev/docs/api/class-playwright). 

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:

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 `exampleCanary.mjs` lautet und der Name der Handler-Funktion `myhandler` lautet, wird Ihr Canary-Handler `exampleCanary.myhandler` genannt. Im folgenden Beispiel lautet der Name der Handler-Funktion `handler`.

   ```
   exports.handler = async () => {
     // Your script here
     };
   ```

1. Importieren Sie das `Synthetics Playwright module` als Abhängigkeit.

   ```
   import { synthetics } from '@aws/synthetics-playwright';
   ```

1. Starten Sie einen Browser mit der Synthetics `Launch`-Funktion.

   ```
   const browser = await synthetics.launch();
   ```

1. 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:

 **Das Format des Skripts wurde aktualisiert ES6 ** 

Die Skriptdatei wurde mit einer `.mjs`-Erweiterung gespeichert.

```
import { synthetics } from '@aws/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('@aws/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
<a name="Synthetics_canary_configure_Playwright_script"></a>

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, wenn Sie jedoch keine Konfigurationsdatei angeben oder ein Konfigurationsschlüssel fehlt, wird von Standardwerten CloudWatch ausgegangen.

 **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 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 ist `100` für die Canary-Ausführung, 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 `restrictedUrlParameters` gelten auch für von Synthetics generierte Protokolle. 
+ `includeRequestHeaders` – Gibt an, ob Anforderungs-Header in den Bericht aufgenommen werden sollen. Der Standardwert ist `false`. 
+ `includeResponseHeaders` – Gibt an, ob Antwort-Header in den Bericht aufgenommen werden sollen. Der Standardwert ist `false`.
+ `includeUrlPassword` – Gibt an, ob ein Passwort eingefügt werden soll, das in der URL angezeigt wird. 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` – Gibt an, ob der Anforderungstext in den Bericht aufgenommen werden soll. Der Standardwert ist `false`. 
+ `includeResponseBody` – Gibt an, ob der Antworttext 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 Ihre Anmeldeinformationen beispielsweise verbergen, indem Sie `includeRequestHeaders` als wahr und `restrictedHeaders` als `['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 ü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 ist `true`.

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 Anforderungs- 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 ist ` false`. 
+ `logResponse` – Gibt an, ob jede Antwort in Canary-Protokollen protokolliert werden soll. Bei UI-Canarys protokolliert dies jede vom Browser empfangene Antwort. Der Standardwert ist ` false`. 
+ `logRequestBody` – Gibt an, ob Anforderungstexte zusammen mit den Anforderungen in Canary- Protokollen protokolliert werden sollen. Diese Konfiguration gilt nur, wenn `logRequest` wahr ist. Der Standardwert ist `false`. 
+ `logResponseBody` – Gibt an, ob Anforderungstexte zusammen mit den Anforderungen in Canary-Protokollen protokolliert werden sollen. Diese Konfiguration gilt nur, wenn `logResponse` wahr ist. Der Standardwert ist `false`. 
+ `logRequestHeaders` – Gibt an, ob Anforderungsheader zusammen mit den Anforderungen in Canary-Protokollen protokolliert werden sollen. Diese Konfiguration gilt nur, wenn ` logRequest` wahr ist. Der Standardwert ist `false`. 
+ `logResponseHeaders` – Gibt an, ob Antwortheader zusammen mit den Antworten in Canary-Protokollen protokolliert werden sollen. Diese Konfiguration gilt nur, wenn ` logResponse` wahr 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` – Gibt an, ob die `2xx`-Metrik (mit der `CanaryName`-Dimension) für diesen Canary emittiert werden soll. Der Standardwert ist ` true`. 
+ `metric_4xx` – Gibt an, ob die `4xx`-Metrik (mit der `CanaryName`-Dimension) für diesen Canary emittiert werden soll. Der Standardwert ist ` true`. 
+ `metric_5xx` – Gibt an, ob die `5xx`-Metrik (mit der `CanaryName`-Dimension) für diesen Canary emittiert werden soll. Der Standardwert ist ` true`. 
+ `failedRequestsMetric` – Gibt an, ob die ` failedRequests`-Metrik (mit der `CanaryName`-Dimension) für diesen Canary emittiert werden soll. Der Standardwert ist `true`. 
+ `aggregatedFailedRequestsMetric` – Gibt an, ob die ` failedRequests`-Metrik (ohne die `CanaryName`-Dimension) für diesen Canary emittiert werden soll. Der Standardwert ist `true`. 
+ `aggregated2xxMetric` – Gibt an, ob die `2xx`-Metrik (ohne die `CanaryName`-Dimension) für diesen Canary emittiert werden soll. Der Standardwert ist `true`. 
+ `aggregated4xxMetric` – Gibt an, ob die `4xx`-Metrik (ohne die `CanaryName`-Dimension) für diesen Canary emittiert werden soll. Der Standardwert ist `true`. 
+ `aggregated5xxMetric` – Gibt an, ob die `5xx`-Metrik (ohne die `CanaryName`-Dimension) für diesen Canary emittiert werden soll. Der Standardwert ist `true`. 

 **Canary-Metrik-Konfigurationen** 

Konfigurationen für andere von CloudWatch Synthetics ausgegebene Metriken.
+ `failedCanaryMetric` – Gibt an, ob die `Failed`-Metrik (mit der `CanaryName`-Dimension) für diesen Canary emittiert werden soll. Der Standardwert ist ` true`. 
+ `aggregatedFailedCanaryMetric` – Gibt an, ob die ` Failed`-Metrik (ohne die `CanaryName`-Dimension) für diesen Canary emittiert werden soll. Der Standardwert ist `true`. 

 **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 besuchen, wenn Sie den Headless-Browser verwenden. CloudWatch Synthetics fügt automatisch hinzu`CloudWatchSynthetics/canary-arn to the user agent`. Die angegebene Konfiguration wird an den generierten Benutzeragenten angehängt. Der Standard-Benutzeragent, der angehängt wird, ist eine leere Zeichenfolge (`""`).

### CloudWatch Synthetics-Umgebungsvariablen
<a name="Synthetics_canary_Nodejs_Playwright_script"></a>

Konfigurieren Sie die Protokollierungsebene und das Format mithilfe von Umgebungsvariablen.

 **Protokollformat** 

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 `TEXT` ändern.
+ `Environment variable name` – CW\$1SYNTHETICS\$1LOG\$1FORMAT 
+ `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\$1SYNTHETICS\$1LOG\$1LEVEL
+ `Supported values` – TRACE, DEBUG, INFO, WARN, ERROR, FATAL 
+ `Default` – INFO