View a markdown version of this page

Menulis skrip Node.js kenari menggunakan runtime Dalang - Amazon CloudWatch

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Menulis skrip Node.js kenari menggunakan runtime Dalang

Membuat kenari CloudWatch Synthetics dari awal

Berikut adalah contoh skrip Canary Synthetic minimal. skrip ini berhasil dijalani, dan mengembalikan rangkaian. Untuk melihat bentuk canary yang gagal, ubah let fail = false; untuk let fail = true;.

Anda harus menetapkan fungsi titik masuk untuk skrip canary. Untuk melihat bagaimana file diunggah ke lokasi Amazon S3 yang ditentukan sebagai kenari, buat file-file ini ArtifactS3Location di folder. /tmp Semua artefak kenari harus disimpan/tmp, karena itu satu-satunya direktori yang dapat ditulis. Pastikan bahwa jalur tangkapan layar diatur /tmp untuk tangkapan layar atau file lain yang dibuat oleh skrip. Synthetics secara otomatis mengunggah file /tmp ke bucket S3.

/tmp/<name>

Setelah skrip berjalan, metrik pass/fail status dan durasi dipublikasikan CloudWatch dan file di bawah /tmp diunggah ke bucket 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(); };

Selanjutnya, kita akan memperluas script untuk menggunakan Synthetics logging dan membuat panggilan menggunakan SDK AWS . Untuk tujuan demonstrasi, skrip ini akan menciptakan klien Amazon DynamoDB dan memanggil API listTables DynamoDB. skrip ini mencatat respons terhadap permintaan dan log akan lulus atau gagal bergantung pada permintaan berhasil atau tidak.

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 folders const 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(); };

Kemasan file Node.js kenari Anda

Untuk syn-nodejs-puppeteer-11.0 dan di atasnya

Struktur pengemasan yang lebih lama (untuk syn-nodejs-puppeteer-10.0 dan di bawahnya) masih didukung dalam versi yang lebih baru.

Buat skrip menggunakan salah satu opsi berikut:

  • .js file (sintaks CommonJS)

  • .mjs file (sintaks modul ES)

Untuk modul ES, gunakan salah satu opsi berikut:

  • .js file (sintaks CommonJS)

  • .mjs file (sintaks modul ES)

Struktur paket didefinisikan di bawah ini:

  • Root-level file handler (indeks. js/index.mjs)

  • File konfigurasi opsional (synthetics.json)

  • Ketergantungan tambahan di node_modules (jika diperlukan)

Contoh struktur kemasan:

my_function/ ├── index.mjs ├── synthetics.json ├── helper-utils.mjs └── node_modules/ └── dependencies

Untuk paket, ikuti langkah-langkah di bawah ini:

  1. Instal dependensi (jika ada).

    npm install
  2. Buat paket.zip.

    zip -r my_deployment_package.zip

Untuk syn-nodejs-puppeteer-11.0 dan di bawahnya

Struktur berikut diperlukan saat menggunakan Amazon S3:

nodejs/ └── node_modules/ └── myCanaryFilename.js

Untuk menambahkan dukungan sub-folder opsional di syn-nodejs-puppeteer-3.4+:

nodejs/ └── node_modules/ └── myFolder/ └── myCanaryFilename.js
catatan

Path handler dalam konfigurasi harus sesuai dengan lokasi file Anda.

Nama handler

Pastikan untuk mengatur titik entri skrip kenari Anda (handler) myCanaryFilename.functionName agar sesuai dengan nama file titik masuk skrip Anda. Jika Anda menggunakan runtime yang lebih awal dari syn-nodejs-puppeteer-3.4, functionName harus handler. Jika Anda menggunakan syn-nodejs-puppeteer-3.4 atau yang lebih baru, Anda dapat memilih nama fungsi apa pun sebagai handler. Jika Anda menggunakan syn-nodejs-puppeteer-3.4 atau lebih baru, Anda juga dapat secara opsional menyimpan canary di folder terpisah seperti nodejs/node_modules/myFolder/my_canary_filename. Jika Anda menyimpannya di folder terpisah, tentukan jalur itu di titik entri skrip Anda, seperti myFolder/my_canary_filename.functionName.

Mengubah skrip Puppeteer yang sudah ada untuk digunakan sebagai canary Synthetic

Bagian ini menjelaskan cara mengambil skrip Puppeteer dan memodifikasinya untuk berjalan sebagai skrip canary Synthetic. Untuk informasi selengkapnya tentang Puppeteer, silakan lihat API Puppeteer v1.14.0.

Kita akan mulai dengan contoh skrip 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(); })();

Langkah konversinya adalah sebagai berikut:

  • Membuat dan mengekspor handler fungsi. Penanggung jawab adalah fungsi titik masuk untuk skrip. Jika Anda menggunakan runtime yang lebih awal dari syn-nodejs-puppeteer-3.4, fungsi handler harus diberi nama handler. Jika Anda menggunakan syn-nodejs-puppeteer-3.4 atau lebih baru, fungsi tersebut dapat memiliki nama apa pun, tetapi harus nama yang sama yang digunakan dalam skrip. Juga, jika Anda menggunakan syn-nodejs-puppeteer-3.4 atau yang lebih baru, Anda akan dapat menyimpan skrip Anda di bawah folder apa pun dan menentukan folder itu sebagai bagian dari nama handler.

    const basicPuppeteerExample = async function () {}; exports.handler = async () => { return await basicPuppeteerExample(); };
  • Gunakan dependensi Synthetics.

    var synthetics = require('@aws/synthetics-puppeteer');
  • Gunakan fungsi Synthetics.getPage untuk mendapatkan objek Page Puppeteer.

    const page = await synthetics.getPage();

    Objek halaman yang dikembalikan oleh Synthetics.getPage fungsi memiliki page.onrequest, response dan requestfailed peristiwa yang diinstrumentasi untuk logging. Synthetics juga mengatur pembuatan file HAR untuk permintaan dan respons di halaman tersebut, serta menambahkan ARN canary ke header agen-pengguna atas permintaan keluar di halaman tersebut.

skripnya sekarang siap untuk dijalankan sebagai canary Synthetics. Berikut adalah naskah yang diperbarui:

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(); };