У Heroku S3 отсутствуют учетные данные в конфигурации, при использовании AWS_CONFIG_FILE установите AWS_SDK_LOAD_CONFIG = 1 ', - PullRequest
0 голосов
/ 17 июня 2020

У меня проблема с загрузкой изображения на heroku через S3. У меня его нет локально, но когда я нахожусь в героку, у меня возникает эта проблема. Я подозреваю, что учетные данные неверны, но он работает на localhost. Чего-то не хватает или нужно добавить код

2020-06-17T16:26:58.525066+00:00 app[web.1]: Error: connect ECONNREFUSED 169.254.169.254:80
2020-06-17T16:26:58.525075+00:00 app[web.1]: at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1141:16) {
2020-06-17T16:26:58.525076+00:00 app[web.1]: message: 'Missing credentials in config, if using AWS_CONFIG_FILE, set AWS_SDK_LOAD_CONFIG=1',
2020-06-17T16:26:58.525077+00:00 app[web.1]: errno: 'ECONNREFUSED',
2020-06-17T16:26:58.525077+00:00 app[web.1]: code: 'CredentialsError',
2020-06-17T16:26:58.525078+00:00 app[web.1]: syscall: 'connect',
2020-06-17T16:26:58.525078+00:00 app[web.1]: address: '169.254.169.254',
2020-06-17T16:26:58.525079+00:00 app[web.1]: port: 80,
2020-06-17T16:26:58.525079+00:00 app[web.1]: time: 2020-06-17T16:26:58.517Z,
2020-06-17T16:26:58.525080+00:00 app[web.1]: originalError: {
2020-06-17T16:26:58.525081+00:00 app[web.1]: message: 'Could not load credentials from any providers',

Это мой код. Он отлично работает локально, но не в героку

const aws = require('aws-sdk');
const fs = require('fs');

aws.config.update({
  secretAccessKey: process.env.AWS_SECRET_KEY,
  accessKeyId: process.env.AWS_ACCESS_KEY,
  region: process.env.AWS_REGION
});


var s3 = new aws.S3({
  secretAccessKey: process.env.AWS_SECRET_KEY,
  accessKeyId: process.env.AWS_ACCESS_KEY,
  region: process.env.AWS_REGION
});

async function addFile(fullpath = String,key = String) {

  const fileContent = fs.readFileSync(fullpath);

  var params = {
    Bucket: 'bucketeer-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
    Key: fullpath,
    Body: fileContent

  };

  return new Promise(function (resolve, reject) {
    s3.putObject(params, function (err, data) {
      if (err) {
        console.log(err, err.stack);
        reject(err);
      } // error
      else {
        console.log("added");
        resolve(data);
      }              // deleted
    });
  });


}

module.exports.addFile = addFile;

пожалуйста, помогите мне с этим

1 Ответ

1 голос
/ 17 июня 2020

Вы, наверное, правы, что учетные данные отсутствуют. Если вы обращаетесь к переменным среды через process.env в коде, который вы запускаете локально, вам нужно будет определить их и для экземпляра приложения, работающего в Heroku.

В Heroku они называются «Config Vars», и вы можете управлять ими либо через Heroku CLI, либо через панель инструментов GUI. Вот где вы найдете его в GUI, но документацию Heroku также стоит проверить.

Heroku Config Vars

...