執行安全 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 會在 DryRunConfigOutput 內傳回 DryRunId

使用所提供的 DryRunId 呼叫 GetCanary,可接收 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

StateStateReasonStateReasonCode 顯示模擬執行的狀態。

使用 CloudFormation

在 Synthetics Canary 的範本中,提供接受布林值 truefalse 的欄位 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 時,必須明確指定程式碼參數。