【问题标题】:Getting exponential backoff in AWS SNS with AWS Lambda使用 AWS Lambda 在 AWS SNS 中获得指数回退
【发布时间】:2017-09-20 16:43:14
【问题描述】:
就目前而言,AWS SNS 通过 HTTP/HTTPS 端点提供重试(线性、几何和指数退避)功能,以防端点返回 5XX 响应。
因此,我的应用程序架构发生了变化,我强烈需要在我的 SNS 和 Lambda 之间插入一个 API 网关,以便在发生故障时我可以从 API 网关返回 5XX 状态并利用 SNS 的重试功能。
但是没有提到 AWS lambda 的重试机制。有什么方法可以将 SNS 重试工具用于非基于 HTTP 的订阅?
谢谢
【问题讨论】:
标签:
amazon-web-services
aws-lambda
amazon-sns
serverless-framework
【解决方案1】:
经过几个小时的调试和浏览 AWS 文档后,似乎目前除了 HTTP/HTTPS 源之外,没有办法从 AWS SNS 获得指数级回报。
您可以查看this。
如文档中所引用:
当用户针对您的 Lambda 的主题调用 SNS 发布 API 时
函数被订阅,Amazon SNS 将调用 Lambda 来调用您的
异步运行。然后 Lambda 将返回一个交付状态。如果
调用 Lambda 时出错,Amazon SNS 将重试调用
Lambda 函数最多 3 次。尝试 3 次后,如果 Amazon SNS
仍然无法成功调用 Lambda 函数,然后亚马逊
SNS 将向 CloudWatch 发送传递状态失败消息。
由于 Lambda 存在异步调用,因此 SNS 不会关心 lambda 的退出状态是什么。因此,从 SNS 的角度来看,成功调用 lambda 就足够成功,并且不会提供失败事件,因此无需自定义回退。
目前看来,添加 HTTP 端点是唯一的选择。