首页 > 解决方案 > 如何限制在特定时间范围内可以触发 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"))

标签: amazon-web-servicesaws-lambdaiot

解决方案


在这种情况下,我会让SNS 主题将消息发送到 SQS 队列,而不是直接发送到 Lambda。然后,我不会使用不能限制为每分钟一次 Lambda 调用的 SQS-Lambda 集成,而是将 Lambda 函数配置为每分钟由 CloudWatch Events 调用一次

最后,每次调用 Lambda 函数时,我都会让它检查 SQS 队列上的可用消息,并从队列中检索最多一条消息,处理该消息,从队列中删除该消息,然后退出。


推荐阅读