如何通过SNS实现AWS Step Functions状态机执行结果通知
AWS Step Functions 状态机执行结果SNS通知配置方案
一、结论:不需要额外Lambda函数就能实现
两种关联方式都无需编写Lambda代码,直接通过Step Functions内置能力或EventBridge完成对接。
二、方案1:在状态机流程中直接调用SNS主题
适合需要在执行流程的特定节点(比如最终成功/失败分支)发送定制化通知的场景,步骤如下:
- 给Step Functions的执行角色添加SNS发布权限,权限示例:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sns:Publish", "Resource": "你的SNS主题ARN" } ] }
- 在状态机的JSON定义中,添加SNS任务节点。比如分别配置成功、失败分支的通知:
成功分支任务示例:
"SuccessNotify": { "Type": "Task", "Resource": "arn:aws:states:::sns:publish", "Parameters": { "TopicArn": "你的SNS主题ARN", "Message": { "ExecutionARN.$": "$$.Execution.Id", "Status": "SUCCEEDED", "ExecutionOutput.$": "$" } }, "End": true }
失败分支任务示例:
"FailureNotify": { "Type": "Task", "Resource": "arn:aws:states:::sns:publish", "Parameters": { "TopicArn": "你的SNS主题ARN", "Message": { "ExecutionARN.$": "$$.Execution.Id", "Status": "FAILED", "ErrorInfo.$": "$.Error", "Cause.$": "$.Cause" } }, "End": true }
- 通过
Choice状态判断执行结果,将流程导向对应的通知节点即可。
三、方案2:用EventBridge监听状态机执行状态触发SNS
适合无需修改状态机、只想监听所有执行成功/失败事件的场景,步骤如下:
- 打开EventBridge控制台,创建规则:
- 规则类型选择事件模式
- 事件源选AWS服务,服务名称选Step Functions,事件类型选Step Functions Execution Status Change
- 事件模式指定状态机ARN和目标状态,示例:
{ "source": ["aws.states"], "detail-type": ["Step Functions Execution Status Change"], "detail": { "stateMachineArn": ["你的状态机ARN"], "status": ["SUCCEEDED", "FAILED"] } }
- 目标选择SNS主题,选中你已创建的主题
- 确认配置后保存规则,EventBridge会自动将符合条件的状态机执行事件推送到SNS主题。
四、两种方案对比
- 方案1:灵活性高,可自定义通知时机和内容,但需要修改状态机定义
- 方案2:无需改动状态机,适合批量监听所有执行事件,通知内容为EventBridge标准格式,也可通过输入转换器调整内容结构
内容的提问来源于stack exchange,提问作者christo Jiyo
相关产品推荐
相关产品推荐

