Не могу получить доступ к данным в S3 с помощью лямбды - PullRequest
0 голосов
/ 04 марта 2019

Я использую Javascript в течение нескольких месяцев, и мой код хорошо работает на локальном компьютере, но у меня всегда одна и та же проблема с лямбда-функцией.

Я не могу получить доступ к любым данным с помощью s3.getObject.

Это простой пример кода, который не запускается в Lambda:

var AWS = require('aws-sdk');
var s3 = new AWS.S3();

exports.myHandler = function(event, context, callback) {
    // Retrieve the object
    s3.getObject({
        Bucket: 'XXXXXX',
        Key: 'YYYYY'
    }, function(err, data) {
        if (err) {
            console.log(err);
        } else {
            console.log("data");
        }
    });
};

1 Ответ

0 голосов
/ 04 марта 2019

Это потому, что ваша функция завершается до выполнения обратного вызова, поскольку ваш s3.getObject() вызов является асинхронным изнутри.

Чтобы получить данные из AWS Lambda, вам придется вернутьсяваше значение примерно так:

var AWS = require('aws-sdk');
var s3 = new AWS.S3();

exports.myHandler = function(event, context, callback) {
    // Retrieve the object
    s3.getObject({
        Bucket: 'XXXXXX',
        Key: 'YYYYY'
    }, function(err, data) {
        if (err) {
            console.log(err);
            callback(err)
        } else {
            callback(null, {statusCode: 200, body: JSON.stringify(data) })
        }
    });
};

Я предлагаю вам использовать Node 8, так что вы можете легко использовать async / await .

Ваш код будет выглядеть так:

var AWS = require('aws-sdk');
var s3 = new AWS.S3();

exports.myHandler = async (event) => {
  const data = await s3.getObject({
    Bucket: 'XXXXXX',
    Key: 'YYYYY'
  }).promise();

  return {
    statusCode: 200,
    body: JSON.stringify(data)
  }
};

Другая проблема в вашем коде заключается в том, что вы всегда печатаете "data" вместо data, поэтому вместо самих данных печатается строка.

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