Menulis skrip canary Node.js menggunakan runtime Playwright - Amazon CloudWatch

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

Menulis skrip canary Node.js menggunakan runtime Playwright

Mengemas file canary Node.js Anda untuk runtime Playwright

Skrip kenari Anda terdiri dari file .js (sintaks CommonJS) atau .mjs (sintaks ES) yang berisi kode handler Synthetics Anda, bersama dengan paket dan modul tambahan yang bergantung pada kode Anda. Skrip yang dibuat dalam format ES (ECMAScript) harus menggunakan.mjs sebagai ekstensi atau menyertakan file package.json dengan set bidang “type”: “module”. Tidak seperti runtime lain seperti Node.js Puppeteer, Anda tidak diharuskan menyimpan skrip Anda dalam struktur folder tertentu. Anda dapat mengemas skrip Anda secara langsung. Gunakan zip utilitas pilihan Anda untuk membuat .zip file dengan file handler Anda di root. Jika skrip canary Anda bergantung pada paket atau modul tambahan yang tidak disertakan dalam runtime Synthetics, Anda dapat menambahkan dependensi ini ke file Anda. .zip Untuk melakukannya, Anda dapat menginstal pustaka yang diperlukan fungsi Anda di node_modules direktori dengan menjalankan npm install perintah. Berikut contoh perintah CLI membuat .zip file bernama my_deployment_package.zip berisi index.js or index.mjs file (Synthetics handler) dan dependensinya. Dalam contoh, Anda menginstal dependensi menggunakan manajer npm paket.

~/my_function ├── index.mjs ├── synthetics.json ├── myhelper-util.mjs └── node_modules ├── mydependency

Buat .zip file yang berisi isi folder proyek Anda di root. Gunakan opsi r (rekursif), seperti yang ditunjukkan pada contoh berikut, untuk memastikan bahwa zip kompres subfolder.

zip -r my_deployment_package.zip .

Tambahkan file konfigurasi Synthetics untuk mengonfigurasi perilaku CloudWatch Synthetics. Anda dapat membuat synthetics.json file dan menyimpannya di jalur yang sama dengan titik masuk atau file handler Anda.

Secara opsional, Anda juga dapat menyimpan file titik masuk Anda dalam struktur folder pilihan Anda. Namun, pastikan bahwa path folder ditentukan dalam nama handler Anda.

Nama handler

Pastikan untuk mengatur titik masuk skrip canary Anda (handler) myCanaryFilename.functionName agar cocok dengan nama file dari titik masuk skrip Anda. Anda dapat menyimpan kenari secara opsional di folder terpisah seperti. myFolder/my_canary_filename.mjs Jika Anda menyimpannya di folder terpisah, tentukan jalur itu di titik entri skrip Anda, seperti myFolder/my_canary_filename.functionName.

Mengubah skrip Playwright yang ada untuk digunakan sebagai kenari Synthetics CloudWatch

Anda dapat mengedit skrip yang ada untuk Node.js dan Playwright untuk digunakan sebagai kenari. Untuk informasi selengkapnya tentang Playwright, lihat dokumentasi pustaka Playwright.

Anda dapat menggunakan skrip Playwright berikut yang disimpan dalam file. exampleCanary.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();

Konversi skrip dengan melakukan langkah-langkah berikut:

  1. Membuat dan mengekspor handler fungsi. Penanggung jawab adalah fungsi titik masuk untuk naskah. Anda dapat memilih nama apa pun untuk fungsi handler, tetapi fungsi yang digunakan dalam skrip Anda harus sama seperti di pengendali kenari Anda. Jika nama skrip AndaexampleCanary.mjs, dan nama fungsi handler adalahmyhandler, pengendali kenari Anda diberi nama. exampleCanary.myhandler Dalam contoh berikut, nama fungsi handler adalahhandler.

    exports.handler = async () => { // Your script here };
  2. Impor Synthetics Playwright module sebagai ketergantungan.

    import { synthetics } from '@amzn/synthetics-playwright';
  3. Luncurkan browser menggunakan fungsi Synthetics. Launch

    const browser = await synthetics.launch();
  4. Buat halaman Playwright baru dengan menggunakan fungsi Synthetics. newPage

    const page = await synthetics.newPage();

Skrip Anda sekarang siap dijalankan sebagai kenari Synthetics. Berikut ini adalah skrip yang diperbarui:

Skrip diperbarui dalam ES6 format

File skrip disimpan dengan .mjs ekstensi.

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 diperbarui dalam format CommonJS

File skrip disimpan dengan .js ekstensi.

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 Konfigurasi Synthetics

Anda dapat mengonfigurasi perilaku runtime Synthetics Playwright dengan menyediakan file konfigurasi JSON opsional bernama. synthetics.json File ini harus dikemas di lokasi yang sama dengan file handler. Meskipun file konfigurasi adalah opsional, jika Anda tidak menyediakan file konfigurasi, atau kunci konfigurasi hilang, CloudWatch mengasumsikan default.

Mengemas file konfigurasi Anda

Berikut ini adalah nilai konfigurasi yang didukung, dan defaultnya.

{ "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 }

Konfigurasi langkah

  • screenshotOnStepStart— Menentukan apakah Synthetics harus menangkap tangkapan layar sebelum langkah dimulai. Nilai default-nya true.

  • screenshotOnStepSuccess— Menentukan apakah Synthetics harus menangkap tangkapan layar setelah langkah berhasil. Nilai default-nya true.

  • screenshotOnStepFailure— Menentukan apakah Synthetics harus menangkap tangkapan layar setelah langkah gagal. Nilai default-nya true.

  • continueOnStepFailure— Menentukan apakah skrip harus dilanjutkan bahkan setelah langkah gagal. Nilai default-nya false.

  • stepSuccessMetric— Menentukan apakah SuccessPercent metrik langkah dipancarkan. SuccessPercentMetrik untuk sebuah langkah adalah 100 untuk menjalankan kenari jika langkah berhasil, dan 0 jika langkah gagal. Nilai default-nya true.

  • stepDurationMetric— Menentukan apakah Duration metrik langkah dipancarkan. DurationMetrik dipancarkan sebagai durasi, dalam milidetik, dari langkah yang dijalankan. Nilai default-nya true.

Laporkan konfigurasi

Termasuk semua laporan yang dihasilkan oleh CloudWatch Synthetics, seperti file HAR dan laporan langkah Synthetics. Bidang redaksi data sensitif restrictedHeaders dan restrictedUrlParameters juga berlaku untuk log yang dihasilkan oleh Synthetics.

  • includeRequestHeaders— Apakah akan menyertakan header permintaan dalam laporan. Nilai default-nya false.

  • includeResponseHeaders— Apakah akan menyertakan header respons dalam laporan. Nilai default-nya false.

  • includeUrlPassword— Apakah akan menyertakan kata sandi yang muncul di URL. Secara default, kata sandi yang muncul URLs disunting dari log dan laporan, untuk mencegah pengungkapan data sensitif. Nilai default-nya false.

  • includeRequestBody— Apakah akan memasukkan badan permintaan dalam laporan. Nilai default-nya false.

  • includeResponseBody— Apakah akan memasukkan badan respons dalam laporan. Nilai default-nya false.

  • restrictedHeaders— Daftar nilai header untuk diabaikan, jika header disertakan. Ini berlaku untuk header permintaan dan respons. Misalnya, Anda dapat menyembunyikan kredensil Anda dengan meneruskan includeRequestHeaders sebagai benar dan restrictedHeaders sebagai. ['Authorization']

  • restrictedUrlParameters— Daftar jalur URL atau parameter kueri untuk disunting. Ini berlaku untuk URLs yang muncul di log, laporan, dan kesalahan. Parameter tersebut tidak peka terhadap huruf besar/kecil. Anda dapat meneruskan tanda bintang (*) sebagai nilai untuk menyunting semua jalur URL dan nilai parameter kueri. Default-nya adalah array kosong.

  • har— Menentukan apakah arsip HTTP (HAR) harus dihasilkan. Nilai default-nya true.

Berikut ini adalah contoh file konfigurasi laporan.

"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

Konfigurasi logging

Berlaku untuk log yang dihasilkan oleh CloudWatch Synthetics. Mengontrol verbositas log permintaan dan respons.

  • logRequest— Apakah akan mencatat setiap permintaan di log kenari. Untuk canary UI, ini mencatat setiap permintaan yang dikirim oleh browser. Nilai default-nya false.

  • logResponse— Apakah akan mencatat setiap respons di log kenari. Untuk canary UI, ini membuat log terhadap setiap respons yang diterima oleh browser. Bawaannya adalah false.

  • logRequestBody— Apakah akan mencatat badan permintaan bersama dengan permintaan di log kenari. Konfigurasi ini hanya berlaku logRequest jika benar. Nilai default-nya false.

  • logResponseBody— Apakah akan mencatat badan respons bersama dengan permintaan di log kenari. Konfigurasi ini hanya berlaku logResponse jika benar. Nilai default-nya false.

  • logRequestHeaders— Apakah akan mencatat header permintaan bersama dengan permintaan di log kenari. Konfigurasi ini hanya berlaku logRequest jika benar. Nilai default-nya false.

  • logResponseHeaders— Apakah akan mencatat header respons bersama dengan tanggapan di log kenari. Konfigurasi ini hanya berlaku logResponse jika benar. Nilai default-nya false.

Konfigurasi metrik HTTP

Konfigurasi untuk metrik yang terkait dengan jumlah permintaan jaringan dengan kode status HTTP yang berbeda, yang dipancarkan oleh CloudWatch Synthetics untuk kenari ini.

  • metric_2xx— Apakah akan memancarkan 2xx metrik (dengan CanaryName dimensi) untuk kenari ini. Nilai default-nya true.

  • metric_4xx— Apakah akan memancarkan 4xx metrik (dengan CanaryName dimensi) untuk kenari ini. Nilai default-nya true.

  • metric_5xx— Apakah akan memancarkan 5xx metrik (dengan CanaryName dimensi) untuk kenari ini. Nilai default-nya true.

  • failedRequestsMetric— Apakah akan memancarkan failedRequests metrik (dengan CanaryName dimensi) untuk kenari ini. Nilai default-nya true.

  • aggregatedFailedRequestsMetric— Apakah akan memancarkan failedRequests metrik (tanpa CanaryName dimensi) untuk kenari ini. Nilai default-nya true.

  • aggregated2xxMetric— Apakah akan memancarkan 2xx metrik (tanpa CanaryName dimensi) untuk kenari ini. Nilai default-nya true.

  • aggregated4xxMetric— Apakah akan memancarkan 4xx metrik (tanpa CanaryName dimensi) untuk kenari ini. Nilai default-nya true.

  • aggregated5xxMetric— Apakah akan memancarkan 5xx metrik (tanpa CanaryName dimensi) untuk kenari ini. Nilai default-nya true.

Konfigurasi metrik kenari

Konfigurasi untuk metrik lain yang dipancarkan oleh Synthetics. CloudWatch

  • failedCanaryMetric— Apakah akan memancarkan Failed metrik (dengan CanaryName dimensi) untuk kenari ini. Nilai default-nya true.

  • aggregatedFailedCanaryMetric— Apakah akan memancarkan Failed metrik (tanpa CanaryName dimensi) untuk kenari ini. Nilai default-nya true.

Konfigurasi lainnya

  • userAgent— String untuk ditambahkan ke agen pengguna. Agen pengguna adalah string yang disertakan dalam header permintaan, dan mengidentifikasi browser Anda ke situs web yang Anda kunjungi saat Anda menggunakan browser tanpa kepala. CloudWatch Synthetics secara otomatis menambahkan. CloudWatchSynthetics/canary-arn to the user agent Konfigurasi yang ditentukan ditambahkan ke agen pengguna yang dihasilkan. Nilai default agen pengguna untuk menambahkan adalah string kosong ("").

CloudWatch Variabel lingkungan Synthetics

Konfigurasikan tingkat dan format logging dengan menggunakan variabel lingkungan.

Format log

Runtime CloudWatch Synthetics Playwright membuat CloudWatch log untuk setiap lari kenari. Log ditulis dalam format JSON untuk query yang nyaman. Secara opsional, Anda dapat mengubah format log menjadiTEXT.

  • Environment variable name— CW_SYNTHETICS_LOG_FORMAT

  • Supported values— JSON, TEKS

  • Default— JSON

Tingkat log

Meskipun Debug mode pengaktifan meningkatkan verbositas, ini dapat berguna untuk pemecahan masalah.

  • Environment variable name— CW_SYNTHETICS_LOG_LEVEL

  • Supported values— MELACAK, MEN-DEBUG, INFO, PERINGATAN, KESALAHAN, FATAL

  • Default— INFO