我有时会做一个简单的个人项目来学习 AWS。
最近,我收到了一封来自 AWS 的提醒电子邮件,指出我已达到一项或多项服务的免费套餐配额,如下表所示:
产品 | 截至 2024 年 6 月 27 日的 AWS 免费套餐使用情况 | 使用限制 | AWS 免费套餐使用限制 |
---|---|---|---|
AWS队列服务 | 863587 请求 | 1000000 个请求 | 作为 AWS 免费使用套餐(全局请求)的一部分,每月 1000000.0 个请求始终免费 |
该项目主要是使用 CDK 开发的无服务器架构,它还没有也永远不会达到生产阶段,没有人会看到或使用它,我几乎没有在一些测试调用中使用它。
该项目有 4 个 SQS 队列,每个队列都会触发一个 Lambda 函数,因此检查每个队列的监控部分,我看到除了 Number of Empty Receives 之外,所有图表都是 0:
我仍在学习 AWS 服务集成,所以我想到的是 Lambda 不断轮询 SQS,从而发出请求,而我认为 SQS 在新消息准备好时调用 Lambda,这是正确的吗?
如果是这样,如何减少从Lambda到SQS的调用?我对性能不感兴趣,我只想不超过每月的免费套餐配额。
所以我想到的是 Lambda 不断轮询 SQS,从而发出请求,而我认为当新消息准备好时 SQS 调用 Lambda,这是正确的吗?
SQS不是“推”服务,而是“拉”服务。 SQS 从不调用其他服务。 SQS 只是将消息保存在队列中,其他事物必须轮询队列来检索这些消息。 SQS 与 AWS Lambda 的集成也不例外。 AWS Lambda 在幕后为您轮询您的 SQS 队列,并在收到消息时调用您的函数。
如何减少从 Lambda 到 SQS 的调用?
您确定当前的民意调查率会超过免费套餐限制吗?您是否查看过当前账单中的 SQS 使用情况,了解您当前在给定计费周期内使用了多少使用量?如果您确实想减少轮询请求的数量,您可能必须禁用 SQS 与 Lambda 的集成,并让 Lambda 按重复计划调用您的函数,例如每分钟一次、每 5 分钟一次或其他什么,并且让您的函数自行执行 SQS 接收消息 API 调用。