执行安全金丝雀更新
CloudWatch Synthetics 安全金丝雀更新功能允许在应用更改之前,在先对现有金丝雀的更新进行测试。此功能可帮助验证金丝雀与新运行时和其他配置更改(例如代码或内存更改)的兼容性。这将有助于最大限度地减少错误更新造成的潜在监控中断。
通过对运行时版本更新、配置更改和代码脚本修改使用金丝雀安全更新,您可以降低风险、保持不间断的监控、在提交和更新之前验证更改并减少停机时间。
先决条件
确保已满足先决条件。
最佳实践
下面是在执行金丝雀时可遵循的一些最佳实践。
执行试运行以验证运行时更新
在对金丝雀进行生产环境更新之前执行试运行
试运行后查看金丝雀日志和构件
使用试运行来验证依赖项和库兼容性
使用试运行测试金丝雀
您可使用以下选项测试金丝雀更新:
使用 Amazon Web Services Management Console的“编辑”工作流程
前往 CloudWatch Synthetics 控制台。
选择要更新的金丝雀。
从操作下拉列表中选择编辑。
使用要测试的更改来更新金丝雀。例如,更改运行时版本或编辑脚本代码。
在金丝雀脚本下选择开始试运行,立即测试并查看结果;或在页面底部选择验证并稍后保存,开始测试并稍后在金丝雀详细信息页面中查看结果。
试运行成功后选择提交,完成金丝雀更新的提交。
使用 Amazon Web Services Management Console批量更新金丝雀
前往 CloudWatch Synthetics 控制台。
选择 Synthetics 列表页面。
最多可选择五个要为其更新运行时的金丝雀。
从操作下拉列表中选择更新运行时。
选择为新的运行时开始试运行开始试运行,并在更新之前测试更改。
在 Synthetics 列表页面上,您将在金丝雀的运行时版本旁边看到一个文本,其中显示了试运行的进度(仅在涉及运行时更新的试运行中才会显示此文本)。
试运行成功后,即可看到启动更新文本。
选择启动更新,完成提交运行时更新的提交。
如果试运行失败,则会看到更新试运行失败文本。选择文本,即可查看金丝雀详细信息页面的调试链接。
使用 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
State、StateReason 和 StateReasonCode 会显示试运行的状态。
使用 Amazon CloudFormation
在 Synthetics 金丝雀模板中,提供接受布尔值 true
或 false
的字段 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
的情况下更新金丝雀,必须明确指定代码参数。