首页 > 解决方案 > Heroku S3 在配置中缺少凭证,如果使用 AWS_CONFIG_FILE,请设置 AWS_SDK_LOAD_CONFIG=1',

问题描述

我在通过 S3 将图像上传到 heroku 时遇到问题。我在本地没有它,但是当我在 heroku 时,我遇到了这个问题。我怀疑这些凭证是错误的,但它在 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',

这是我的代码。它在本地运行良好,但在 heroku 中不行

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;

请帮我解决这个问题

标签: javascriptnode.jsherokuamazon-s3

解决方案


您可能是对的,缺少凭据。如果您通过process.env在本地运行的代码访问环境变量,那么您也必须为在 Heroku 中运行的应用程序实例定义它们。

在 Heroku 上,它们被称为“Config Vars”,您可以通过 Heroku CLI 或仪表板 GUI 来管理它们。在这里您可以在 GUI 中找到它,但Heroku 的文档也值得一试。

Heroku 配置变量


推荐阅读