

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用 Canary 藍圖
<a name="CloudWatch_Synthetics_Canaries_Blueprints"></a>

本節提供有關每個 Canary 藍圖以及每個藍圖最適合工作的詳細資訊。提供的藍圖適用於下列 Canary 類型：

**Topics**
+ [活動訊號監控](#CloudWatch_Synthetics_Canaries_Blueprints_Heartbeat)
+ [API Canary](#CloudWatch_Synthetics_Canaries_Blueprints_API)
+ [中斷的連結檢查程式](#CloudWatch_Synthetics_Canaries_Blueprints_Broken_Links)
+ [視覺化監控藍圖](#CloudWatch_Synthetics_Canaries_Blueprints_VisualTesting)
+ [Canary 記錄器](#CloudWatch_Synthetics_Canaries_Blueprints_Recorder)
+ [GUI 工作流程建置器](#CloudWatch_Synthetics_Canaries_Blueprints_GUI_Workflow)
+ [多檢查藍圖](#CloudWatch_Synthetics_Canaries_Blueprints_Multichecks_Blueprint)
+ [建立多檢查藍圖 Canary](CloudWatch_Synthetics_Canaries_MultiCheck_Blueprint.md)

當您使用藍圖建立 Canary 時，在填寫 CloudWatch 主控台中的欄位時，頁面的 **Script editor** (指令碼編輯器) 區域會顯示您正在建立作為 Node.js 指令碼的 Canary。您也可以在此區域編輯您的 Canary 以進一步自訂。

## 活動訊號監控
<a name="CloudWatch_Synthetics_Canaries_Blueprints_Heartbeat"></a>

活動訊號指令碼會載入指定的 URL，並儲存頁面的螢幕擷取畫面和 HTTP 封存檔案 (HAR 檔案)。它們也會儲存被存取 URL 的日誌。

您可以使用 HAR 檔案來檢視有關網頁的詳細效能資料。您可以分析 Web 請求的清單，並掌握效能問題，例如項目載入的時間。

若您的 Canary 使用 `syn-nodejs-puppeteer-3.1` 或更新的執行時間版本，您可使用活動訊號監控藍圖來監控多個 URL，並查看 Canary 執行報告之步驟摘要中每個 URL 的狀態、持續時間、相關聯的螢幕擷取畫面和失敗原因。

## API Canary
<a name="CloudWatch_Synthetics_Canaries_Blueprints_API"></a>

API Canary 可以測試 REST API 的基本讀取和寫入功能。REST 代表*具象狀態傳輸*，是開發人員在建立 API 時遵循的一組規則。其中一個規則指出，指向特定 URL 的連結應該傳回一段資料。

Canary 可以使用任何 API 並測試所有類型的功能。每個 Canary 可以進行多個 API 呼叫。

在使用 `syn-nodejs-2.2` 或更新的執行時間版本的 Canary 中，API Canary 藍圖支援多步驟 Canary，將 API 作為 HTTP 步驟進行監控。您可以在單一 Canary 中測試多個 API。每個步驟都是個別請求，可存取不同的 URL、使用不同的標頭，並使用不同的規則來確定是否擷取標頭和回應內文。藉由不擷取標頭和回應內文，您可以防止記錄敏感資料。

API Canary 中的每個請求都包含下列資訊：
+ *端點*，也就是您請求的 URL。
+ *方法*，這是傳送到伺服器的請求類型。REST API 支援 GET (讀取)、POST (寫入)、PUT (更新)、PATCH (更新) 和 DELETE (刪除) 操作。
+ *標頭*，同時提供資訊給用戶端和伺服器。它們用於身分驗證並提供內文內容的相關資訊。如需有效標頭的清單，請參閱 [HTTP 標頭](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers)。
+ *資料* (或*內文*)，包含要傳送到伺服器的資訊。這僅用於 POST、PUT、PATCH 或 DELETE 請求。

**注意**  
Playwright 執行時期不支援 API Canary 藍圖。

API Canary 藍圖支援 GET 和 POST 方法。當您使用此藍圖時，必須指定標頭。例如，您可以將 指定**Authorization**為**金鑰**，並將必要的授權資料指定為該金鑰**的值**。

如果您要測試 POST 請求，您也可以在**資料**欄位中指定要張貼的內容。

 **與 API Gateway 的整合** 

API 藍圖與 Amazon API Gateway 整合。這可讓您從與 Canary 相同的 AWS 帳戶和區域選取 API Gateway API 和階段，或從 API Gateway 上傳 Swagger 範本以進行跨帳戶和跨區域 API 監控。然後，您可以在主控台中選擇其餘的詳細資訊來建立 Canary，而不是從頭開始輸入。如需 API Gateway 的詳細資訊，請參閱[什麼是 Amazon API Gateway？](https://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html) 

 **使用私有 API** 

您可以在 Amazon API Gateway 中建立使用私有 API 的 Canary。如需詳細資訊，請參閱[是否在 Amazon API Gateway 中建立私有 API？](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-private-apis.html)

## 中斷的連結檢查程式
<a name="CloudWatch_Synthetics_Canaries_Blueprints_Broken_Links"></a>

中斷連結檢查程式會使用 `document.getElementsByTagName('a')` 收集您正在測試之 URL 內的所有連結。它最多只會測試您指定的連結數目，而 URL 本身可計為第一個連結。例如，如果您想要檢查包含五個連結之頁面上的所有連結，您必須指定要讓 Canary 跟隨六個連結。

中斷連結檢查程式 Canary 使用 `syn-nodejs-2.0-beta` 執行時間或更新版本支援下列額外的功能：
+ 提供一份報告，其中包含已檢查的連結、狀態碼、失敗原因 (如果有的話)，以及來源和目的地頁面螢幕擷取畫面。
+ 檢視 Canary 結果時，您可以篩選僅查看中斷的連結，然後根據失敗的原因修正連結。
+ 此版本會擷取每個連結的附註來源頁面螢幕擷取畫面，並反白顯示找到連結的錨點。不會對隱藏的元件對象標註。
+ 您可以將此版本設定為擷取來源和目的地頁面、僅來源頁面或僅目的地頁面的螢幕擷取畫面。
+ 此版本修正了舊版中的問題，亦即，即使從第一頁湊集了更多連結，Canary 指令碼也會在第一個中斷的連結後停止。

**注意**  
Playwright 執行時期不支援中斷的連結檢查程式藍圖。

如果您想使用 `syn-1.0` 更新現有 Canary，以使用新的執行時期，必須刪除並重新建立 Canary。將現有的 Canary 更新到新的執行時間不會使這些功能可用。

中斷連結檢查程式 Canary 會偵測下列類型的連結錯誤：
+ 404 找不到網頁
+ 無效的主機名稱
+ URL 錯誤。例如，URL 缺少一個括號、有額外的斜線，或者使用錯誤的通訊協定。
+ 無效的 HTTP 回應代碼。
+ 主機伺服器傳回沒有內容也沒有回應代碼的空回應。
+ 在 Canary 執行期間，HTTP 請求不斷逾時。
+ 主機持續中斷連線，因為它設定錯誤或太忙碌。

## 視覺化監控藍圖
<a name="CloudWatch_Synthetics_Canaries_Blueprints_VisualTesting"></a>

視覺化監控藍圖包含可比較在 Canary 執行期間擷取的螢幕擷取畫面與基準 Canary 執行期間擷取的螢幕擷取畫面的程式碼。如果兩個螢幕擷取畫面之間的差異超過閾值百分比，則 Canary 失敗。在執行 **syn-puppeteer-node-3.2** 或更新版本的 Canary 中支援視覺化監控。目前，執行 Python 和 Selenium 或者使用 Playwright 執行時期的 Canary 不支援它。

視覺化監控藍圖在預設藍圖 Canary 指令碼中包含下列程式碼行，可啟用視覺化監控。

```
syntheticsConfiguration.withVisualCompareWithBaseRun(true);
```

將此行新增至指令碼之後，Canary 第一次成功執行時，它會使用該執行期間擷取的螢幕擷取畫面作為比較基準。在第一次 Canary 執行之後，您可以使用 CloudWatch 主控台編輯 Canary 來執行以下任何操作：
+ 將 Canary 的下一個執行設定為新基準。
+ 在目前的基準螢幕擷取畫面上繪製邊界，以指定要在視覺化比較期間忽略的螢幕擷取畫面區域。
+ 移除用於視覺化監控的螢幕擷取畫面。

如需使用 CloudWatch 主控台編輯 Canary 的詳細資訊，請參閱 [編輯或刪除 Canary](synthetics_canaries_deletion.md)。

您還可以使用 ` nextrun` 或 `lastrun` 參數，或是在 [UpdateCanary](https://docs.aws.amazon.com/AmazonSynthetics/latest/APIReference/API_UpdateCanary.html) API 中指定 Canary 執行 ID，進而變更 Canary 執行。

當您使用視覺化監控藍圖時，請輸入要擷取螢幕擷取畫面的 URL，並將差異閾值指定為百分比。執行基準後，未來執行 Canary 可偵測大於該閾值的視覺化差異，進而觸發 Canary 失敗。執行基線後，您也可以編輯 Canary，在基線螢幕擷取畫面上「繪製」邊界，這些邊界要在視覺化監控期間忽略。

視覺化監控功能由 ImageMagick 開放原始碼軟體工具組提供支援。如需詳細資訊，請參閱 [ ImageMagick。 ](https://imagemagick.org/index.php)

## Canary 記錄器
<a name="CloudWatch_Synthetics_Canaries_Blueprints_Recorder"></a>

使用 Canary 記錄器藍圖，您可以使用 CloudWatch Synthetics Recorder 來記錄您在網站上的點按和輸入動作，並自動產生 Node.js 指令碼，而該指令碼可用於建立遵循相同步驟的 Canary。CloudWatch Synthetics Recorder 是由 Amazon 提供的 Google Chrome 延伸。使用 Playwright 執行時期的 Canary 不支援 Canary 記錄器。

**點數**：CloudWatch Synthetics Recorder 是以[無周邊記錄器](https://github.com/checkly/headless-recorder)為基礎。

如需詳細資訊，請參閱[使用適用於 Google Chrome 的 CloudWatch Synthetics Recorder](CloudWatch_Synthetics_Canaries_Recorder.md)。

## GUI 工作流程建置器
<a name="CloudWatch_Synthetics_Canaries_Blueprints_GUI_Workflow"></a>

GUI 工作流程建置器藍圖會驗證是否可以在您的網頁上採取動作。例如，如果您有一個包含登入表單的網頁，Canary 可以填入使用者和密碼欄位並提交表單，以確認網頁是否正常運作。

當您使用藍圖建立此類型的 Canary 時，請指定希望 Canary 在網頁上採取的動作。您可以使用的動作如下：
+ **按一下**— 選取您指定的元素，並模擬使用者按一下或選擇元素。

  若要指定 Node.js 指令碼中的元素，請使用 `[id=]` 或 ` a[class=]`。

  若要指定 Python 指令碼中的元素，請使用 `xpath //*[@id=]` 或 ` //*[@class=]`。
+ **驗證選擇器**— 驗證指定的元素是否存在於網頁上。此測試有助於驗證先前的動作是否導致正確的元素填入頁面。

  若要指定要在 Node.js 指令碼中驗證的元素，請使用 `[id=]` 或 ` a[class=]`。

  若要指定要在 Python 指令碼中驗證的元素，請使用 `xpath //*[@id=]` 或 `//*[class=]`。
+ **驗證文字**— 驗證指定的字串是否包含在目標元素中。此測試有助於驗證先前的動作是否導致顯示正確的文字。

  若要指定 Node.js 指令碼中的元素，請使用 ` div[@id=]//h1` 之類的格式，因為此動作使用 Puppeteer 中的 `waitForXPath` 函數。

  若要指定 Python 指令碼中的元素，請使用 ` //*[@id=] ` 或 //\*[@class=] 之類的 xpath 格式，因為此動作使用 Selenium 中的 `implicitly_wait` 函數。
+ **輸入文字**— 在目標元素中寫入指定的文字。

  若要指定要在 Node.js 指令碼中驗證的元素，請使用 `[id=]` 或 ` a[class=]`。

  若要指定要在 Python 指令碼中驗證的元素，請使用 `xpath //*[@id=]` 或 `//*[@class=]`。
+ **按一下並導覽**— 選擇指定的元素後等待整個頁面載入。這很適合用於需要重新載入頁面時。

  若要指定 Node.js 指令碼中的元素，請使用 `[id=]` 或 ` a[class=]`。

  若要指定 Python 指令碼中的元素，請使用 `xpath //*[@id=]` 或 ` //*[@class=]`。

例如，以下藍圖使用 Node.js。其會按一下指定 URL 上的 **firstButton**，驗證是否出現了具有預期文字的預期選擇器，在 **Name** (名稱) 欄位中輸入名稱 `Test_Customer`，按一下 **Login** (登入) 按鈕，然後檢查下一頁的 **Welcome** (歡迎) 文字，驗證是否成功登入。

![主控台中的建立 Canary 頁面，欄位中已填入 GUI 工作流程藍圖。](http://docs.aws.amazon.com/zh_tw/AmazonCloudWatch/latest/monitoring/images/canary_create_gui_workflow.PNG)


使用下列執行時間的 GUI 工作流程 Canary 也會提供針對每個 Canary 執行而執行的步驟摘要。您可以使用與每個步驟相關聯的螢幕擷取畫面和錯誤訊息，以尋找失敗的根本原因。
+ `syn-nodejs-2.0` 或更新版本
+ `syn-python-selenium-1.0` 或更新版本

## 多檢查藍圖
<a name="CloudWatch_Synthetics_Canaries_Blueprints_Multichecks_Blueprint"></a>

多檢查藍圖可簡化 Canary 建立。它使用簡單的 JSON 組態來降低成本，該組態提供out-of-the-box可用的功能來執行 HTTP、DNS、SSL 和 TCP 檢查。您最多可以設定 10 個檢查。將每個檢查設定為依序執行的數值步驟，以清楚了解 Canary 流程。

多檢查藍圖支援：
+ 基本 HTTP 請求、TCP 請求、驗證 DNS 記錄和監控 SSL 憑證
+ 與 Secrets Manager 整合的 HTTP 身分驗證方法，例如 Basic、API Key、OAuth 和 Sigv4 
+ 每個檢查的宣告

如需詳細資訊，請參閱[建立 Canary](CloudWatch_Synthetics_Canaries_Create.md)。