昨天我有我的项目在工作,昨天从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的完全访问权限时(仅用于对此进行故障排除),这似乎是一个奇怪的错误。
答案 0 :(得分:0)
通过将我的var s3 = new aws.S3();
行移到aws.config.update({
行下方来解决此问题。我仍然不确定为什么昨天而不是今天能奏效。我觉得这很奇怪。仍然会对他们为什么会感兴趣。如果值相同,则可能与缓存或类似内容有关