AWS Lambda вызывает SNS

Я играю со своим Amazon Echo и написал небольшую функцию, которая, надеюсь, отправит мне сообщение после ответа моей дочери. Код выполняется нормально, но sns.publish никогда не происходит. Он молча терпит неудачу - я не могу вызвать ошибку. Я считаю, что у меня есть надлежащие разрешения IAM и подписки на темы. Кто-нибудь может помочь?

function textMom(kindOfDay){
    var message = "Test";
    var sns = new AWS.SNS();
    console.log("textMethod")

    sns.publish({
        TopicArn: "arn:aws:sns:us-east-1:",
        Message: message
    }, function(err, data) {
        if(err) {
            console.log('error publishing to SNS');
            context.fail(err);
        } else {
            console.log('message published to SNS');
            context.done(null, data);
        }
        console.log(data);
    });
}

person theTechGrandma    schedule 11.02.2016    source источник
comment
Что это распечатывает?   -  person Assaf Lavie    schedule 12.02.2016
comment
он будет регистрировать textMethod в CloudWatch, но ничего после этого. Это похоже на то, что функция sns.publish просто молча терпит неудачу.   -  person theTechGrandma    schedule 12.02.2016
comment
он не распечатывает message published to SNS?   -  person Assaf Lavie    schedule 13.02.2016
comment
Тогда это не очень тихо. Вы уверены, что вызов функции возвращается и что он не генерирует исключение?   -  person Assaf Lavie    schedule 13.02.2016
comment
Я не вижу исключения. Я использую CloudWatch — последнее, что я вижу, это возвращаемый RequestID. Как я увижу исключение?   -  person theTechGrandma    schedule 15.02.2016


Ответы (1)


Я столкнулся с той же проблемой и решил ее, изменив параметры публикации ниже:

sns.publish(params, context.done);

Это помогает мне проверить, завершена ли моя функция до завершения всех вызовов. Попытайся!

person Vavrin Chen    schedule 12.02.2016
comment
Я хочу... не получается. Вы действительно смогли заставить это работать? Получить aws lamdba для публикации в теме sns? - person theTechGrandma; 14.02.2016
comment
Да, я могу вызвать Lambda с помощью AWS IoT, а затем отправить SNS с помощью кода Lambda. Вы пытались удалить export.handler, просто запуская свой код с помощью nodejs index.js? Таким способом легче отлаживать. - person Vavrin Chen; 15.02.2016
comment
Я попробую. - person theTechGrandma; 15.02.2016
comment
Что ж, я запустил его через Node и решил несколько проблем с разрешениями (из-за Node). Я получаю текстовое сообщение немедленно. Запуск того же кода через Lambda - никаких сообщений. Просто для ясности — это конфигурация Alexa Skill. - person theTechGrandma; 16.02.2016
comment
ссылка на aws.amazon.com/blogs/compute/container-reuse -in-лямбда функция Lambda может завершиться одним из трех способов: тайм-аут, контролируемое завершение, завершение по умолчанию. Итак, если ваши обратные вызовы завершились правильно, возможно, вы можете попытаться увеличить время ожидания вашей лямбда-функции. (по умолчанию 3 секунды, я установил 30 секунд) - person Vavrin Chen; 17.02.2016
comment
Я отмечаю это как принятый ответ, потому что я обнаружил, что обратный вызов, который у меня был, завершал контекст до того, как сообщение было завершено. У меня сейчас действительно работает. Супер рад этому. Это сводило меня с ума! - person theTechGrandma; 23.02.2016
comment
Отличные новости! Поздравляем! - person Vavrin Chen; 24.02.2016