AWS Лямбда POST-запрос от события ObjectCreated S3 bucket (Node.js) - PullRequest
0 голосов
/ 30 января 2020

Я новичок в Lambda и ведре S3, так что терпите меня.

Я настроил AWS SES, который отправляет электронные письма в ведро S3, которое прекрасно работает. То, что я пытаюсь сделать сейчас, - это когда событие ObjectCreated запускается, когда контейнер S3 получает новый объект, и я запускаю функцию Lambda (node.js) для POST на URL-адресе на моем сервере, который получает имя файла, которое затем позволит мне загрузить этот конкретный объект и обработать электронную почту.

Вот разбивка

  • Пользователь отправляет электронную почту
  • Электронная почта создается как объект в контейнере S3
  • Лямбда-функция (node.js) запускается из события ObjectCreated
  • Лямбда отправляет POST скрипту на моем сервере, отправляя мне имя файла
  • Мой скрипт загружает объект из корзины S3
  • Все готово!

Проблема в том, что POST никогда не происходит. Любая помощь, чтобы направлять меня?

Чего я пытаюсь избежать, так это создания задания cron, которое каждую минуту проверяет мое ведро, чтобы увидеть, есть ли новые электронные письма (объекты), и обрабатывать их таким образом. То, что я хочу делать каждый раз, когда новый объект входит в корзину, я могу запустить сценарий и отправить имя объекта, чтобы я мог просто взять этот конкретный объект и обработать его немедленно.

SES правило

enter image description here

Лямбда

exports.handler = (event, context, callback) => {

    var https = require('https');
    var data = JSON.stringify({
        'fileName': event.Records[0].s3.object.key,
    });

    var options = {
        host: 'example.com',
        port: '80',
        path: '/path/script/this_script.php',
        method: 'POST',
        headers: {
            'Content-Type': 'application/json; charset=utf-8',
            'Content-Length': data.length
        }
    };

    var req = https.request(options, function(res) {
        var msg = '';

        res.setEncoding('utf8');
        res.on('data', function(chunk) {
            msg += chunk;
        });
        res.on('end', function() {
            console.log(JSON.parse(msg));
            context.succeed();
        });
    });

    req.write(data);
    req.end();
};

Также независимо от того, что я делаю при тестировании Лямбда я всегда получаю эту ошибку

{
  "errorType": "TypeError",
  "errorMessage": "Cannot read property '0' of undefined",
  "trace": [
    "TypeError: Cannot read property '0' of undefined",
    "    at Runtime.exports.handler (/var/task/index.js:5:34)",
    "    at Runtime.handleOnce (/var/runtime/Runtime.js:66:25)"
  ]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...