Лямбда-функция не отправляет сообщение в SQS - PullRequest
0 голосов
/ 29 января 2020

Мне нужна функциональность «перепроверить позже», которая в традиционных веб-приложениях может быть достигнута, например, с помощью очередей на основе Redis, причем каждая очередь имеет временную метку (в мире PHP это имеет Laravel функциональность из коробки).

Мое решение для этого в Lambda состояло в том, чтобы отправить сообщение в ту же очередь, в которую подается функция, но на этот раз с некоторой задержкой. И так будет продолжаться до тех пор, пока мы не узнаем, что пришло время снова проверить объект (API, статус, что угодно).

Вот моя функция полностью:

exports.handler = async (event) => {
    const AWS = require('aws-sdk');
    AWS.config.update({region: 'us-east-2' });
    let sqs = new AWS.SQS({apiVersion: '2012-11-05'});

    let messageBody = event.Records[0].body;
    let details = JSON.parse(messageBody);

    console.log("Received event. Count is: " + details.counter);

    details.counter += 1;
    messageBody = JSON.stringify(details);

    await sqs.sendMessage({
        DelaySeconds: 10,
        MessageBody: messageBody,
        QueueUrl: 'https://sqs.us-east-2.amazonaws.com/123456/TestRequeueFeature'
    });
};

В тесте выше , это очередь с именем TestRequeueFeature, которая вызывает функцию. Под конец я отправляю сообщение с задержкой в ​​десять секунд. Тем не менее, это сообщение никогда не появлялось (я имею в виду, что функция не была вызвана снова, хотя прошло несколько минут). В CloudWatch есть только один журнал для этой функции, который был, когда я запускал ее с помощью тестового события. Помимо этого, сообщение, кажется, исчезло.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...