不使用AWS Step Functions时如何检测AWS Lambda函数是否运行失败
不使用Step Functions的Lambda运行时错误检测方案
以下方案均可以满足你使用自研编排工具(如Airflow)调度时,仅判断Lambda运行阶段内部错误、排除构建部署环节问题的需求:
同步调用直接解析返回结果
调用Lambda时指定InvocationType=RequestResponse同步调用模式,函数执行完成后会直接返回执行状态信息:- 运行成功的返回会包含
StatusCode: 200,且响应中不存在FunctionError字段 - 运行时出现未处理内部错误的返回会携带
FunctionError: Unhandled字段,同时包含异常堆栈信息
你可以直接在Airflow的调度任务中判断上述两个字段即可完成校验,实现成本最低。
- 运行成功的返回会包含
异步调用结合CloudWatch指标检测
若业务场景必须使用异步调用Lambda的模式,可以使用该方案:- 直接调用AWS官方自带的Lambda
Errors指标,该指标仅统计Lambda运行阶段产生的未处理错误,构建、部署阶段的问题不会触发该指标计数,天然符合你的筛选需求 - 在Airflow触发Lambda异步调用后,新增一个检测任务,定期调用CloudWatch的
get_metric_statistics接口,查询对应Lambda在调用时间窗口内的Errors指标数值,数值为0即可判定运行成功,继续后续流程。
- 直接调用AWS官方自带的Lambda
Lambda自定义回调机制
改造Lambda函数代码逻辑:- 函数内部捕获所有运行异常,执行全程无异常则向Airflow回调接口发送成功信号,出现内部错误则发送失败信号
- 搭配Airflow的Sensor组件等待回调结果,超出设定超时时间未收到成功信号即可判定为执行失败。
如果需要更精细化的错误类型区分,可以在Lambda的返回结构体中自定义runtime_error_flag类标识字段,调度端直接读取该字段判断即可,灵活度更高。
内容的提问来源于stack exchange,提问作者Asher11
相关产品推荐
相关产品推荐

