View a markdown version of this page

執行安全 Canary 更新 - Amazon CloudWatch

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

執行安全 Canary 更新

CloudWatch 合成安全 Canary 更新可讓您在套用變更之前,先測試現有 Canary 的更新。此功能可協助您驗證 Canary 與新執行時期和其他組態變更的相容性,例如程式碼或記憶體變更。這有助於將錯誤更新造成的潛在監控中斷降至最低。

透過在執行時期版本更新、組態變更和程式碼指令碼修改中使用 Canary 安全更新,您可以降低風險、維持不間斷的監控、在遞交前驗證變更、進行更新並減少停機時間。

先決條件

確定滿足必要條件。

  • AWS 具有 CloudWatch 合成許可的帳戶

  • 支援的執行時期版本上的現有 Canary (請參閱限制了解相容的執行時期)

  • 執行模擬執行時包含相容的執行時期 (請參閱限制了解相容的執行時期)

最佳實務

以下是執行 Canary 時要遵循的一些最佳實務。

  • 執行模擬執行以驗證執行時期更新

  • 在生產更新至 Canary 之前執行模擬執行

  • 模擬執行完成後檢閱 Canary 日誌和成品

  • 使用模擬執行來驗證相依項和程式庫相容性

使用模擬執行測試 Canary

您可以使用下列選項來測試 Canary 更新:

使用 AWS 管理主控台的編輯工作流程

  1. 前往 CloudWatch 合成主控台。

  2. 選取要更新的 Canary。

  3. 從動作下拉式清單中,選擇編輯。

    使用要測試的變更來更新 Canary。例如,變更執行時間版本或編輯指令碼的程式碼。

  4. 在 Canary 指令碼下,選擇啟動模擬執行以立即測試和檢視結果,或選擇頁面底部的稍後驗證並儲存以開始測試,並稍後前往 Canary 詳細資訊頁面檢視結果。

  5. 模擬執行成功後,選擇提交以遞交 Canary 更新。

使用 AWS 管理主控台 更新批次中的 Canary

  1. 前往 CloudWatch 合成主控台。

  2. 選擇 Synthetics 清單頁面。

  3. 選取最多五個您要更新執行時期的 Canary。

  4. 從動作下拉式清單中,選擇更新執行時期。

  5. 選擇針對新的執行時期開始模擬執行,以開始模擬執行,並在更新之前測試您的變更。

  6. 在 Synthetics 清單頁面上,您會在 Canary 的執行期版本旁看到文字,顯示乾執行的進度 (這只會針對涉及執行期更新的乾執行顯示)。

    試轉成功後,您會看到啟動更新文字。

  7. 選擇啟動更新以遞交執行時期更新。

  8. 如果模擬執行失敗,您會看到更新模擬執行失敗的文字。選擇文字以檢視 Canary 詳細資訊頁面的偵錯連結。

使用 AWS CLI 或 SDK

API 會啟動所提供 Canary 名稱 MyCanary 的模擬執行,並將執行時期版本更新為 syn-nodejs-puppeteer-10.0。

aws synthetics start-canary-dry-run \ --name MyCanary \ --runtime-version syn-nodejs-puppeteer-10.0 // Or if you wanted to update other configurations: aws synthetics start-canary-dry-run \ --name MyCanary \ --execution-role-arn arn:aws:iam::123456789012:role/NewRole

API 會在 DryRunId內傳回 DryRunConfigOutput 。

GetCanary 使用提供的 呼叫 DryRunId,以接收 Canary 的試轉組態,以及DryRunConfig包含列為 之試轉狀態的額外欄位LastDryRunExecutionStatus。

aws synthetics get-canary \ --name MyCanary \ --dry-run-id XXXX-XXXX-XXXX-XXXX

如需詳細資訊,請使用 GetCanaryRuns 搭配提供的 DryRunId 來擷取執行和其他資訊。

aws synthetics get-canary-runs \ --name MyCanary \ --dry-run-id XXXX-XXXX-XXXX-XXXX

模擬執行成功後,您可以搭配提供的 DryRunId 使用 UpdateCanary,以遞交變更。

aws synthetics update-canary \ --name MyCanary \ --dry-run-id XXXX-XXXX-XXXX-XXXX

當它因任何原因 (GetCanaryRuns 的結果詳細說明) 失敗時,GetCanaryRuns 的結果會有一個成品位置,其中包含要偵錯的日誌。沒有日誌時,就無法建立模擬執行。您可以使用 GetCanary 驗證。

aws synthetics get-canary \ --name MyCanary \ --dry-run-id XXXX-XXXX-XXXX-XXXX

狀態、StateReason 和 StateReasonCode 會顯示試轉的狀態。

使用 CloudFormation

在 Synthetics Canary 的範本中,提供接受布林值 true 或 false 的欄位 DryRunAndUpdate。

當值為 true 時,每次更新都會執行一次模擬執行,以驗證變更內容,隨後才會自動更新 Canary。當試轉失敗時,Canary 不會更新,且部署和 CloudFormation 部署失敗,原因為有效。若要偵錯此問題,請透過 AWS Synthetics 主控台執行;或者如果使用 API,請使用 GetCanaryRuns API 取得 ArtifactS3Location,然後下載 *-log.txt 檔案以檢閱 Canary 日誌執行是否有錯誤。驗證之後,請修改 CloudFormation 範本並重試部署,或使用上述 API 進行驗證。

當值為 false 時,合成不會執行模擬執行以驗證變更,而是直接遞交您的更新。

如需排解 Canary 故障的資訊,請參閱 對失敗的 Canary 進行故障診斷。

範本範例。

SyntheticsCanary: Type: 'AWS::Synthetics::Canary' Properties: Name: MyCanary RuntimeVersion: syn-nodejs-puppeteer-10.0 Schedule: {Expression: 'rate(5 minutes)', DurationInSeconds: 3600} ... DryRunAndUpdate: true

限制

  • 支援執行時間版本 – syn-nodejs-puppeteer-10.0+、syn-nodejs-playwright-2.0+、syn-python-selenium-5.1+ 和 syn-nodejs-3.0+

  • 每個 Canary 一次只能執行一個模擬執行

  • 當模擬執行失敗時,您無法更新 Canary

  • 模擬執行無法測試任何排程欄位變更

注意

當您使用 Playwright Canary 的程式碼變更啟動模擬執行,並且想要更新 Canary 而不提供相關聯的 DryRunId 時,必須明確指定程式碼參數。