AWS Lambda не удалось отправить SNS - PullRequest
0 голосов
/ 22 мая 2018

У меня есть одна лямбда-функция, которая вставляет пользователей, а также отправляет sns-вставку, и при вставке проверка пользователя работает хорошо.Как и при вставке пользователя, я должен проверить, существует ли пользователь или нет.

    'use strict';
    var AWS = require("aws-sdk");
    var mysql = require("mysql");
    exports.handler = function (event, ignore, callback) {
        var rds;

        var input = {};
        var ret;
        // rds.query();
        if (event.type === undefined || event.username === undefined || event.username === null || event.type === null || event.username === "") {
            console.log(`Missing username or type`);
            ret = {
                "level": "error",
                "message": `Missing username or type`
            };
            callback(JSON.stringify(ret));
        }

        input.stage = event.stage;
        input.test = {};
        input.test.error = `User ${event.username} already exists;`;
        input.test.query = `select * FROM users WHERE user_id = "${event.username}";`;
        input.test.validate = function (rows) {
            if (null === rows || 0 === rows.length) {
                return true;
            }
            // rds.execute(input.test, callback)
            console.log(`User ${event.username} already exists;`);
            return false;
        };

        input.query = `INSERT INTO users(user_id, Type, Reason) VALUES ("${event.username}", "${event.type}", "${event.reason}");`;
        input.action = function (res) {
            console.log(`User ${event.username} added`);
            ret = {
                "level": "info",
                "message": `User ${event.username} added`
            };



            return JSON.stringify(ret);
        };

        //now insert the user by


    var conn = mysql.createConnection(config);

    conn.connect(function (err) {
        if (null !== err) {
            var message = {
                "level": "error",
                "message": err
            };
            console.log(message);
            callback(JSON.stringify(message));
        }
    });

    conn.query(input.query, callback);

      var sns = new AWS.SNS({accessKeyId: "aa", secretAccessKey: "aaa",region: 'us-east-1'});
      sns.publish({Message: "heelo user", TopicArn: "aa"}, function(err, data){
        if(err){console.log(err);}
         console.log(data);
});

    };

Он вставляет данные, но не может отправить SNS.sns publish не отправляет никаких сообщений. Также он работает для проверяющего пользователя, но не может отправить sns.

Получена ошибка

Response:
{
  "errorMessage": "2018-05-22T06:52:12.024Z 95066993-5d8c-11e8-9803-71c47d22473f Task timed out after 30.03 seconds"
}

Request ID:
"95066993-5d8c-11e8-9803-71c47d22473f"

Function Logs:
START RequestId: 95066993-5d8c-11e8-9803-71c47d22473f Version: $LATEST
END RequestId: 95066993-5d8c-11e8-9803-71c47d22473f
REPORT RequestId: 95066993-5d8c-11e8-9803-71c47d22473f  Duration: 30030.18 ms   Billed Duration: 30000 ms   Memory Size: 128 MB Max Memory Used: 36 MB  
2018-05-22T06:52:12.024Z 95066993-5d8c-11e8-9803-71c47d22473f Task timed out after 30.03 seconds

1 Ответ

0 голосов
/ 22 мая 2018

Я предполагаю, что ваша функция Lambda сконфигурирована в VPC для обеспечения доступа к вашей базе данных MySQL.Не могли бы вы проверить, предоставляется ли вашей функции Lambda доступ к Интернету, как описано в здесь ?

Поскольку служба SNS предоставляется в качестве публичной конечной точки, для правильной публикации уведомлений потребуется доступ в Интернет.SNS.

Чтобы предоставить доступ в Интернет, вам необходимо настроить шлюз NAT в общедоступной подсети и связать его в качестве маршрута по умолчанию для частных подсетей, связанных с функцией Lambda.

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