为什么SQS不是lambda的事件源?

时间:2017-07-26 04:16:30

标签: amazon-web-services aws-lambda

AWS Lambda函数有一堆event sources但SQS不是一个。

为什么?我原本以为这是一个不错的选择。

4 个答案:

答案 0 :(得分:3)

答案 1 :(得分:2)

在某种程度上;是的,我同意你的观点。

但是如果你真的想到SQS和SNS之间的区别(就像John正确指出的那样),SQS应该让事情变得异步......它就像一个可以在需要时消耗的队列。每当假设代理可用时,队列将被消耗。 SQS旨在维护不同活动之间可能存在大量延迟的工作流程。对于接近实时的操作,SNS / Kinesis是更好的解决方案。

如果你想要调用Lambda;我认为更好的架构是向SNS发送消息并让Lambda被调用。

答案 2 :(得分:0)

Amazon SQS是一种排队服务,旨在用作保留消息的缓冲区,直到它们被应用程序使用。 SQS通常用于消费应用程序之前发生积压的地方。

但是,AWS Lambda是一种可以并行运行功能的高度并行服务。 Lambda函数由事件触发,例如将文件上传到Amazon S3或通过Amazon Kinesis接收数据。

我没有明确的答案为什么 Lambda不能被SQS触发,但我猜是因为不需要来执行此操作。而不是向Amazon SQS发送消息,原始应用程序应该直接调用AWS Lambda函数。这是一个更简单的过程,移动部件更少。

有一个default limit of 1000 concurrent Lambda functions。如果这还不够,Lambda会对请求进行排队,您也可以请求限制增加。

答案 3 :(得分:0)

这是一篇很好的博客文章,向您展示如何在代码中将SQS设置为Lambda的事件源。 Terraform中的示例:

# Event source from SQS
resource "aws_lambda_event_source_mapping" "event_source_mapping" {
  event_source_arn = "${var.terraform_queue_arn}"
  enabled          = true
  function_name    = "${aws_lambda_function.test_lambda.arn}"
  batch_size       = 1
}

https://medium.com/appetite-for-cloud-formation/setup-lambda-to-event-source-from-sqs-in-terraform-6187c5ac2df1