Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Ein Node.js Canary-Skript mit der Puppeteer-Laufzeit schreiben
Themen
Einen CloudWatch Synthetics-Kanarienvogel von Grund auf neu erstellen
Hier ist ein Beispiel für die Minimalversion eines Canary-Skripts für Synthetics. Dieses Skript wird als erfolgreiche Ausführung übergeben und gibt eine Zeichenfolge zurück. Um zu sehen, wie ein fehlerhaftes Canary aussieht, ändern Sie let
fail = false; zu let fail = true;.
Sie müssen eine Eintrittspunkt-Funktion für das Canary-Skript definieren. Um zu sehen, wie Dateien in den Amazon-S3-Speicherort hochgeladen werden, der als ArtifactS3Location des Canary angegeben ist, erstellen Sie diese Dateien unter dem Ordner /tmp. Alle Canary-Artefakte sollten in /tmp gespeichert werden, da es das einzige beschreibbare Verzeichnis ist. Vergewissern Sie sich, dass der Screenshot-Pfad auf /tmp für alle Screenshots oder andere Dateien, die mit dem Skript erstellt wurden, festgelegt ist. Synthetics lädt Dateien in
/tmp automatisch in einen S3-Bucket hoch.
/tmp/<name>
Nach der Ausführung des Skripts werden der pass/fail Status und die Dauer in einem S3-Bucket veröffentlicht CloudWatch und die darunter liegenden Dateien /tmp werden in einen S3-Bucket hochgeladen.
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(); };
Als Nächstes erweitern wir das Skript, um die Synthetics-Protokollierung zu verwenden und mithilfe des AWS SDK einen Anruf zu tätigen. Zu Demonstrationszwecken erstellt dieses Skript einen Amazon-DynamoDB-Client und ruft die DynamoDB-listTables-API auf. Es protokolliert die Antwort auf die Anforderung und protokolliert entweder „pass“ (erfolgreich) oder „fail“ (nicht erfolgreich), je nachdem, ob die Anforderung erfolgreich war.
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(); };
Verpacken Sie Ihre Node.js kanarischen Dateien
Für syn-nodejs-puppeteer-11.0 und höher
Die ältere Bündelstruktur (für syn-nodejs-puppeteer-10.0 und niedriger) wird in neueren Versionen immer noch unterstützt.
Erstellen Sie ein Skript mit einer der folgenden Optionen:
-
.js-Datei (CommonJS-Syntax)
-
.mjs-Datei (Syntax der ES-Module)
Verwenden Sie für ES-Module eine der folgenden Optionen:
-
.js-Datei (CommonJS-Syntax)
-
.mjs-Datei (Syntax der ES-Module)
Die Paketstruktur ist unten definiert:
-
Root-level Handler-Datei (Index). js/index.mjs)
-
Optionale Konfigurationsdatei (synthetics.json)
-
Zusätzliche Abhängigkeiten in node_modules (falls erforderlich)
Beispiel für eine Paketstruktur:
my_function/ ├── index.mjs ├── synthetics.json ├── helper-utils.mjs └── node_modules/ └── dependencies
Führen Sie zum Bündeln die folgenden Schritte aus:
-
Installieren Sie Abhängigkeiten (falls vorhanden).
npm install -
Erstellen Sie ein .zip-Paket.
zip -r my_deployment_package.zip
Für syn-nodejs-puppeteer-11.0 und niedriger
Für die Nutzung von Amazon S3 ist die folgende Struktur erforderlich:
nodejs/ └── node_modules/ └── myCanaryFilename.js
So fügen Sie eine optionale Unterordner-Unterstützung in syn-nodejs-puppeteer-3.4+ hinzu:
nodejs/ └── node_modules/ └── myFolder/ └── myCanaryFilename.js
Anmerkung
Der Handler-Pfad in der Konfiguration muss mit dem Dateispeicherort übereinstimmen.
Handlername
Stellen Sie sicher, dass der Script-Einstiegspunkt (Handler) Ihres Canary-Skripts so eingestellt ist
myCanaryFilename.functionName, dass er dem Dateinamen des Einstiegspunkts Ihres Skripts entspricht. Wenn Sie eine Laufzeit vor syn-nodejs-puppeteer-3.4 verwenden, muss functionName handler sein. Wenn Sie
syn-nodejs-puppeteer-3.4 oder neuer verwenden, können Sie einen beliebigen Funktionsnamen als Handler auswählen. Wenn Sie syn-nodejs-puppeteer-3.4 oder neuer verwenden, können Sie den Canary auch in einem separaten Ordner (z. B.
nodejs/node_modules/myFolder/my_canary_filename) ablegen. Wenn Sie ihn in einem separaten Ordner speichern, geben Sie den entsprechenden Pfad in Ihrem Skript-Eintrittspunkt an (z. B.
myFolder/my_canary_filename.functionName).
Ändern eines vorhandenen Puppeteer-Skripts zur Verwendung als Synthetics-Canary
In diesem Abschnitt wird erläutert, wie Puppeteer-Skripte so geändert werden, dass sie als Synthetics-Canary-Skripte ausgeführt werden können. Weitere Informationen zu Puppeteer finden Sie unter Puppeteer API v1.14.0
Wir beginnen mit diesem Puppeteer-Beispielskript:
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(); })();
Für die Konvertierung sind die folgenden Schritte durchzuführen:
-
Erstellen und exportieren Sie eine
handler-Funktion. Der Handler ist die Eintrittsfunktion für das Skript. Wenn Sie eine Laufzeit vorsyn-nodejs-puppeteer-3.4verwenden, muss die Handler-Funktion den Namenhandlerhaben. Wenn Siesyn-nodejs-puppeteer-3.4oder neuer verwenden, kann die Funktion einen beliebigen Namen haben. Dieser Name muss jedoch mit dem Namen im Skript übereinstimmen. Wenn Siesyn-nodejs-puppeteer-3.4oder neuer verwenden, können Sie Ihre Skripte außerdem in einem beliebigen Ordner ablegen und diesen Ordner als Teil des Handlernamens angeben.const basicPuppeteerExample = async function () {}; exports.handler = async () => { return await basicPuppeteerExample(); }; -
Verwenden Sie die
Synthetics-Abhängigkeit.var synthetics = require('@aws/synthetics-puppeteer'); -
Verwenden Sie die
Synthetics.getPage-Funktion, um ein Puppeteer-Page-Objekt zu erhalten.const page = await synthetics.getPage();Das von der Synthetics.getPage Funktion zurückgegebene Seitenobjekt hat den Wert page.on
responseundrequestfailedEreignisserequest, die für die Protokollierung instrumentiert sind. Synthetics richtet auch die Generierung von HAR-Dateien für Anforderungen und Antworten auf der Seite ein und fügt den Benutzeragenten-Headern der ausgehenden Anforderungen auf der Seite den Canary-ARN hinzu.
Das Skript kann nun als Synthetics-Canary ausgeführt werden. Nachfolgend finden Sie das aktualisierte Skript:
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(); };