执行安全金丝雀更新 - Amazon CloudWatch
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

执行安全金丝雀更新

CloudWatch Synthetics 安全金丝雀更新功能允许在应用更改之前,在先对现有金丝雀的更新进行测试。此功能可帮助验证金丝雀与新运行时和其他配置更改(例如代码或内存更改)的兼容性。这将有助于最大限度地减少错误更新造成的潜在监控中断。

通过对运行时版本更新、配置更改和代码脚本修改使用金丝雀安全更新,您可以降低风险、保持不间断的监控、在提交和更新之前验证更改并减少停机时间。

先决条件

确保已满足先决条件。

  • 具有 CloudWatch Synthetics 权限的 Amazon 账户

  • 支持的运行时版本上已有金丝雀(有关兼容的运行时,请参阅限制

  • 执行试运行时包括兼容的运行时(有关兼容的运行时,请参阅限制

最佳实践

下面是在执行金丝雀时可遵循的一些最佳实践。

  • 执行试运行以验证运行时更新

  • 在对金丝雀进行生产环境更新之前执行试运行

  • 试运行后查看金丝雀日志和构件

  • 使用试运行来验证依赖项和库兼容性

使用试运行测试金丝雀

您可使用以下选项测试金丝雀更新:

使用 Amazon Web Services Management Console的“编辑”工作流程

  1. 前往 CloudWatch Synthetics 控制台。

  2. 选择要更新的金丝雀。

  3. 操作下拉列表中选择编辑

    使用要测试的更改来更新金丝雀。例如,更改运行时版本或编辑脚本代码。

  4. 金丝雀脚本下选择开始试运行,立即测试并查看结果;或在页面底部选择验证并稍后保存,开始测试并稍后在金丝雀详细信息页面中查看结果。

  5. 试运行成功后选择提交,完成金丝雀更新的提交。

使用 Amazon Web Services Management Console批量更新金丝雀

  1. 前往 CloudWatch Synthetics 控制台。

  2. 选择 Synthetics 列表页面。

  3. 最多可选择五个要为其更新运行时的金丝雀。

  4. 操作下拉列表中选择更新运行时

  5. 选择为新的运行时开始试运行开始试运行,并在更新之前测试更改。

  6. Synthetics 列表页面上,您将在金丝雀的运行时版本旁边看到一个文本,其中显示了试运行的进度(仅在涉及运行时更新的试运行中才会显示此文本)。

    试运行成功后,即可看到启动更新文本。

  7. 选择启动更新,完成提交运行时更新的提交。

  8. 如果试运行失败,则会看到更新试运行失败文本。选择文本,即可查看金丝雀详细信息页面的调试链接。

使用 Amazon CLI 或 SDK

API 开始对提供的金丝雀名称 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,获取金丝雀的试运行配置以及包含列为 LastDryRunExecutionStatus 的试运行状态的附加字段 DryRunConfig

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

成功试运行后,即可将 UpdateCanary 与提供的 DryRunId 一起使用来提交更改。

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 会显示试运行的状态。

使用 Amazon CloudFormation

在 Synthetics 金丝雀模板中,提供接受布尔值 truefalse 的字段 DryRunAndUpdate

当值为 true 时,每次更新都会执行试运行来验证更改,然后自动更新金丝雀。如果试运行失败,金丝雀不会更新,而且部署和 Amazon CloudFormation 部署会因有效原因失败。要调试此问题,请使用 Amazon Synthetics 控制台;如果使用 API 调试,请使用 GetCanaryRuns API 获取 ArtifactS3Location,然后下载 *-log.txt 文件,查看金丝雀日志执行中是否存在错误。验证后,修改 Amazon CloudFormation 模板并重试部署或使用上述 API 进行验证。

当值为 false 时,Synthetics 不会执行试运行来验证更改,而是直接提交您的更新。

有关对失败金丝雀进行问题排查的信息,请参阅排查失败金丝雀的问题

示例模板:

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+

  • 每个金丝雀每次只能执行一次试运行

  • 如果试运行失败,则无法更新金丝雀

  • 试运行无法测试任何计划字段的更改

注意

如果启动具有 Playwright 金丝雀代码更改的试运行,并且想要在不提供相关 DryRunId 的情况下更新金丝雀,必须明确指定代码参数。