【问题标题】:Should one AWS Lambda write to multiple targets?一个 AWS Lambda 是否应该写入多个目标?
【发布时间】:2020-02-10 22:33:00
【问题描述】:

我对 AWS 比较陌生,如果我要为以下场景正确设计 AWS Lambda,我很难理解:

  1. SQS 消息正在写入 AWS lambda 正在侦听并已触发的特定队列。
  2. AWS lambda on read sqs 消息将其进一步传递到多个目标,例如 SNS/DynamoDB/另一个 SQS 查询。

这个设计好吗?我应该将每个目标分成单独的 AWS lambda 还是应该成为其中的一部分?

AWS lambda 目标在其中的作用是什么?我应该为这些亚马逊服务中的每一个创建一个单独的目的地,还是 AWS 目标的目的不同? (比如处理成功/失败场景?)

不确定是否重要,但我打算使用 C# 语言编写此解决方案。

【问题讨论】:

  • lambda 函数几乎可以对从 SQS 队列中检索到的消息执行任何操作。它可以将消息进一步发布到 SNS,写入 DynamoDB 并将消息发布到 SQS,只需一次操作。您希望 lambda 函数用一条消息完成所有这三件事吗?
  • 这个初始 Lambda 的目的仅仅是将消息的副本分发到多个目标(无论它们是其他 Lambda、SQS、SNS 等)吗?还是它实际上对消息进行处理(而不是转发它)?如果它全部转发它,那么您应该将 SNS 视为消息的原始目标,而不是 SQS,并且 SNS 主题有多个订阅者(例如 Lambda、SQS)。
  • 仅分发,我首先考虑使用 SNS/Eventbridge,但据我所知,SNS 本身不支持转发到 DynamoDB 并且 EventBridge 很难完成工作(不确定是否有可能的?)。如果我必须使用 Lambda 进一步传递此消息,那么在初始目标上使用 SNS 和 SQS 是否有好处?
  • 据我所知,没有任何东西支持自动转发到 DynamoDB。为什么会呢?您需要一个应用程序将数据写入 DynamoDB 表。

标签: c# amazon-web-services aws-lambda


【解决方案1】:

我建议您使用一个 lambda 函数,该函数会根据您将收到的任何 SQS 消息触发。然后您可以处理消息,并将内容用于您提到的用例。基本上,一旦调用触发器,您就会从 lambda 函数收到 SQS 事件。您要做的就是捕获该事件和过程:

SNS/DynamoDB/另一个 SQS 查询

但请确保有一种机制,在处理完 SQS 消息后将其删除,这样您就不会继续重复阅读或轮询旧的 SQS 消息。您可以阅读 DLQ (Dead-Letter-Queue),这可能很有用。供您参考,也请查看this,这样您就可以开始了。

【讨论】:

  • 我应该如何将信息传递给 lambda 应该写入的目标?手动,在具有所有配置传递逻辑等的代码中?还是有其他方法,例如通过 AWS lambda 目标?
  • 你的意思是,你想根据你得到的信息做一些动作?并且该信息来自 SQS,对吗?
  • 我的意思是我应该在 AWS 控制台的某个地方指定这些目标将成为这个 lambda 的消费者,还是应该手动编写所有内容,就像它是一个普通的 .net 服务一样。跨度>
  • 使用 lambda 触发器时,您不必担心从 SQS 中删除消息。 Using AWS Lambda with Amazon SQS.
  • @phoenix 我的理解是,您将处理来自您的 lambda 的 sqs 消息并将该内容用于您的其他目标(SNS/DynamoDB/另一个 SQS 查询)。这些 aws 服务应该有 API,就像 python (boto3) 一样。因此,您可以使用这些 api 适当地调用一些方法来实现操作。
猜你喜欢
  • 2018-07-26
  • 2013-07-06
  • 2023-01-03
  • 1970-01-01
  • 2017-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-27
相关资源
最近更新 更多