Локальный запуск Lambda не будет регистрировать все выходные данные

У меня следующая лямбда.

      const AWS = require('aws-sdk');
exports.lambdaHandler = async (event, context) => {
    console.log("START v5");
    const SNSarn = process.env.SNS;
    console.log(SNSarn);
    const snsParams={
        Message: "test",
        TopicArn: SNSarn
    };
    const SNS = new AWS.SNS();
    SNS.publish(snsParams, function(err,data){
        console.log ("We are in the callback!");
        if (err) {
            console.log('Error sending a message', err);
            context.done(err,'We have errors');
        }

        console.log('Sent message');
        context.done(null,"Done!");
    });
    console.log('END');
};

Когда я запускаю его локально, лямбда работает так, как ожидалось, и отправляет сообщение в SNS.
По какой-то причине я не вижу console.log в обратном вызове.
Как мне исправить это, чтобы я также мог видеть журналы обратных вызовов?

Вот результат, который я вижу:

      START RequestId: ff2691cc-a7d0-40f2-a956-277bxxxx21d Version: $LATEST
2021-11-15T21:17:17.968Z    ff2691cc-a7d0-40f2-a956-277bxxxx821d    INFO    START v5
2021-11-15T21:17:17.970Z    ff2691cc-a7d0-40f2-a956-277bxxxx821d    INFO    arn:aws:sns:us-east-1:xxxxxxxxxxxxxxx:tooktook-topic
2021-11-15T21:17:17.992Z    ff2691cc-a7d0-40f2-a956-277bxxxx821d    INFO    END
END RequestId: ff2691cc-a7d0-40f2-a956-277bxxxx821d
REPORT RequestId: ff2691cc-a7d0-40f2-a956-277bxxxx821d  Init Duration: 0.19 ms  Duration: 261.33 ms Billed Duration: 300 ms Memory Size: 128 MB Max Memory Used: 128 MB 

1 ответ

В методеSNS.publish, вы используете обратный вызов, который является асинхронным по своей природе, и существует возможность успешного выполнения лямбда-выражения еще до того, как будет вызван обратный вызов. SNS требует немного времени для выполнения. вам нужно использовать async/await в этом случае. API-интерфейсы AWS поддерживают обещания.

Вот пример:

      const AWS = require('aws-sdk');
exports.lambdaHandler = async (event, context) => {
    console.log("START v5");
    const SNSarn = process.env.SNS;
    console.log(SNSarn);
    const snsParams={
        Message: "test",
        TopicArn: SNSarn
    };
    const SNS = new AWS.SNS();
   try {
     const data = await SNS.publish(snsParams).toPromise();
      console.log('Sent Message');
      context.done(null, 'Done');
    } catch (error) {
       console.log('We are in the callback!');
       context.done(err, 'We have errors');
    }
    console.log('END');
};
Другие вопросы по тегам