AWS S3无法正常工作,但之前一直在工作而无需更改代码

时间:2018-09-24 22:31:55

标签: node.js amazon-web-services amazon-s3

昨天我有我的项目在工作,昨天从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:

我什至尝试用我的函数将值硬编码到文件中。那也失败了。我可以使用用于下载的AWS凭证将映像上传到S3,因此已知它们的密钥在5分钟前就可以使用。

任何人都知道可能会发生什么?当我没有触摸过使用它的代码,并且凭据具有对S3的完全访问权限时(仅用于对此进行故障排除),这似乎是一个奇怪的错误。

1 个答案:

答案 0 :(得分:0)

通过将我的var s3 = new aws.S3();行移到aws.config.update({行下方来解决此问题。我仍然不确定为什么昨天而不是今天能奏效。我觉得这很奇怪。仍然会对他们为什么会感兴趣。如果值相同,则可能与缓存或类似内容有关