javascript - 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;
请帮我解决这个问题
解决方案
您可能是对的,缺少凭据。如果您通过process.env
在本地运行的代码访问环境变量,那么您也必须为在 Heroku 中运行的应用程序实例定义它们。
在 Heroku 上,它们被称为“Config Vars”,您可以通过 Heroku CLI 或仪表板 GUI 来管理它们。在这里您可以在 GUI 中找到它,但Heroku 的文档也值得一试。
推荐阅读
- javascript - cloudinary url 的正则表达式组
- logstash-grok - Grok Pattern 跳过一个字符
- reactjs - Firebase Firestore 不会保存我的用户数据?
- php - PHP SQL UPDATE 如果存在或 INSERT 如果不存在?
- python - 如何让这个脚本正常工作?
- hortonworks-data-platform - SnapshotDiff 未显示正确的报告
- reactjs - Firestore where、orderBy 和 onSnapshot 不起作用
- c# - MVC所有DropdownListsFor都返回错误:“值不能为空,参数名称:项目”POST后,在GET时完美填充
- azure-devops - 通过 azure devops 将测试完成结果推送到黄瓜
- azure - WEBSITE_TIME_ZONE 已设置但未通过应用设置