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
Rubriques
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'zip
utilitaire 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 :
-
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 estexampleCanary.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 };
-
Importez-le
Synthetics Playwright module
en tant que dépendance.import { synthetics } from '@amzn/synthetics-playwright';
-
Lancez un navigateur à l'aide de la fonction
Launch
Synthetics.const browser = await synthetics.launch();
-
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 esttrue
. -
screenshotOnStepSuccess
— Détermine si Synthetics doit effectuer une capture d'écran après la réussite d'une étape. L’argument par défaut esttrue
. -
screenshotOnStepFailure
— Détermine si Synthetics doit effectuer une capture d'écran après l'échec d'une étape. L’argument par défaut esttrue
. -
continueOnStepFailure
— Détermine si un script doit continuer même après l'échec d'une étape. L’argument par défaut estfalse
. -
stepSuccessMetric
— Détermine si laSuccessPercent
métrique d'une étape est émise. LaSuccessPercent
métrique d'une étape correspond100
à l'exécution canarienne si l'étape réussit et0
si elle échoue. L’argument par défaut esttrue
. -
stepDurationMetric
— Détermine si laDuration
métrique d'une étape est émise. LaDuration
métrique est émise sous forme de durée, en millisecondes, de l'exécution de l'étape. L’argument par défaut esttrue
.
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 estfalse
. -
includeResponseHeaders
— S'il faut inclure les en-têtes de réponse dans le rapport. L’argument par défaut estfalse
. -
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 estfalse
. -
includeRequestBody
— S'il faut inclure le corps de la demande dans le rapport. L’argument par défaut estfalse
. -
includeResponseBody
— S'il faut inclure le corps de réponse dans le rapport. L’argument par défaut estfalse
. -
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 passantincludeRequestHeaders
« 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 esttrue
.
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 estfalse
. -
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 estfalse
. -
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 ellelogRequest
est vraie. L’argument par défaut estfalse
. -
logResponseBody
— S'il faut enregistrer les corps de réponse ainsi que les demandes dans Canary Logs. Cette configuration ne s'applique que si ellelogResponse
est vraie. L’argument par défaut estfalse
. -
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 ellelogRequest
est vraie. L’argument par défaut estfalse
. -
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 ellelogResponse
est vraie. L’argument par défaut estfalse
.
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 la2xx
métrique (avec laCanaryName
dimension) pour ce canari. L’argument par défaut esttrue
. -
metric_4xx
— S'il faut émettre la4xx
métrique (avec laCanaryName
dimension) pour ce canari. L’argument par défaut esttrue
. -
metric_5xx
— S'il faut émettre la5xx
métrique (avec laCanaryName
dimension) pour ce canari. L’argument par défaut esttrue
. -
failedRequestsMetric
— S'il faut émettre lafailedRequests
métrique (avec laCanaryName
dimension) pour ce canari. L’argument par défaut esttrue
. -
aggregatedFailedRequestsMetric
— S'il faut émettre lafailedRequests
métrique (sans laCanaryName
dimension) pour ce canari. L’argument par défaut esttrue
. -
aggregated2xxMetric
— S'il faut émettre la2xx
métrique (sans laCanaryName
dimension) pour ce canari. L’argument par défaut esttrue
. -
aggregated4xxMetric
— S'il faut émettre la4xx
métrique (sans laCanaryName
dimension) pour ce canari. L’argument par défaut esttrue
. -
aggregated5xxMetric
— S'il faut émettre la5xx
métrique (sans laCanaryName
dimension) pour ce canari. L’argument par défaut esttrue
.
Configurations métriques Canary
Configurations pour les autres métriques émises par CloudWatch Synthetics.
-
failedCanaryMetric
— S'il faut émettre laFailed
métrique (avec laCanaryName
dimension) pour ce canari. L’argument par défaut esttrue
. -
aggregatedFailedCanaryMetric
— S'il faut émettre laFailed
métrique (sans laCanaryName
dimension) pour ce canari. L’argument par défaut esttrue
.
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/
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 (canary-arn
to the user agent""
).
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