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
Topik
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 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(); };
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:
-
Instal dependensi (jika ada).
npm install -
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
handlerfungsi. Penanggung jawab adalah fungsi titik masuk untuk skrip. Jika Anda menggunakan runtime yang lebih awal darisyn-nodejs-puppeteer-3.4, fungsi handler harus diberi namahandler. Jika Anda menggunakansyn-nodejs-puppeteer-3.4atau lebih baru, fungsi tersebut dapat memiliki nama apa pun, tetapi harus nama yang sama yang digunakan dalam skrip. Juga, jika Anda menggunakansyn-nodejs-puppeteer-3.4atau 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.getPageuntuk mendapatkan objekPagePuppeteer.const page = await synthetics.getPage();Objek halaman yang dikembalikan oleh Synthetics.getPage fungsi memiliki page.on
request,responsedanrequestfailedperistiwa 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(); };