Scrittura di uno script canary Node.js utilizzando il runtime Playwright
Argomenti
Creazione di pacchetti dei file canary Node.js per il runtime di Playwright
Il tuo 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 l'estensione .mjs o includere un file package.json con il campo “type”: “module” impostato. A differenza di altri runtime come Node.js Puppeteer, non è necessario salvare gli script in una struttura di cartelle specifica. Puoi direttamente creare pacchetti dei tuoi script. Utilizza il tuo strumento di compressione zip preferito per creare un file .zip con il file gestore nella directory root. Se il tuo script canary dipende da pacchetti o moduli aggiuntivi non inclusi nel runtime Synthetics, puoi aggiungere queste dipendenze al tuo file .zip. A tale scopo, puoi installare le librerie richieste dalla tua funzione nella directory node_modules eseguendo il comando npm install. I seguenti comandi della CLI di esempio creano un file .zip denominato my_deployment_package.zip, contenente il file index.js o index.mjs (gestore Synthetics) e le relative dipendenze. Nell'esempio, installi le dipendenze utilizzando il gestore di pacchetti npm.
~/my_function ├── index.mjs ├── synthetics.json ├── myhelper-util.mjs └── node_modules ├── mydependency
Crea un file .zip dei contenuti della cartella di progetto della directory root. Utilizza l'opzione r (ricorsiva), come illustrato nell'esempio seguente, per assicurarti che zip comprima le sottocartelle.
zip -r my_deployment_package.zip .
Aggiungi un file di configurazione Synthetics per configurare il comportamento di CloudWatch Synthetics. Puoi creare un file synthetics.json 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, assicurati 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 anche archiviare il canary in una cartella separata, ad esempio 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 canary di CloudWatch Synthetics
Puoi modificare uno script esistente per Node.js e Playwright da utilizzare come canary. Per ulteriori informazioni su Playwright, consulta la documentazione Playwright library
Puoi 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();
Converti lo script seguendo i passaggi di seguito:
-
Creare ed esportare una funzione
handler. Il gestore è la funzione del punto di ingresso per lo script. Puoi scegliere qualsiasi nome per la funzione del gestore, ma la funzione utilizzata nel tuo script dovrebbe essere la stessa nel gestore del tuo canary. Se il nome del tuo script èexampleCanary.mjs, e il nome della funzione del gestore èmyhandler, il tuo gestore canary è denominatoexampleCanary.myhandler. Nell'esempio seguente, il nome della funzione del gestore èhandler.exports.handler = async () => { // Your script here }; -
Importa il
Synthetics Playwright modulecome dipendenza.import { synthetics } from '@amzn/synthetics-playwright'; -
Avvia un browser utilizzando la funzione
Launchdi Synthetics.const browser = await synthetics.launch(); -
Crea una nuova pagina Playwright utilizzando la funzione
newPagedi Synthetics.const page = await synthetics.newPage();
Il tuo script è ora pronto per essere eseguito come canary di Synthetics. Di seguito è riportato lo script aggiornato:
Script aggiornato in formato ES6
Il file di script salvato con un'estensione .mjs.
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'estensione .js.
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(); } };
Configurazioni di CloudWatch Synthetics
Puoi configurare il comportamento del runtime Synthetics Playwright fornendo un file di configurazione JSON facoltativo denominato synthetics.json. Questo file dovrebbe essere incluso nella stessa posizione del file gestore. Sebbene un file di configurazione sia facoltativo, se non fornisci un file di configurazione o manca una chiave di configurazione, CloudWatch impiega i valori predefiniti.
Creazione di un pacchetto 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 di passaggio
-
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 ha avuto esito positivo. Il valore predefinito ètrue. -
screenshotOnStepFailure: determina se Synthetics deve acquisire uno screenshot dopo che un passaggio ha avuto esito negativo. Il valore predefinito ètrue. -
continueOnStepFailure: determina se uno script deve continuare anche dopo un passaggio non riuscito. Il valore predefinito èfalse. -
stepSuccessMetric: determina se viene emessa la metricaSuccessPercentdi un passaggio. La metricaSuccessPercentper un passaggio vale100per l'esecuzione canary se il passaggio ha esito positivo, mentre0se ha esito negativo. Il valore predefinito ètrue. -
stepDurationMetric: determina se viene emessa la metricaDurationdi un passaggio. La metricaDurationviene 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 report dei passaggi di Synthetics. Anche i campi di redazione dei dati sensibili restrictedHeaders e restrictedUrlParameters si applicano ai log generati da Synthetics.
-
includeRequestHeaders: indica se includere le intestazioni della richiesta nel report. Il valore predefinito èfalse. -
includeResponseHeaders: indica se includere le intestazioni della risposta nel report. Il valore predefinito èfalse. -
includeUrlPassword: indica se includere una password visualizzata nell'URL. Per impostazione predefinita, le password visualizzate negli URL vengono cancellate da log e report, per evitare la divulgazione di dati sensibili. Il valore predefinito èfalse. -
includeRequestBody: indica se includere il corpo della richiesta nel report. Il valore predefinito èfalse. -
includeResponseBody: indica se includere il corpo della risposta nel report. 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 inserendoincludeRequestHeaderscome true erestrictedHeaderscome['Authorization']. -
restrictedUrlParameters: un elenco di parametri del percorso dell'URL o della query da oscurare. Si applica agli URL visualizzati nei log, nei report e negli errori. Il parametro prevede la distinzione tra lettere maiuscole e minuscole. Puoi passare un asterisco (*) come valore per oscurare tutti i valori dei parametri del percorso dell'URL e delle 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 configurazioni 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 log di richieste e risposte.
-
logRequest: indica se registrare ogni richiesta nei log del canary. Per i canary dell'interfaccia utente, registra ogni richiesta inviata dal browser. Il valore predefinito èfalse. -
logResponse: indica se registrare ogni risposta nei log del canary. Per i canary dell'interfaccia utente, registra ogni risposta ricevuta dal browser. Il valore predefinito èfalse. -
logRequestBody: indica se registrare i corpi delle richieste insieme alle richieste nei log dei canary. Questa configurazione si applica solo selogRequestè true. Il valore predefinito èfalse. -
logResponseBody: indica se registrare i corpi delle risposte insieme alle richieste nei log dei canary. Questa configurazione si applica solo selogResponseè true. Il valore predefinito èfalse. -
logRequestHeaders: indica se registrare le intestazioni delle richieste insieme alle richieste nei log dei canary. Questa configurazione si applica solo selogRequestè true. Il valore predefinito èfalse. -
logResponseHeaders: indica se registrare le intestazioni delle risposte insieme alle risposte nei log dei canary. Questa configurazione si applica solo selogResponseè true. Il valore predefinito èfalse.
Configurazioni delle metriche HTTP
Configurazioni per metriche relative al conteggio delle richieste di rete con codici di stato HTTP diversi, emesse da CloudWatch Synthetics per questo canary.
-
metric_2xx: indica se emettere la metrica2xx(con la dimensioneCanaryName) per questo canary. Il valore predefinito ètrue. -
metric_4xx: indica se emettere la metrica4xx(con la dimensioneCanaryName) per questo canary. Il valore predefinito ètrue. -
metric_5xx: indica se emettere la metrica5xx(con la dimensioneCanaryName) per questo canary. Il valore predefinito ètrue. -
failedRequestsMetric: indica se emettere la metricafailedRequests(con la dimensioneCanaryName) per questo canary. Il valore predefinito ètrue. -
aggregatedFailedRequestsMetric: indica se emettere la metricafailedRequests(senza la dimensioneCanaryName) per questo canary. Il valore predefinito ètrue. -
aggregated2xxMetric: indica se emettere la metrica2xx(senza la dimensioneCanaryName) per questo canary. Il valore predefinito ètrue. -
aggregated4xxMetric: indica se emettere la metrica4xx(senza la dimensioneCanaryName) per questo canary. Il valore predefinito ètrue. -
aggregated5xxMetric: indica se emettere la metrica5xx(senza la dimensioneCanaryName) per questo canary. Il valore predefinito ètrue.
Configurazioni delle metriche del canary
Configurazioni per altre metriche emesse da CloudWatch Synthetics.
-
failedCanaryMetric: indica se emettere la metricaFailed(con la dimensioneCanaryName) per questo canary. Il valore predefinito ètrue. -
aggregatedFailedCanaryMetric: indica se emettere la metricaFailed(senza la dimensioneCanaryName) per questo canary. 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 automaticamenteCloudWatchSynthetics/. La configurazione specificata viene aggiunta all'agente utente generato. Il valore predefinito dell'agente utente da aggiungere è una stringa vuota (canary-arnto the user agent"").
Variabili di ambiente di CloudWatch Synthetics
Configura il livello e il formato di registrazione utilizzando le variabili di ambiente.
Formato dei log
Il runtime Playwright di CloudWatch Synthetics crea log CloudWatch per ogni esecuzione canary. I log sono scritti in formato JSON per facilitare le interrogazioni. Facoltativamente, puoi modificare il formato del log in TEXT.
-
Environment variable name: CW_SYNTHETICS_LOG_FORMAT -
Supported values: JSON, TEXT -
Default: JSON
Livelli di log
Sebbene l'attivazione della modalità Debug 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: INFO