Amazon Lambda 支持以简单队列服务作为事件源了

阅读数:617 2018 年 7 月 17 日

话题:AWSDevOps语言 & 开发架构

Amazon发布更新其简单队列服务(SQS)——开发人员现在可以使用 SQS 触发AWS Lambda函数了。而且,开发人员不再需要运行轮询服务或创建SQS 到 SNS 的映射

Amazon SQS 是一个消息队列服务,它在 AWS 中已经存在 10 多年了。它是由 Amazon 完全托管的,可以解耦服务,通过网络访问,自动扩展,预付费。此外,SQS 提供两种类型的队列:

  • 标准队列,提供最大吞吐量、最优排序、至少一次传输;
  • SQS FIFO 队列,按照设计,它可以保证消息仅处理一次,而且是完全按照发送顺序。

AWS Lambda 是四年多前推出的一项计算服务,让开发人员不用配置或管理服务器就可以运行代码。多年来,随着 Amazon 加入更多特性,该服务一直在演化,现在已经支持 SQS 了,也就是说,开发人员现在可以使用队列服务作为 Lambda 的直接事件源来触发事件。目前,Lambda 触发器仅支持标准队列。

在 Lambda 函数中使用 SQS 触发器的典型设置是把它添加到一个函数中,配置函数的执行角色,并指定恰当的权限用于和 SQS 标准队列通信。然后,指定将触发函数的队列名称以及该函数一次可以接收多少消息。



图片来源:https://aws.amazon.com/blogs/aws/aws-lambda-adds-amazon-simple-queue-service-to-supported-event-sources/

当批次大小设置为 1 时,只能同时触发 10 个 Lambda 执行。不过,当批次大小设置的更大时,只能触发一个 Lambda 执行,并基于这个大小发送一些消息。此外,ACI 信息集团技术副总裁Chris Moyes在 TechTarget 的一篇文章中写道:

另外,开发人员可以使用这个批次大小,结合 Lambda 的 Reserved Concurrency 设置,设定一次可以处理的消息数量,这有助于控制使用情况,或者防止消息大量涌入其他系统,如把内容传递给 FTP 服务器。

一旦函数消费了现有的消息,AWS Lambda 就会从 SQS 标准队列中删除消息。不过,当函数执行失败或者超时的时候,消息会在队列设置的可见性超时时间过后再次出现在队列中。开发人员可以设置可见性超时、重试次数、重试间隔默认值。

在消费消息时,Lambda 可以横向扩展,并且是自动实现。据公告博文介绍:

按照设计,当队列为空时,Lambda 的自动扩展行为可以保持较低的轮询成本,与此同时,当队列使用频繁时,它又让我们可以向上扩展,实现高吞吐量。

注册在 SQS 中的 Lambda 触发器可以在 SQS 控制台中管理——用户可以在那里配置和编辑触发器。最后,该特性现在已经可以在提供 Lambda 服务的所有区域使用,文档已经更新,除了 Lambda 服务不断对 SQS 队列长轮询的费用外,还有其他的费用——Amazon 将根据标准SQS 定价费率收取该账户的 API 调用费用。

查看英文原文:Amazon Announces Lambda Now Supports Simple Queue Service as Event Source