如何配置CloudWatch规则在AWS Step Functions ExecutionsFailed时触发Lambda
如何用CloudWatch Events触发Lambda响应Step Functions执行失败(针对历史记录超限场景)
刚好之前处理过类似的需求,我来一步步给你讲清楚怎么配置,重点是CloudWatch事件模式的写法——这也是最容易踩坑的地方。
第一步:创建CloudWatch事件规则
- 打开CloudWatch控制台,左侧导航栏找到事件 > 规则,点击「创建规则」。
- 在「事件源」区域,选择事件模式,然后点击「自定义模式」,接着选「编辑」进入模式编写界面。
第二步:编写精准匹配的事件模式
这里分两种配置场景,你可以根据需求选择:
通用匹配所有执行失败场景
如果你想捕获这个状态机所有的FAILED执行事件,用下面的模式(记得替换成你自己的状态机ARN):
{ "source": ["aws.states"], "detail-type": ["Step Functions Execution Status Change"], "detail": { "status": ["FAILED"], "stateMachineArn": ["arn:aws:states:你的区域:你的账号ID:stateMachine:你的状态机名称"] } }
仅匹配历史记录超限的失败(你的专属场景)
因为你是遇到了HistoryLimitExceeded错误(超过25000条历史记录限制),可以进一步过滤规则,只触发这个特定错误的事件,避免无关失败干扰:
{ "source": ["aws.states"], "detail-type": ["Step Functions Execution Status Change"], "detail": { "status": ["FAILED"], "stateMachineArn": ["arn:aws:states:你的区域:你的账号ID:stateMachine:你的状态机名称"], "error": ["HistoryLimitExceeded"] } }
第三步:配置Lambda作为事件目标
- 滚动到「目标」区域,点击「添加目标」,选择Lambda函数。
- 从下拉列表里选中你准备好的响应Lambda函数。
- 如果是第一次配置这类规则,CloudWatch会提示你创建一个新的IAM角色,让它有权限调用Lambda——直接用默认创建的角色就行,不需要额外修改权限。
- 点击「配置详情」,给规则起一个直观的名字(比如
MyStateMachine-HistoryLimit-Failed-Trigger),添加简短描述,最后点击「创建规则」。
第四步:验证配置是否生效
你可以手动触发一次会触发历史记录超限的状态机执行,然后通过以下方式验证:
- 查看CloudWatch规则的「监控」标签,确认有触发次数统计
- 查看Lambda的监控面板,检查是否有对应的调用记录
- 在Lambda代码里打印
event参数,你会拿到包含执行ARN、错误详情、触发时间等完整上下文,方便后续做针对性处理
额外小提示
- 状态机ARN一定要准确填写,区域、账号ID、状态机名称都不能出错,否则规则无法匹配到事件
- Lambda里可以通过
event.detail.executionArn调用Step Functions的DescribeExecutionAPI,获取更完整的执行历史信息 - 如果需要批量处理或重试逻辑,也可以在Lambda里集成SQS等服务,避免Lambda执行超时
内容的提问来源于stack exchange,提问作者Neil
相关产品推荐
相关产品推荐

