amazon-web-services - 如何限制在特定时间范围内可以触发 AWS Lambda 函数的次数
问题描述
当 DeepLens 检测到对象时,我正在构建一个自动化流程,将 PUT 发送到休息 API。
DeepLens → IoT → SNS → Lambda → External Rest API
DeepLens 正在执行对象检测。当检测到特定对象时,我正在运行向 SNS 主题发送消息的 IoT 规则。SNS 主题发送短信、电子邮件并触发 Lambda 函数。Lambda 函数针对外部休息 API 执行 PUT。
我试图将 lambda 函数执行 PUT 的次数限制为每 60 秒一次。下面的示例 Lambda 代码 if
import http.client
import mimetypes
def lambda_handler(event, context):
conn = http.client.HTTPSConnection("api.who.what")
payload = " {\"id\" : \"SANITIZED\", \"duration\" : 60}"
headers = {
'Authorization': 'Bearer SANITIZED',
'Content-Type': 'text/plain'
}
conn.request("PUT", "/1/get/going/start", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
解决方案
在这种情况下,我会让SNS 主题将消息发送到 SQS 队列,而不是直接发送到 Lambda。然后,我不会使用不能限制为每分钟一次 Lambda 调用的 SQS-Lambda 集成,而是将 Lambda 函数配置为每分钟由 CloudWatch Events 调用一次。
最后,每次调用 Lambda 函数时,我都会让它检查 SQS 队列上的可用消息,并从队列中检索最多一条消息,处理该消息,从队列中删除该消息,然后退出。
推荐阅读
- mongoose - 无法仅从 NestJS 中的 TestingModule 连接到 MongoDB
- linux - 打印到 gedit whit xdotool
- root - 如何使用 Nix 包管理器禁用“私有挂载命名空间”(沙盒)?
- azure - Terraform - Azure IPgroups 标签无故更新
- java - 算法的实验分析 - 如何证明图形是 O(nlogn)?
- json - 无法读取 React + Phoenix 框架中未定义的属性“地图”
- javascript - 如何检查字符串是否仅包含js中的某些字符?
- symfony - 反序列化前的 API 平台验证
- python - 如果在使用 Dash 绘制条形图时单月数据可用,则月份名称在 X 轴上显示不正确
- string - Windows 上的 CMD 从文本行回显变量值