AWS Lambda函数有一堆event sources但SQS不是一个。
为什么?我原本以为这是一个不错的选择。
答案 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
}