You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 08:54:00