Как вызвать лямбду с некоторой задержкой при публикации сообщения в SQS? - PullRequest
2 голосов
/ 03 апреля 2019

У меня есть лямбда, настроенная для запуска при публикации сообщений в очереди SQS.Вот шаблон SAM для развертывания.

  MyQueue:
    Type: AWS::SQS::Queue
    Properties:
        VisibilityTimeout: 180
        DelaySeconds: 90

  MyLambda:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: ../pathToCode
      Handler: index.handler
      Events:
        MySQSEvent:
          Type: SQS
          Properties:
              Queue: !GetAtt MyQueue.Arn

Я использую DelaySeconds свойство AWS::SQS::QUEUE, которое, очевидно, не работает.Моя лямбда будет выполнена, как только сообщение будет опубликовано в очереди.Как я могу положить задержку в этом?

Ответы [ 2 ]

4 голосов
/ 03 апреля 2019

Лучшее решение - использовать пошаговые функции AWS.

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

1 голос
/ 03 апреля 2019

Delay Seconds: задерживает вызов приема сообщения при каждом опросе очереди.Но всякий раз, когда вы помещаете это сообщение в очередь, оно вставляется немедленно.

Если вы хотите, чтобы ваша лямбда выполнялась после определенного интервала после включения триггера, поместите режим сна (n) перед началом выполнения и увеличьте время ожидания лямбда, если это необходимо.На данный момент нет прямого способа отложить запуск, ваша лямбда будет запущена, как только сообщение окажется в очереди.

...