为什么使用 SNS 来触发 lambda 函数,而不是 API 网关?

Why use SNS to trigger a lambda function, and not API gateway?

我见过很多人使用 SNS 来触发他们的 lambda 函数,而不是使用 API 网关来完成。这样做有什么具体原因吗?

我个人认为允许 API 网关执行此操作比使用 SNS 灵活得多。关于为什么要这样做的任何详细说明?如果我使用 SNS 来触发该功能,我会得到任何性能或成本改进吗?

TLDR:选择归结为 请求-响应发布-订阅型号。

请求-响应

  • 如果你需要知道 Lambda returns,你必须同步调用 Lambda 并等待结果。

  • 这可以通过 API 网关(从客户端应用程序)或直接调用 Lambda 同步(从其他 Lambda)来完成。

  • 示例是典型的 HTTP 请求、REST APIs 等

发布-订阅:

  • 如果您不关心 return 值是什么,您可以调用 Lambda asynchronously 并继续 而无需 等待结果。

  • 当某些内容发布到 SNS 主题时,订阅该主题的 Lambda 将被触发。

  • 发布者不关心订阅者会做什么。

  • 示例通常是后台任务触发器,如发送电子邮件、发送短信,或启动长时间的运行任务,如视频转码、图像处理、网络抓取等