Как ограничить количество срабатываний лямбда-функции AWS в течение определенного периода времени c - PullRequest
0 голосов
/ 19 марта 2020

Я работаю над созданием автоматизированного процесса, отправляющего PUT в API отдыха, когда объект обнаруживается DeepLens.

DeepLens → IoT → SNS → Lambda → API внешнего отдыха

DeepLens выполняет обнаружение объекта. Я использую правила IoT, которые отправляют сообщение в SNS topi c при обнаружении указанных c объектов. SNS topi c отправляет SMS, электронное письмо и запускает функцию Lambda. Функция Lambda выполняет PUT против внешнего API отдыха.

Я пытаюсь ограничить число раз, когда лямбда-функция может выполнять PUT один раз в 60 секунд. Пример лямбда-кода ниже, если

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"))

1 Ответ

2 голосов
/ 19 марта 2020

В этом случае я бы заставил бы SNS topi c отправить сообщение в очередь SQS , а не напрямую в Lambda. Затем вместо использования интеграции SQS-Lambda, которая не может быть ограничена одним вызовом Lambda в минуту, я настроил бы функцию Lambda так, чтобы она вызывалась ровно раз в минуту событиями CloudWatch .

Наконец, каждый раз, когда вызывается лямбда-функция, я должен проверять наличие доступного сообщения в очереди SQS, извлекать не более одного сообщения из очереди, обрабатывать это сообщение, удалять сообщение из очереди и завершать работу.

...