【问题标题】:Why use SNS to trigger a lambda function, and not API gateway?为什么使用 SNS 触发 lambda 函数,而不是 API 网关?
【发布时间】:2019-05-12 10:11:40
【问题描述】:

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

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

【问题讨论】:

  • 可能是您对所涉及的应用有误解。您可以触发 Lambda 函数以响应来自 SNS、SQS、DynamoDB、Kinesis、S3 和其他来源的事件。您可以通过 API Gateway、Application Load Balancer、CloudFront(仅限 Lambda@Edge、Node.JS 函数)或直接使用 Lambda 服务 API 调用 Lambda 函数。在大多数情况下,最(或唯一)合适的机制是显而易见的。检查docs.aws.amazon.com/lambda/latest/dg/…,看看你是否可以扩展/澄清这个问题的性质。

标签: amazon-web-services aws-lambda aws-api-gateway amazon-sns


【解决方案1】:

TLDR:选择归结为 request-responsepublish-subscribe 模型。

请求-响应

  • 如果您需要知道 Lambda 返回的内容,您必须同步调用 Lambda 并等待结果。

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

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

发布-订阅

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-21
    • 1970-01-01
    • 2020-05-09
    • 1970-01-01
    • 2017-12-01
    • 2021-07-13
    • 2019-07-09
    • 2018-03-05
    相关资源
    最近更新 更多