本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 Playwright 執行時間撰寫 Node.js Canary 指令碼
主題
針對 Playwright 執行時間封裝 Node.js Canary 檔案
Canary 指令碼包含 .js
(CommonJS 語法) 或 .mjs
(ES 語法) 檔案,其中包含您的 Synthetics 處理常式程式碼,以及程式碼所依賴的任何其他套件和模組。以 ES (ECMAScript) 格式建立的指令碼應使用 .mjs 作為副檔名,或包含具有「類型」:「模組」欄位集的 package.json 檔案。與其他執行時間不同,例如 Node.js Puppeteer,您不需要將指令碼儲存在特定的資料夾結構中。您可以直接封裝指令碼。使用您偏好的zip
公用程式,在根目錄建立包含處理常式.zip
檔案的檔案。如果您的 Canary 指令碼取決於 Synthetics 執行時間中未包含的其他套件或模組,您可以將這些相依性新增至 .zip
檔案。若要這麼做,您可以執行 npm install
命令,在 node_modules
目錄中安裝函數所需的程式庫。下列範例 CLI 命令會建立名為 .zip
的檔案,my_deployment_package.zip
其中包含 index.js
或 index.mjs
檔案 (Synthetics 處理常式) 及其相依性。在此範例中,您會使用npm
套件管理員安裝相依性。
~/my_function ├── index.mjs ├── synthetics.json ├── myhelper-util.mjs └── node_modules ├── mydependency
在根目錄建立包含專案資料夾內容.zip
的檔案。使用 r
(遞迴) 選項,如下列範例所示,以確保 zip
壓縮子資料夾。
zip -r my_deployment_package.zip .
新增 Synthetics 組態檔案來設定 CloudWatch Synthetics 的行為。您可以建立synthetics.json
檔案,並將其儲存在與進入點或處理常式檔案相同的路徑。
或者,您也可以將進入點檔案存放在您選擇的資料夾結構中。不過,請確定已在處理常式名稱中指定資料夾路徑。
處理常式名稱
請務必將 Canary 的指令碼進入點 (處理常式) 設定為 myCanaryFilename.functionName
,以符合指令碼進入點的檔案名稱。您可以選擇將 Canary 存放在不同的資料夾中,例如 myFolder/my_canary_filename.mjs
。如果將其存放在單獨的資料夾中,請在指令碼進入點中指定該路徑,例如 myFolder/my_canary_filename.functionName
。
將現有的 Playwright 指令碼變更為用作 CloudWatch Synthetics Canary
您可以編輯 Node.js 和 Playwright 的現有指令碼,以用作 Canary。如需 Playwright 的詳細資訊,請參閱 Playwright 程式庫
您可以使用下列儲存在檔案 中的 Playwright 指令碼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();
執行下列步驟來轉換指令碼:
-
建立和匯出
handler
函數。處理常式是指令碼的進入點函數。您可以為處理常式函數選擇任何名稱,但指令碼中使用的函數應與 Canary 處理常式中的函數相同。如果您的指令碼名稱為exampleCanary.mjs
,且處理常式函數名稱為myhandler
,則您的 Canary 處理常式會命名為exampleCanary.myhandler
。在下列範例中,處理常式函數名稱為handler
。exports.handler = async () => { // Your script here };
-
將 匯入
Synthetics Playwright module
為相依性。import { synthetics } from '@amzn/synthetics-playwright';
-
使用 Synthetics
Launch
函數啟動瀏覽器。const browser = await synthetics.launch();
-
使用 Synthetics
newPage
函數建立新的 Playwright 頁面。const page = await synthetics.newPage();
您的指令碼現在已準備好以 Synthetics Canary 執行。以下是更新的指令碼:
以 ES6 格式更新指令碼
以.mjs
副檔名儲存的指令碼檔案。
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(); } };
更新 CommonJS 格式的指令碼
以.js
副檔名儲存的指令碼檔案。
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 Synthetics 組態
您可以提供名為 的選用 JSON 組態檔案,來設定 Synthetics Playwright 執行時間的行為synthetics.json
。此檔案應與處理常式檔案封裝在相同的位置。雖然組態檔案是選用的,但如果您未提供組態檔案,或組態金鑰遺失,CloudWatch 會假設預設值。
封裝您的組態檔案
以下是支援的組態值及其預設值。
{ "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 }
步驟組態
-
screenshotOnStepStart
– 決定 Synthetics 是否應在步驟開始之前擷取螢幕擷取畫面。預設值為true
。 -
screenshotOnStepSuccess
– 決定 Synthetics 是否應在步驟成功後擷取螢幕擷取畫面。預設值為true
。 -
screenshotOnStepFailure
– 判斷 Synthetics 是否應在步驟失敗後擷取螢幕擷取畫面。預設值為true
。 -
continueOnStepFailure
– 判斷指令碼是否應該在步驟失敗後繼續。預設值為false
。 -
stepSuccessMetric
– 判斷是否發出步驟的SuccessPercent
指標。如果步驟成功,且0
如果步驟失敗,則步驟的SuccessPercent
指標100
適用於 Canary 執行。預設值為true
。 -
stepDurationMetric
– 判斷是否發出步驟的Duration
指標。Duration
指標會以步驟執行的持續時間,以毫秒為單位發出。預設值為true
。
報告組態
包括 CloudWatch Synthetics 產生的所有報告,例如 HAR 檔案和 Synthetics 步驟報告。敏感資料修訂欄位 restrictedHeaders
和 restrictedUrlParameters
也適用於 Synthetics 產生的日誌。
-
includeRequestHeaders
– 是否要在報告中包含請求標頭。預設值為false
。 -
includeResponseHeaders
– 是否要在報告中包含回應標頭。預設值為false
。 -
includeUrlPassword
– 是否包含顯示在 URL 中的密碼。根據預設,URLs中出現的密碼會從日誌和報告中修訂,以防止洩露敏感資料。預設值為false
。 -
includeRequestBody
– 是否要在報告中包含請求內文。預設值為false
。 -
includeResponseBody
– 是否要在報告中包含回應內文。預設值為false
。 -
restrictedHeaders
– 如果包含標頭,則要忽略的標頭值清單。這適用於請求和回應標頭。例如,您可以透過將 傳遞includeRequestHeaders
為 true 和restrictedHeaders
來隱藏您的登入資料['Authorization']
。 -
restrictedUrlParameters
– 要修訂的 URL 路徑或查詢參數清單。這適用於出現在日誌、報告和錯誤的 URLs。參數區分大小寫。您可以傳遞星號 (*
) 做為值,以修訂所有 URL 路徑和查詢參數值。預設為空陣列。 -
har
– 判斷是否應產生 HTTP 封存 (HAR)。預設值為true
。
以下是報告組態檔案的範例。
"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
記錄組態
適用於 CloudWatch Synthetics 產生的日誌。控制請求和回應日誌的詳細資訊。
-
logRequest
– 是否要在 Canary 日誌中記錄每個請求。對於 UI Canary,這會記錄瀏覽器傳送的每個請求。預設值為false
。 -
logResponse
– 是否要在 Canary 日誌中記錄每個回應。對於 UI Canary,這會記錄瀏覽器收到的每個回應。預設值為false
。 -
logRequestBody
– 是否在 Canary 日誌中記錄請求內文與請求。此組態只有在logRequest
為 true 時才適用。預設值為false
。 -
logResponseBody
– 是否要在 Canary 日誌中記錄回應內文與請求。此組態只有在logResponse
為 true 時才適用。預設值為false
。 -
logRequestHeaders
– 是否在 Canary 日誌中記錄請求標頭和請求。此組態只有在logRequest
為 true 時才適用。預設值為false
。 -
logResponseHeaders
– 是否要在 Canary 日誌中記錄回應標頭和回應。此組態只有在logResponse
為 true 時才適用。預設值為false
。
HTTP 指標組態
CloudWatch Synthetics 針對此 Canary 發出的具有不同 HTTP 狀態碼之網路請求計數相關的指標組態。
-
metric_2xx
– 是否要發出此 Canary2xx
的 指標 (含CanaryName
維度)。預設值為true
。 -
metric_4xx
– 是否要發出此 Canary4xx
的 指標 (含CanaryName
維度)。預設值為true
。 -
metric_5xx
– 是否要發出此 Canary5xx
的 指標 (含CanaryName
維度)。預設值為true
。 -
failedRequestsMetric
– 是否要發出此 CanaryfailedRequests
的 指標 (含CanaryName
維度)。預設值為true
。 -
aggregatedFailedRequestsMetric
– 是否要發出此 CanaryfailedRequests
的 指標 (不含CanaryName
維度)。預設值為true
。 -
aggregated2xxMetric
– 是否要發出此 Canary2xx
的 指標 (不含CanaryName
維度)。預設值為true
。 -
aggregated4xxMetric
– 是否要發出此 Canary4xx
的 指標 (不含CanaryName
維度)。預設值為true
。 -
aggregated5xxMetric
– 是否要發出此 Canary5xx
的 指標 (不含CanaryName
維度)。預設值為true
。
Canary 指標組態
CloudWatch Synthetics 發出之其他指標的組態。
-
failedCanaryMetric
– 是否要發出此 CanaryFailed
的 指標 (含CanaryName
維度)。預設值為true
。 -
aggregatedFailedCanaryMetric
– 是否要發出此 CanaryFailed
的 指標 (不含CanaryName
維度)。預設值為true
。
其他組態
-
userAgent
– 要附加至使用者代理程式的字串。使用者代理程式是包含在請求標頭中的字串,當您使用無頭瀏覽器時, 會將您的瀏覽器識別為您造訪的網站。CloudWatch Synthetics 會自動新增CloudWatchSynthetics/
。指定的組態會附加到產生的使用者代理程式。要附加的預設使用者代理程式值是空字串 (canary-arn
to the user agent""
)。
CloudWatch Synthetics 環境變數
使用環境變數設定記錄層級和格式。
日誌格式
CloudWatch Synthetics Playwright 執行時間會為每個 Canary 執行建立 CloudWatch 日誌。日誌是以 JSON 格式撰寫,方便查詢。或者,您可以將日誌格式變更為 TEXT
。
-
Environment variable name
– CW_SYNTHETICS_LOG_FORMAT -
Supported values
– JSON、TEXT -
Default
– JSON
日誌層級
雖然啟用Debug
模式會增加詳細程度,但對於故障診斷非常有用。
-
Environment variable name
– CW_SYNTHETICS_LOG_LEVEL -
Supported values
– 追蹤、偵錯、資訊、警告、錯誤、嚴重 -
Default
– INFO