Escritura de un script de canario de Node.js mediante el tiempo de ejecución de Playwright
Temas
Empaquetado de los archivos de canarios de Node.js para el tiempo de ejecución de Playwright
El script de canarios incluye un archivo .js
(sintaxis de CommonJS) o .mjs
(sintaxis de ES) que contiene el código del controlador de Synthetics, junto con los paquetes y módulos adicionales de los que depende el código. Los scripts creados en formato ES (ECMAScript) deben usar la extensión .mjs o incluir un archivo package.json con el conjunto de campos “type”: “module”. A diferencia de otros tiempos de ejecución, como Node.js Puppeteer, no es necesario guardar los scripts en una estructura de carpetas específica. Puede empaquetar los scripts de manera directa. Utilice la utilidad de compresión de zip
que prefiera para crear un archivo .zip
con el archivo del controlador en la raíz. Si el script del canario depende de paquetes o módulos adicionales que no se encuentran incluidos en el tiempo de ejecución de Synthetics, puede agregar estas dependencias al archivo .zip
. Para ello, puede instalar las bibliotecas necesarias de la función en el directorio node_modules
mediante la ejecución del comando npm install
. Los siguientes comandos de la CLI crean un archivo .zip
llamado my_deployment_package.zip
, que contiene el archivo index.js
o index.mjs
(controlador de Synthetics) y sus dependencias. En el ejemplo, las dependencias se instalan mediante el administrador de paquetes npm
.
~/my_function ├── index.mjs ├── synthetics.json ├── myhelper-util.mjs └── node_modules ├── mydependency
Cree un archivo .zip
con el contenido de la carpeta del proyecto en la raíz. Utilice la opción r
(recursiva), como se muestra en el siguiente ejemplo, para asegurarse de que el archivo zip
comprime las subcarpetas.
zip -r my_deployment_package.zip .
Agregue un archivo de configuración de Synthetics para configurar el comportamiento de CloudWatch Synthetics. Puede crear un archivo synthetics.json
y guardarlo en la misma ruta que el archivo de punto de entrada o controlador.
Si lo desea, también puede almacenar el archivo de punto de entrada en la estructura de carpetas que desee. Sin embargo, asegúrese de que la ruta de la carpeta esté especificada en el nombre del controlador.
Nombre del controlador
Asegúrese de establecer el punto de entrada del script (controlador) del valor controlado como myCanaryFilename.functionName
para que coincida con el nombre de archivo del punto de entrada del script. También puede almacenar el canario en una carpeta independiente, como myFolder/my_canary_filename.mjs
. Si lo almacena en una carpeta independiente, especifique esa ruta en el punto de entrada del script, como myFolder/my_canary_filename.functionName
.
Cambio de un script de Playwright existente para usarlo como canario de CloudWatch Synthetics
Puede editar un script existente para Node.js y Playwright para utilizarlo como canario. Para obtener más información sobre Playwight, consulte la documentación de la biblioteca de Playwight
Puede utilizar el siguiente script de Playwright que está guardado en un archivo 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();
Para convertir el script, haga lo siguiente:
-
Crear y exportar una función de
handler
. El controlador es la función de punto de entrada para el script. Puede elegir cualquier nombre para la función de controlador, pero la función que se utilice en el script debe ser la misma que en el controlador del canario. Si el nombre de su script esexampleCanary.mjs
y el nombre de la función del controlador esmyhandler
, el controlador del canario de llamaráexampleCanary.myhandler
. En el siguiente ejemplo, el nombre de la función del controlador eshandler
.exports.handler = async () => { // Your script here };
-
Importe
Synthetics Playwright module
como una dependencia.import { synthetics } from '@amzn/synthetics-playwright';
-
Inicie un navegador con la función
Launch
de Synthetics.const browser = await synthetics.launch();
-
Cree una nueva página de Playwright mediante la función
newPage
de Synthetics.const page = await synthetics.newPage();
El script ya está listo para ejecutarlo como un canario de Synthetics. A continuación, se muestra el script actualizado:
Script actualizado en formato ES6
El archivo de script guardado con una extensión .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 actualizado en formato CommonJS
El archivo de script guardado con una extensión .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(); } };
Configuraciones de CloudWatch Synthetics
Para poder configurar el comportamiento del tiempo de ejecución de Synthetics Playwright, proporcione un archivo de configuración JSON opcional denominado synthetics.json
. Este archivo debe empaquetarse en la misma ubicación que el archivo del controlador. Aunque un archivo de configuración es opcional, si no se proporciona un archivo de configuración o falta una clave de configuración, CloudWatch asume los valores predeterminados.
Empaquetado del archivo de configuración
Los siguientes son los valores de configuración admitidos y sus valores predeterminados.
{ "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 }
Configuraciones de pasos
-
screenshotOnStepStart
: determina si Synthetics debe hacer una captura de pantalla antes de que comience el paso. El valor predeterminado estrue
. -
screenshotOnStepSuccess
: determina si Synthetics debe hacer una captura de pantalla después de que un paso se haya completado correctamente. El valor predeterminado estrue
. -
screenshotOnStepFailure
: determina si Synthetics debe hacer una captura de pantalla después de que se haya producido un error en un paso. El valor predeterminado estrue
. -
continueOnStepFailure
: determina si un script debe continuar incluso después de que se haya producido un error en un paso. El valor predeterminado esfalse
. -
stepSuccessMetric
: determina si se emite la métricaSuccessPercent
de un paso. La métricaSuccessPercent
de un paso es100
para la ejecución del canario si el paso es correcto y0
si se produce un error en el paso. El valor predeterminado estrue
. -
stepDurationMetric
: determina si se emite la métricaDuration
de un paso. La métricaDuration
se emite como una duración (en milisegundos) de la ejecución del paso. El valor predeterminado estrue
.
Configuraciones de informes
Incluye todos los informes generados por CloudWatch Synthetics, como un archivo HAR y un informe de pasos de Synthetics. Los campos de redacción de datos confidenciales restrictedHeaders
y restrictedUrlParameters
también se aplican a los registros generados por Synthetics.
-
includeRequestHeaders
: si se deben incluir encabezados de solicitud en el informe. El valor predeterminado esfalse
. -
includeResponseHeaders
: si se deben incluir encabezados de respuesta en el informe. El valor predeterminado esfalse
. -
includeUrlPassword
: si se debe incluir una contraseña que aparezca en la dirección URL. De manera predeterminada, las contraseñas que aparecen en las direcciones URL se eliminan de los registros e informes para evitar la divulgación de información confidencial. El valor predeterminado esfalse
. -
includeRequestBody
: si se debe incluir el cuerpo de la solicitud en el informe. El valor predeterminado esfalse
. -
includeResponseBody
: si se debe incluir el cuerpo de respuesta en el informe. El valor predeterminado esfalse
. -
restrictedHeaders
: lista de valores de encabezado que se deben ignorar si se incluyen encabezados. Esto aplica a las cabeceras de solicitud y respuesta. Por ejemplo, para poder ocultar sus credenciales, paseincludeRequestHeaders
como verdadero yrestrictedHeaders
como['Authorization']
. -
restrictedUrlParameters
: lista de la ruta URL o los parámetros de consulta que se van a editar. Esto aplica a las URL que aparecen en registros, informes y errores. El parámetro no distingue entre mayúsculas y minúsculas. Puede pasar un asterisco (*
) como un valor para editar todos los valores de ruta de URL y los parámetros de consulta. El valor predeterminado es una matriz vacía. -
har
: determina si se debe generar un archivo HTTP (HAR). El valor predeterminado estrue
.
A continuación, se muestra un ejemplo de un archivo de configuraciones de informe.
"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
Configuraciones de registros
Se aplica a los registros generados por CloudWatch Synthetics. Controla el nivel de detalle de los registros de solicitudes y respuestas.
-
logRequest
: si se debe registrar cada solicitud en los registros de canarios. Para canaries de UI, esto registra cada solicitud que el navegador envía. El valor predeterminado esfalse
. -
logResponse
: si se debe registrar cada respuesta en los registros de canarios. Para canaries de UI, esto registra todas las respuestas que el navegador recibe. El valor predeterminado esfalse
. -
logRequestBody
: si se deben registrar los cuerpos de la solicitud junto con las solicitudes en los registros de canarios. Esta configuración sólo aplica silogRequest
es verdadero. El valor predeterminado esfalse
. -
logResponseBody
: si se deben registrar los cuerpos de respuesta junto con las solicitudes en los registros de canarios. Esta configuración sólo aplica silogResponse
es verdadero. El valor predeterminado esfalse
. -
logRequestHeaders
: si se deben registrar encabezados de solicitud junto con las solicitudes en registros de canarios. Esta configuración sólo aplica silogRequest
es verdadero. El valor predeterminado esfalse
. -
logResponseHeaders
: si se deben registrar encabezados de respuesta junto con las respuestas en los registros de canarios. Esta configuración sólo aplica silogResponse
es verdadero. El valor predeterminado esfalse
.
Configuraciones métricas HTTP
Configuraciones de métricas relacionadas con el recuento de solicitudes de red con distintos códigos de estado HTTP, emitidas por CloudWatch Synthetics para este canario.
-
metric_2xx
: si se debe emitir la métrica2xx
(con la dimensiónCanaryName
) para este canario. El valor predeterminado estrue
. -
metric_4xx
: si se debe emitir la métrica4xx
(con la dimensiónCanaryName
) para este canario. El valor predeterminado estrue
. -
metric_5xx
: si se debe emitir la métrica5xx
(con la dimensiónCanaryName
) para este canario. El valor predeterminado estrue
. -
failedRequestsMetric
: si se debe emitir la métricafailedRequests
(con la dimensiónCanaryName
) para este canario. El valor predeterminado estrue
. -
aggregatedFailedRequestsMetric
: si se debe emitir la métricafailedRequests
(sin la dimensiónCanaryName
) para este canario. El valor predeterminado estrue
. -
aggregated2xxMetric
: si se debe emitir la métrica2xx
(sin la dimensiónCanaryName
) para este canario. El valor predeterminado estrue
. -
aggregated4xxMetric
: si se debe emitir la métrica4xx
(sin la dimensiónCanaryName
) para este canario. El valor predeterminado estrue
. -
aggregated5xxMetric
: si se debe emitir la métrica5xx
(sin la dimensiónCanaryName
) para este canario. El valor predeterminado estrue
.
Configuraciones de métricas de canarios
Configuraciones para otras métricas emitidas por CloudWatch Synthetics.
-
failedCanaryMetric
: si se debe emitir la métricaFailed
(con la dimensiónCanaryName
) para este canario. El valor predeterminado estrue
. -
aggregatedFailedCanaryMetric
: si se debe emitir la métricaFailed
(sin la dimensiónCanaryName
) para este canario. El valor predeterminado estrue
.
Otras configuraciones
-
userAgent
: una cadena para agregarla al agente de usuario. El agente de usuario es una cadena que se incluye en el encabezado de la solicitud e identifica el navegador en los sitios web que visita cuando se utiliza el navegador sin periféricos. CloudWatch Synthetics agrega automáticamenteCloudWatchSynthetics/
. La configuración especificada se adjunta al agente de usuario generado. El valor predeterminado del agente de usuario que se debe adjuntar es una cadena vacía (canary-arn
to the user agent""
).
Variables de entorno de CloudWatch Synthetics
Configure el nivel y el formato de los registros mediante variables de entorno.
Formato de registro
El tiempo de ejecución de CloudWatch Synthetics Playwright crea registros de CloudWatch para cada ejecución de canarios. Los registros se escriben en formato JSON para facilitar la consulta. Si lo desea, puede cambiar el formato de registro a TEXT
.
-
Environment variable name
: CW_SYNTHETICS_LOG_FORMAT -
Supported values
: JSON, TEXT -
Default
: JSON
Niveles de registro
Si bien habilitar el modo Debug
aumenta el nivel de detalle, puede resultar útil para solucionar problemas.
-
Environment variable name
: CW_SYNTHETICS_LOG_LEVEL -
Supported values
: TRACE, DEBUG, INFO, WARN, ERROR, FATAL -
Default
: INFO