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 Node.js Canary à l'aide du moteur d'exécution Puppeteer
Rubriques
Création d'un canari CloudWatch synthétique à partir de zéro
Voici un exemple minimal de script Canary Synthetics. Ce script est transmis comme une exécution réussie et renvoie une chaîne. Pour voir à quoi ressemble un script Canary qui a échoué, remplacez let
fail = false; par let fail = true;.
Vous devez définir une fonction de point d'entrée pour le script Canary. Pour observer comment les fichiers sont téléchargés dans l’emplacement Amazon S3 défini comme ArtifactS3Location du script Canary, créez ces fichiers dans le dossier /tmp. Tous les artefacts du script Canary doivent être enregistrés dans /tmp, car il s’agit du seul répertoire accessible en écriture. Assurez-vous que le chemin des captures d’écran est défini sur /tmp pour toutes les captures ou autres fichiers créés par le script. Synthetics charge automatiquement les fichiers
/tmp dans un compartiment S3.
/tmp/<name>
Une fois le script exécuté, les mesures d' pass/fail état et de durée sont publiées dans un compartiment S3 CloudWatch et les fichiers /tmp correspondants sont téléchargés dans un compartiment S3.
const basicCustomEntryPoint = async function () { // Insert your code here // Perform multi-step pass/fail check // Log decisions made and results to /tmp // Be sure to wait for all your code paths to complete // before returning control back to Synthetics. // In that way, your canary will not finish and report success // before your code has finished executing // Throw to fail, return to succeed let fail = false; if (fail) { throw "Failed basicCanary check."; } return "Successfully completed basicCanary checks."; }; exports.handler = async () => { return await basicCustomEntryPoint(); };
Ensuite, développez le script pour utiliser la journalisation Synthetics et passez un appel à l'aide du AWS SDK. À des fins de démonstration, ce script créera un client Amazon DynamoDB et réalisera un appel à l'API ListTables DynamoDB. Il enregistre la réponse à la demande et les journaux réussissent ou échouent selon le succès de la demande.
const log = require('@aws/synthetics-logger'); const AWS = require('aws-sdk'); // Require any dependencies that your script needs // Bundle additional files and dependencies into a .zip file with folder structure // nodejs/node_modules/additional files and foldersconst basicCustomEntryPoint = async function () { log.info("Starting DynamoDB:listTables canary."); let dynamodb = new AWS.DynamoDB(); var params = {}; let request = await dynamodb.listTables(params); try { let response = await request.promise(); log.info("listTables response: " + JSON.stringify(response)); } catch (err) { log.error("listTables error: " + JSON.stringify(err), err.stack); throw err; } return "Successfully completed DynamoDB:listTables canary."; }; exports.handler = async () => { return await basicCustomEntryPoint(); };
Emballer vos fichiers Node.js Canary
Pour syn-nodejs-puppeteer-11.0 et versions ultérieures
L’ancienne structure d’empaquetage (pour syn-nodejs-puppeteer-10.0 et versions antérieures) reste prise en charge dans les versions plus récentes.
Créez un script en utilisant l’une des options suivantes :
-
fichier .js (syntaxe CommonJS)
-
fichier .mjs (syntaxe des modules ES)
Pour les modules ES, utilisez l’une des options suivantes :
-
fichier .js (syntaxe CommonJS)
-
fichier .mjs (syntaxe des modules ES)
La structure du package est définie ci-dessous :
-
Root-level fichier de gestion (index). js/index.js)
-
Fichier de configuration facultatif (synthetics.json)
-
Dépendances supplémentaires dans node_modules (si nécessaire)
Exemple de structure d’empaquetage :
my_function/ ├── index.mjs ├── synthetics.json ├── helper-utils.mjs └── node_modules/ └── dependencies
Pour empaqueter, procédez comme suit :
-
Installez les dépendances (le cas échéant).
npm install -
Créer un package .zip.
zip -r my_deployment_package.zip
Pour syn-nodejs-puppeteer-11.0 et versions antérieures
La structure suivante est requise lorsque vous utilisez Amazon S3 :
nodejs/ └── node_modules/ └── myCanaryFilename.js
Pour ajouter la prise en charge d’un sous-dossier à partir de syn-nodejs-puppeteer-3.4 :
nodejs/ └── node_modules/ └── myFolder/ └── myCanaryFilename.js
Note
Le chemin du gestionnaire indiqué dans la configuration doit correspondre à l’emplacement réel du fichier.
Nom du gestionnaire
Assurez-vous de définir le point d'entrée du script (gestionnaire) de votre Canary de manière
myCanaryFilename.functionName à ce qu'il corresponde au nom de fichier du point d'entrée de votre script. Si vous utilisez une exécution antérieure à syn-nodejs-puppeteer-3.4, alors functionName doit être handler. Si vous utilisez
syn-nodejs-puppeteer-3.4 ou une version ultérieure, vous pouvez choisir n'importe quel nom de fonction comme gestionnaire. Si vous utilisez syn-nodejs-puppeteer-3.4 ou une version ultérieure, vous pouvez également stocker le script canary dans un dossier séparé tel que
nodejs/node_modules/myFolder/my_canary_filename. 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 Puppeteer existant pour l'utiliser en tant que script Canary Synthetics
Cette section explique comment prendre des scripts Puppeteer, pour ensuite les modifier afin qu'ils s'exécutent en tant que scripts Canary Synthetics. Pour de plus amples informations sur Puppeteer, consultez Puppeteer API v1.14.0
Commencez par cet exemple de script Puppeteer :
const puppeteer = require('puppeteer'); (async () => { const browser = await puppeteer.launch(); const page = await browser.newPage(); await page.goto('https://example.com'); await page.screenshot({path: 'example.png'}); await browser.close(); })();
Les étapes de conversion sont les suivantes :
-
Créez et exportez une fonction
handler. Le gestionnaire est la fonction de point d'entrée du script. Si vous utilisez une exécution antérieure àsyn-nodejs-puppeteer-3.4, la fonction du gestionnaire doit être nomméehandler. Si vous utilisezsyn-nodejs-puppeteer-3.4ou une version ultérieure, la fonction peut porter n'importe quel nom, mais il doit être identique à celui utilisé dans le script. De plus, si vous utilisezsyn-nodejs-puppeteer-3.4ou une version ultérieure, vous pouvez stocker vos scripts dans n'importe quel dossier et spécifier ce dossier dans le nom du gestionnaire.const basicPuppeteerExample = async function () {}; exports.handler = async () => { return await basicPuppeteerExample(); }; -
Utilisez la dépendance
Synthetics.var synthetics = require('@aws/synthetics-puppeteer'); -
Utilisez la fonction
Synthetics.getPagepour obtenir un objetPagePuppeteer.const page = await synthetics.getPage();L'objet de page renvoyé par la Synthetics.getPage fonction contient le nom page.on
requestresponseet lesrequestfailedévénements sont instrumentés pour la journalisation. Synthetics configure également la génération de fichiers HAR pour les demandes et les réponses sur la page, et ajoute l'ARN du script Canary aux en-têtes des demandes sortantes de l'agent utilisateur sur la page.
Le script est maintenant prêt à être exécuté en tant que script Canary Synthetics. Voici le script mis à jour :
var synthetics = require('@aws/synthetics-puppeteer'); // Synthetics dependency const basicPuppeteerExample = async function () { const page = await synthetics.getPage(); // Get instrumented page from Synthetics await page.goto('https://example.com'); await page.screenshot({path: '/tmp/example.png'}); // Write screenshot to /tmp folder }; exports.handler = async () => { // Exported handler function return await basicPuppeteerExample(); };