AWS S3 не работает, но раньше работал без изменения кода - PullRequest
0 голосов
/ 25 сентября 2018

Вчера у меня работал проект, тянущий вчера изображение профиля для каждого пользователя из S3, но сегодня, когда я пошел, чтобы загрузить страницу с изображением профиля, он отобразил страницу без изображения.Я проверил логи, и похоже, что они жалуются на то, что мои учетные данные AWS не работают.Я пытался убедиться, что они были правы, они были, я пытался обновить их до вновь сгенерированных, и это тоже не удалось.

Вот код, который взаимодействует с AWS, получая изображение профиля.Когда я запускаю узел, он не жалуется на то, что файл конфигурации не загружается.Я попытался вывести значения файла конфигурации на консоль (я использовал поддельные значения для секрета и ключа доступа), и это сработало, поэтому я знаю, что оно вытягивает правильные значения.

Мой код

// Packages
var aws = require("aws-sdk");

var s3 = new aws.S3();

// Config
var config = require('../config/config');

aws.config.update({
    secretAccessKey: config.aws_s3.secretAccessKey,
    accessKeyId: config.aws_s3.accessKeyId,
    region: config.aws_s3.region,
    sslEnabled: true
});

exports.profileImage = (req, res, next) => {
    var profileImageDB = req.user.avatar;
    var urlParams = {Bucket: config.aws_s3.logoBucket, Key: profileImageDB};
    s3.getSignedUrl('getObject', urlParams, function(err, url){
        if (err) console.log(err);
        res.locals.url = url;
        next();
    });
};

Сообщение об ошибке

{ CredentialsError: Missing credentials in config
    at ClientRequest.<anonymous> (/home/ubuntu/workspace/sailhr/node_modules/aws-sdk/lib/http/node.js:83:34)
    at ClientRequest.g (events.js:292:16)
    at emitNone (events.js:86:13)
    at ClientRequest.emit (events.js:185:7)
    at Socket.emitTimeout (_http_client.js:630:10)
    at Socket.g (events.js:292:16)
    at emitNone (events.js:86:13)
    at Socket.emit (events.js:185:7)
    at Socket._onTimeout (net.js:338:8)
    at ontimeout (timers.js:386:14)
    at tryOnTimeout (timers.js:250:5)
    at Timer.listOnTimeout (timers.js:214:5)
  message: 'Missing credentials in config',
  code: 'CredentialsError',
  time: 2018-09-24T22:28:44.241Z,
  retryable: true,
  originalError: 
   { message: 'Could not load credentials from any providers',
     code: 'CredentialsError',
     time: 2018-09-24T22:28:44.241Z,
     retryable: true,
     originalError: 
      { message: 'Connection timed out after 1000ms',
        code: 'TimeoutError',
        time: 2018-09-24T22:28:

Я даже пытался жестко кодировать значения в файл с моей функцией.Это тоже не удается.Я могу загрузить изображение на S3, используя учетные данные AWS, которые я использую для загрузки, так что известно, что ключи работают с 5 минут назад.

Кто-нибудь знает, что может происходить?Это кажется странной ошибкой, когда я не трогал код, который его использует, и учетные данные имеют полный доступ к S3 (только для устранения неполадок).

1 Ответ

0 голосов
/ 25 сентября 2018

Решил, переместив мою линию var s3 = new aws.S3(); ниже линии aws.config.update({.Я до сих пор не уверен, почему это сработало вчера, а не сегодня.Это кажется мне очень странным.Все равно было бы интересно, почему они могут быть.Может быть, это связано с тем, что значения совпадают, что-то кэшируется или тому подобное

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