为什么使用 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 将被触发。
发布者不关心订阅者会做什么。
示例通常是后台任务触发器,如发送电子邮件、发送短信,或启动长时间的运行任务,如视频转码、图像处理、网络抓取等
我见过很多人使用 SNS 来触发他们的 lambda 函数,而不是使用 API 网关来完成。这样做有什么具体原因吗?
我个人认为允许 API 网关执行此操作比使用 SNS 灵活得多。关于为什么要这样做的任何详细说明?如果我使用 SNS 来触发该功能,我会得到任何性能或成本改进吗?
TLDR:选择归结为 请求-响应 与 发布-订阅型号。
请求-响应:
如果你需要知道 Lambda returns,你必须同步调用 Lambda 并等待结果。
这可以通过 API 网关(从客户端应用程序)或直接调用 Lambda 同步(从其他 Lambda)来完成。
示例是典型的 HTTP 请求、REST APIs 等
发布-订阅:
如果您不关心 return 值是什么,您可以调用 Lambda asynchronously 并继续 而无需 等待结果。
当某些内容发布到 SNS 主题时,订阅该主题的 Lambda 将被触发。
发布者不关心订阅者会做什么。
示例通常是后台任务触发器,如发送电子邮件、发送短信,或启动长时间的运行任务,如视频转码、图像处理、网络抓取等