Écrire un script Canary Node.js à l'aide du moteur d'exécution Playwright - Amazon CloudWatch

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Écrire un script Canary Node.js à l'aide du moteur d'exécution Playwright

Empaqueter vos fichiers Canary Node.js pour le moteur d'exécution de Playwright

Votre script Canary comprend un fichier .js (syntaxe CommonJS) ou .mjs (syntaxe ES) contenant le code de votre gestionnaire Synthetics, ainsi que tous les packages et modules supplémentaires dont dépend votre code. Les scripts créés au format ES (ECMAScript) doivent utiliser .mjs comme extension ou inclure un fichier package.json avec le champ « type » : « module » défini. Contrairement à d'autres environnements d'exécution tels que Node.js Puppeteer, vous n'êtes pas obligé d'enregistrer vos scripts dans une structure de dossiers spécifique. Vous pouvez empaqueter vos scripts directement. Utilisez l'ziputilitaire de votre choix pour créer un .zip fichier avec votre fichier de gestionnaire à la racine. Si votre script Canary dépend de packages ou de modules supplémentaires qui ne sont pas inclus dans le runtime Synthetics, vous pouvez ajouter ces dépendances à votre fichier. .zip Pour ce faire, vous pouvez installer les bibliothèques requises pour votre fonction dans le node_modules répertoire en exécutant la npm install commande. Les exemples de commandes CLI suivants créent un .zip fichier nommé my_deployment_package.zip contenant le index.mjs fichier index.js or (gestionnaire Synthetics) et ses dépendances. Dans cet exemple, vous installez les dépendances à l'aide du gestionnaire de npm packages.

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

Créez un .zip fichier contenant le contenu du dossier de votre projet à la racine. Utilisez l'option r (récursive), comme indiqué dans l'exemple suivant, pour vous assurer que les sous-dossiers sont zip compressés.

zip -r my_deployment_package.zip .

Ajoutez un fichier de configuration Synthetics pour configurer le comportement de Synthetics. CloudWatch Vous pouvez créer un synthetics.json fichier et l'enregistrer sur le même chemin que votre point d'entrée ou votre fichier de gestionnaire.

En option, vous pouvez également enregistrer votre fichier de point d'entrée dans une structure de dossiers de votre choix. Assurez-vous toutefois que le chemin du dossier est indiqué dans le nom de votre gestionnaire.

Nom du gestionnaire

Assurez-vous de définir le point d'entrée (gestionnaire) de votre script Canary de sorte que myCanaryFilename.functionName corresponde au nom du fichier du point d'entrée de votre script. Vous pouvez éventuellement stocker le canari dans un dossier séparé tel quemyFolder/my_canary_filename.mjs. Si vous le stockez dans un dossier séparé, spécifiez ce chemin dans le point d'entrée de votre script, tel que myFolder/my_canary_filename.functionName.

Modification d'un script de dramaturge existant pour l'utiliser comme canari CloudWatch Synthetics

Vous pouvez modifier un script existant pour Node.js et Playwright afin de l'utiliser comme canari. Pour plus d'informations sur Playwright, consultez la documentation de la bibliothèque Playwright.

Vous pouvez utiliser le script Playwright suivant qui est enregistré dans le fichierexampleCanary.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();

Convertissez le script en effectuant les étapes suivantes :

  1. Créez et exportez une fonction handler. Le gestionnaire est la fonction de point d'entrée du script. Vous pouvez choisir n'importe quel nom pour la fonction de gestionnaire, mais la fonction utilisée dans votre script doit être la même que dans votre gestionnaire Canary. Si le nom de votre script est exampleCanary.mjs et que le nom de la fonction de gestion est le mêmemyhandler, votre gestionnaire Canary est nommé. exampleCanary.myhandler Dans l'exemple suivant, le nom de la fonction de gestion esthandler.

    exports.handler = async () => { // Your script here };
  2. Importez-le Synthetics Playwright module en tant que dépendance.

    import { synthetics } from '@amzn/synthetics-playwright';
  3. Lancez un navigateur à l'aide de la fonction Launch Synthetics.

    const browser = await synthetics.launch();
  4. Créez une nouvelle page de dramaturge à l'aide de la fonction Synthetics. newPage

    const page = await synthetics.newPage();

Votre script est maintenant prêt à être exécuté sous la forme d'un canari Synthetics. Le script mis à jour est le suivant :

Script mis à jour au ES6 format

Le fichier de script enregistré avec une .mjs extension.

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 mis à jour au format CommonJS

Le fichier de script enregistré avec une .js extension.

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

Vous pouvez configurer le comportement du runtime Synthetics Playwright en fournissant un fichier de configuration JSON facultatif nommé. synthetics.json Ce fichier doit être empaqueté au même emplacement que le fichier du gestionnaire. Bien qu'un fichier de configuration soit facultatif, si vous ne fournissez pas de fichier de configuration ou si une clé de configuration est manquante, les valeurs par défaut sont CloudWatch prises en compte.

Empaqueter votre fichier de configuration

Les valeurs de configuration prises en charge et leurs valeurs par défaut sont les suivantes.

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

Configurations des étapes

  • screenshotOnStepStart— Détermine si Synthetics doit effectuer une capture d'écran avant le début de l'étape. L’argument par défaut est true.

  • screenshotOnStepSuccess— Détermine si Synthetics doit effectuer une capture d'écran après la réussite d'une étape. L’argument par défaut est true.

  • screenshotOnStepFailure— Détermine si Synthetics doit effectuer une capture d'écran après l'échec d'une étape. L’argument par défaut est true.

  • continueOnStepFailure— Détermine si un script doit continuer même après l'échec d'une étape. L’argument par défaut est false.

  • stepSuccessMetric— Détermine si la SuccessPercent métrique d'une étape est émise. La SuccessPercent métrique d'une étape correspond 100 à l'exécution canarienne si l'étape réussit et 0 si elle échoue. L’argument par défaut est true.

  • stepDurationMetric— Détermine si la Duration métrique d'une étape est émise. La Duration métrique est émise sous forme de durée, en millisecondes, de l'exécution de l'étape. L’argument par défaut est true.

Configurations des rapports

Inclut tous les rapports générés par CloudWatch Synthetics, tels qu'un fichier HAR et un rapport sur les étapes de Synthetics. Les champs restrictedHeaders de rédaction de données sensibles s'appliquent restrictedUrlParameters également aux journaux générés par Synthetics.

  • includeRequestHeaders— S'il faut inclure les en-têtes de demande dans le rapport. L’argument par défaut est false.

  • includeResponseHeaders— S'il faut inclure les en-têtes de réponse dans le rapport. L’argument par défaut est false.

  • includeUrlPassword— S'il faut inclure un mot de passe qui apparaît dans l'URL. Par défaut, les mots de passe qui apparaissent dans URLs les journaux et les rapports sont supprimés afin d'empêcher la divulgation de données sensibles. L’argument par défaut est false.

  • includeRequestBody— S'il faut inclure le corps de la demande dans le rapport. L’argument par défaut est false.

  • includeResponseBody— S'il faut inclure le corps de réponse dans le rapport. L’argument par défaut est false.

  • restrictedHeaders— Liste des valeurs d'en-tête à ignorer, si des en-têtes sont inclus. Cela s'applique à la fois aux en-têtes de demande et de réponse. Par exemple, vous pouvez masquer vos informations d'identification en passant includeRequestHeaders « true » et « restrictedHeaders as ['Authorization'] ».

  • restrictedUrlParameters— Liste des chemins d'URL ou des paramètres de requête à supprimer. Cela s'applique à URLs ceux qui apparaissent dans les journaux, les rapports et les erreurs. Le paramètre est sensible à la casse. Vous pouvez passer un astérisque (*) comme valeur pour supprimer tous les chemins d'URL et les valeurs des paramètres de requête. La valeur par défaut est un tableau vide.

  • har— Détermine si une archive HTTP (HAR) doit être générée. L’argument par défaut est true.

Voici un exemple de fichier de configuration de rapport.

"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

Configurations d'enregistrement

S'applique aux journaux générés par CloudWatch Synthetics. Contrôle la verbosité des journaux de demandes et de réponses.

  • logRequest— S'il faut enregistrer chaque requête dans Canary Logs. Pour les scripts Canary d'interface utilisateur, cette option journalise chaque demande envoyée par le navigateur. L’argument par défaut est false.

  • logResponse— S'il faut enregistrer chaque réponse dans Canary Logs. Pour les scripts Canary d'interface utilisateur, cette option journalise chaque réponse reçue par le navigateur. L’argument par défaut est false.

  • logRequestBody— S'il faut enregistrer les corps des demandes en même temps que les demandes dans Canary Logs. Cette configuration ne s'applique que si elle logRequest est vraie. L’argument par défaut est false.

  • logResponseBody— S'il faut enregistrer les corps de réponse ainsi que les demandes dans Canary Logs. Cette configuration ne s'applique que si elle logResponse est vraie. L’argument par défaut est false.

  • logRequestHeaders— S'il faut enregistrer les en-têtes des demandes avec les requêtes dans Canary Logs. Cette configuration ne s'applique que si elle logRequest est vraie. L’argument par défaut est false.

  • logResponseHeaders— S'il faut enregistrer les en-têtes de réponse avec les réponses dans Canary Logs. Cette configuration ne s'applique que si elle logResponse est vraie. L’argument par défaut est false.

Configurations métriques HTTP

Configurations pour les métriques liées au nombre de requêtes réseau avec différents codes d'état HTTP, émises par CloudWatch Synthetics pour ce canari.

  • metric_2xx— S'il faut émettre la 2xx métrique (avec la CanaryName dimension) pour ce canari. L’argument par défaut est true.

  • metric_4xx— S'il faut émettre la 4xx métrique (avec la CanaryName dimension) pour ce canari. L’argument par défaut est true.

  • metric_5xx— S'il faut émettre la 5xx métrique (avec la CanaryName dimension) pour ce canari. L’argument par défaut est true.

  • failedRequestsMetric— S'il faut émettre la failedRequests métrique (avec la CanaryName dimension) pour ce canari. L’argument par défaut est true.

  • aggregatedFailedRequestsMetric— S'il faut émettre la failedRequests métrique (sans la CanaryName dimension) pour ce canari. L’argument par défaut est true.

  • aggregated2xxMetric— S'il faut émettre la 2xx métrique (sans la CanaryName dimension) pour ce canari. L’argument par défaut est true.

  • aggregated4xxMetric— S'il faut émettre la 4xx métrique (sans la CanaryName dimension) pour ce canari. L’argument par défaut est true.

  • aggregated5xxMetric— S'il faut émettre la 5xx métrique (sans la CanaryName dimension) pour ce canari. L’argument par défaut est true.

Configurations métriques Canary

Configurations pour les autres métriques émises par CloudWatch Synthetics.

  • failedCanaryMetric— S'il faut émettre la Failed métrique (avec la CanaryName dimension) pour ce canari. L’argument par défaut est true.

  • aggregatedFailedCanaryMetric— S'il faut émettre la Failed métrique (sans la CanaryName dimension) pour ce canari. L’argument par défaut est true.

Autres configurations

  • userAgent— Chaîne à ajouter à l'agent utilisateur. L'agent utilisateur est une chaîne incluse dans l'en-tête de la demande et identifie votre navigateur auprès des sites Web que vous visitez lorsque vous utilisez le navigateur sans en-tête. CloudWatch Synthetics ajoute automatiquement. CloudWatchSynthetics/canary-arn to the user agent La configuration spécifiée est ajoutée à l'agent utilisateur généré. La valeur d'agent utilisateur par défaut à ajouter est une chaîne vide ("").

CloudWatch Variables d'environnement Synthetics

Configurez le niveau et le format de journalisation à l'aide de variables d'environnement.

Format du journal

Le runtime CloudWatch Synthetics Playwright CloudWatch crée des journaux pour chaque course de Canary. Les journaux sont écrits au format JSON pour faciliter les requêtes. Vous pouvez éventuellement modifier le format du journal enTEXT.

  • Environment variable name— CW_SYNTHETICS_LOG_FORMAT

  • Supported values— JSON, TEXTE

  • Default— JSON

Niveaux de journalisation

Bien que Debug le mode activation augmente la verbosité, il peut être utile pour le dépannage.

  • Environment variable name— CW_SYNTHETICS_LOG_LEVEL

  • Supported values— TRACE, DÉBOGAGE, INFORMATION, AVERTISSEMENT, ERREUR, FATAL

  • Default— INFORMATIONS