Scrivere uno script canary Node.js usando il runtime Playwright - Amazon CloudWatch

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Scrivere uno script canary Node.js usando il runtime Playwright

Impacchettizzazione dei file canary Node.js per il runtime di Playwright

Lo script canary comprende un file .js (sintassi CommonJS) o .mjs (sintassi ES) contenente il codice del gestore Synthetics, insieme a tutti i pacchetti e moduli aggiuntivi da cui dipende il codice. Gli script creati in formato ES (ECMAScript) devono utilizzare .mjs come estensione o includere un file package.json con il set di campi «type»: «module». A differenza di altri runtime come Node.js Puppeteer, non è necessario salvare gli script in una struttura di cartelle specifica. Puoi impacchettare i tuoi script direttamente. Usa la tua zip utilità preferita per creare un .zip file con il tuo file handler alla radice. Se il tuo script canary dipende da pacchetti o moduli aggiuntivi che non sono inclusi nel runtime Synthetics, puoi aggiungere queste dipendenze al tuo file. .zip Per fare ciò, potete installare le librerie richieste dalla funzione nella node_modules directory eseguendo il comando. npm install I seguenti comandi CLI di esempio creano un .zip file denominato my_deployment_package.zip contenente il index.mjs file index.js or (gestore Synthetics) e le relative dipendenze. Nell'esempio, si installano le dipendenze utilizzando il gestore di pacchetti. npm

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

Create un .zip file che contenga il contenuto della cartella del progetto nella radice. Utilizzate l'opzione r (ricorsiva), come illustrato nell'esempio seguente, per assicurarvi che le sottocartelle vengano zip compresse.

zip -r my_deployment_package.zip .

Aggiungi un file di configurazione Synthetics per configurare il comportamento di Synthetics. CloudWatch È possibile creare un synthetics.json file e salvarlo nello stesso percorso del punto di ingresso o del file del gestore.

Facoltativamente, puoi anche archiviare il file del punto di ingresso in una struttura di cartelle a tua scelta. Tuttavia, assicuratevi che il percorso della cartella sia specificato nel nome del gestore.

Nome del gestore

Assicurati di impostare il punto di ingresso dello script del tuo canary (gestore) in modo che myCanaryFilename.functionName corrisponda al nome del file del punto di ingresso dello script. Facoltativamente, puoi memorizzare il canarino in una cartella separata come. myFolder/my_canary_filename.mjs Se lo archivi in una cartella separata, definisci il percorso nel punto di ingresso dello script, ad esempio myFolder/my_canary_filename.functionName.

Modifica di uno script Playwright esistente da utilizzare come canarino Synthetics CloudWatch

È possibile modificare uno script esistente per Node.js e Playwright da utilizzare come canarino. Per ulteriori informazioni su Playwright, consulta la documentazione della libreria Playwright.

È possibile utilizzare il seguente script Playwright salvato nel file. 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();

Convertite lo script eseguendo le seguenti operazioni:

  1. Creare ed esportare una funzione handler. Il gestore è la funzione del punto di ingresso per lo script. È possibile scegliere qualsiasi nome per la funzione handler, ma la funzione utilizzata nello script deve essere la stessa del gestore Canary. Se il nome dello script èexampleCanary.mjs, e il nome della funzione di gestione èmyhandler, il gestore Canary è denominato. exampleCanary.myhandler Nell'esempio seguente, il nome della funzione di gestione è. handler

    exports.handler = async () => { // Your script here };
  2. Importa il Synthetics Playwright module come dipendenza.

    import { synthetics } from '@amzn/synthetics-playwright';
  3. Avvia un browser utilizzando la funzione Launch Synthetics.

    const browser = await synthetics.launch();
  4. Crea una nuova pagina Playwright utilizzando la funzione Synthetics. newPage

    const page = await synthetics.newPage();

Lo script è ora pronto per essere eseguito come canarino Synthetics. Quello che segue è lo script aggiornato:

ES6 Formato dello script aggiornato

Il file di script salvato con un'.mjsestensione.

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(); } };

Script aggiornato in formato CommonJS

Il file di script salvato con un'.jsestensione.

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 Configurazioni Synthetics

È possibile configurare il comportamento del runtime Synthetics Playwright fornendo un file di configurazione JSON opzionale denominato. synthetics.json Questo file deve essere impacchettato nella stessa posizione del file del gestore. Sebbene un file di configurazione sia facoltativo, se non viene fornito un file di configurazione o manca una chiave di configurazione, vengono utilizzati i valori CloudWatch predefiniti.

Impacchettamento del file di configurazione

Di seguito sono riportati i valori di configurazione supportati e i relativi valori predefiniti.

{ "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 }

Configurazioni dei passaggi

  • screenshotOnStepStart— Determina se Synthetics deve acquisire uno screenshot prima dell'inizio del passaggio. Il valore predefinito è true.

  • screenshotOnStepSuccess— Determina se Synthetics deve acquisire uno screenshot dopo che un passaggio è stato completato con successo. Il valore predefinito è true.

  • screenshotOnStepFailure— Determina se Synthetics deve acquisire uno screenshot dopo che un passaggio è fallito. Il valore predefinito è true.

  • continueOnStepFailure— Determina se uno script deve continuare anche dopo che un passaggio è fallito. Il valore predefinito è false.

  • stepSuccessMetric— Determina se viene emessa la SuccessPercent metrica di un passaggio. La SuccessPercent metrica per un passo si 100 riferisce alla corsa canaria se la fase ha esito positivo e 0 se la fase fallisce. Il valore predefinito è true.

  • stepDurationMetric— Determina se viene emessa la Duration metrica di un passaggio. La Duration metrica viene emessa come durata, in millisecondi, dell'esecuzione del passaggio. Il valore predefinito è true.

Configurazioni dei report

Include tutti i report generati da CloudWatch Synthetics, come un file HAR e un rapporto sui passaggi di Synthetics. I campi restrictedHeaders di redazione dei dati sensibili si applicano restrictedUrlParameters anche ai log generati da Synthetics.

  • includeRequestHeaders— Se includere le intestazioni delle richieste nel rapporto. Il valore predefinito è false.

  • includeResponseHeaders— Se includere le intestazioni di risposta nel rapporto. Il valore predefinito è false.

  • includeUrlPassword— Se includere una password che appare nell'URL. Per impostazione predefinita, le password che compaiono in URLs vengono cancellate dai registri e dai report, per impedire la divulgazione di dati sensibili. Il valore predefinito è false.

  • includeRequestBody— Se includere il corpo della richiesta nel rapporto. Il valore predefinito è false.

  • includeResponseBody— Se includere il corpo della risposta nel rapporto. Il valore predefinito è false.

  • restrictedHeaders— Un elenco di valori di intestazione da ignorare, se le intestazioni sono incluse. Questo vale sia per le intestazioni della richiesta che della risposta. Ad esempio, puoi nascondere le tue credenziali passando includeRequestHeaders come true e as. restrictedHeaders ['Authorization']

  • restrictedUrlParameters— Un elenco di percorsi URL o parametri di query da oscurare. Questo vale per quelli URLs che appaiono nei log, nei report e negli errori. Il parametro prevede la distinzione tra lettere maiuscole e minuscole. È possibile passare un asterisco (*) come valore per oscurare tutti i valori del percorso URL e dei parametri di query. L'impostazione predefinita è una matrice vuota.

  • har— Determina se deve essere generato un archivio HTTP (HAR). Il valore predefinito è true.

Di seguito è riportato un esempio di file di configurazione del 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

Configurazioni di registrazione

Si applica ai log generati da CloudWatch Synthetics. Controlla la verbosità dei registri di richieste e risposte.

  • logRequest— Se registrare ogni richiesta nei registri di Canary. Per i canary dell'interfaccia utente, registra ogni richiesta inviata dal browser. Il valore predefinito è false.

  • logResponse— Se registrare ogni risposta in Canary Logs. Per i canary dell'interfaccia utente, registra ogni risposta ricevuta dal browser. Il valore predefinito è false.

  • logRequestBody— Se registrare i corpi delle richieste insieme alle richieste nei registri di Canary. Questa configurazione si applica solo se logRequest è vera. Il valore predefinito è false.

  • logResponseBody— Se registrare i corpi di risposta insieme alle richieste nei registri di Canary. Questa configurazione si applica solo se logResponse è vera. Il valore predefinito è false.

  • logRequestHeaders— Se registrare le intestazioni delle richieste insieme alle richieste nei registri di Canary. Questa configurazione si applica solo se logRequest è vera. Il valore predefinito è false.

  • logResponseHeaders— Se registrare le intestazioni delle risposte insieme alle risposte nei registri di Canary. Questa configurazione si applica solo se logResponse è vera. Il valore predefinito è false.

Configurazioni metriche HTTP

Configurazioni per le metriche relative al conteggio delle richieste di rete con codici di stato HTTP diversi, emesse da Synthetics CloudWatch per questo canarino.

  • metric_2xx— Se emettere la 2xx metrica (con la dimensione) per questo canarino. CanaryName Il valore predefinito è true.

  • metric_4xx— Se emettere la 4xx metrica (con la CanaryName dimensione) per questo canarino. Il valore predefinito è true.

  • metric_5xx— Se emettere la 5xx metrica (con la CanaryName dimensione) per questo canarino. Il valore predefinito è true.

  • failedRequestsMetric— Se emettere la failedRequests metrica (con la CanaryName dimensione) per questo canarino. Il valore predefinito è true.

  • aggregatedFailedRequestsMetric— Se emettere la failedRequests metrica (senza la CanaryName dimensione) per questo canarino. Il valore predefinito è true.

  • aggregated2xxMetric— Se emettere la 2xx metrica (senza la CanaryName dimensione) per questo canarino. Il valore predefinito è true.

  • aggregated4xxMetric— Se emettere la 4xx metrica (senza la CanaryName dimensione) per questo canarino. Il valore predefinito è true.

  • aggregated5xxMetric— Se emettere la 5xx metrica (senza la CanaryName dimensione) per questo canarino. Il valore predefinito è true.

Configurazioni metriche Canary

Configurazioni per altre metriche emesse da Synthetics. CloudWatch

  • failedCanaryMetric— Se emettere la Failed metrica (con la dimensione) per questo canarino. CanaryName Il valore predefinito è true.

  • aggregatedFailedCanaryMetric— Se emettere la Failed metrica (senza la CanaryName dimensione) per questo canarino. Il valore predefinito è true.

Altre configurazioni

  • userAgent— Una stringa da aggiungere all'agente utente. L'agente utente è una stringa inclusa nell'intestazione della richiesta e identifica il browser nei siti Web visitati quando si utilizza il browser headless. CloudWatch Synthetics aggiunge automaticamente. CloudWatchSynthetics/canary-arn to the user agent La configurazione specificata viene aggiunta all'agente utente generato. Il valore predefinito dell'agente utente da aggiungere è una stringa vuota ()"".

CloudWatch Variabili di ambiente Synthetics

Configura il livello e il formato di registrazione utilizzando le variabili di ambiente.

Formato del registro

Il runtime CloudWatch Synthetics Playwright CloudWatch crea registri per ogni corsa canaria. I log sono scritti in formato JSON per facilitare le interrogazioni. Facoltativamente, è possibile modificare il formato del registro in. TEXT

  • Environment variable name— CW_SYNTHETICS_LOG_FORMAT

  • Supported values— JSON, TESTO

  • Default— JSON

Livelli di registro

Sebbene la Debug modalità di attivazione aumenti la verbosità, può essere utile per la risoluzione dei problemi.

  • Environment variable name— CW_SYNTHETICS_LOG_LEVEL

  • Supported values— TRACE, DEBUG, INFO, WARN, ERROR, FATAL

  • Default— INFORMAZIONI