如何在Synthetics Canary中仅让单个executionStep失败不终止整体执行
解决方案
问题根因
- 你之前使用的
continueOnStepFailure参数仅在 CloudWatch Synthetics 运行时版本syn-nodejs-puppeteer-v3.3及以上支持,旧版本运行时无法识别该参数,会直接抛出未定义异常导致Canary整体崩溃 synthetics.addExecutionError是全局错误标记方法,只会将整个Canary标记为失败,不会关联错误到具体执行步骤,因此所有步骤都会显示为通过状态- 直接抛出字符串而非Error实例,会导致Synthetics无法正常解析错误信息,也可能触发异常崩溃
正确实现方式
首先确认你的Canary运行时版本已升级到syn-nodejs-puppeteer-v3.3及以上,之后按以下写法编写代码即可:
const synthetics = require('Synthetics'); const log = require('SyntheticsLogger'); exports.handler = async () => { // 正常执行的步骤 await synthetics.executeStep('My Step', async () => { // 此处填写第一步业务代码 log.info('第一步执行完成'); }); // 需要单独标记失败、不中断后续执行的步骤 await synthetics.executeStep('My Other step', async () => { // 此处填写第二步业务代码 // 模拟失败:注意必须抛出Error实例,不能直接抛出字符串 throw new Error('An Error Occured'); }, { continueOnStepFailure: true, screenshotOnStepFailure: true }); // 后续步骤不受第二步失败影响,正常执行、正常显示状态 await synthetics.executeStep('My Third Step', async () => { // 此处填写第三步业务代码 log.info('第三步执行完成'); }); };
执行效果
该写法运行后:
- 「My Step」、「My Third Step」会显示为成功状态
- 「My Other step」会被单独标记为失败状态,错误信息正常展示
- 整个Canary的最终运行状态会标记为失败(符合Synthetics默认逻辑:只要存在失败步骤,整体状态为失败,若不需要这个特性可以自行通过添加自定义指标调整统计逻辑)
内容的提问来源于stack exchange,提问作者Gimy boya
相关产品推荐
相关产品推荐

