Javascript AWS S3不可访问主机
我是AWS的初学者,我正在尝试连接到S3。我有一个非常简单的导出,但收到错误消息:Javascript AWS S3不可访问主机,javascript,amazon-web-services,amazon-s3,Javascript,Amazon Web Services,Amazon S3,我是AWS的初学者,我正在尝试连接到S3。我有一个非常简单的导出,但收到错误消息: {"message":"Inaccessible host: `legal-systems-staging.s3.eu-central-1.amazonaws.com'. This service may not be available in the `eu-central-1' region.","code":"UnknownEndpoint","region":"eu-central-1","hostnam
{"message":"Inaccessible host: `legal-systems-staging.s3.eu-central-1.amazonaws.com'. This service may not be available in the `eu-central-1' region.","code":"UnknownEndpoint","region":"eu-central-1","hostname":"legal-systems-staging.s3.eu-central-1.amazonaws.com","retryable":true,"originalError":{"message":"getaddrinfo ENOTFOUND legal-systems-staging.s3.eu-central-1.amazonaws.com
要连接,我有以下代码:
const AWS = require('aws-sdk');
module.exports = function(customENV){ return function(req, res) {
//get ENV variables
const aws_accessKeyId = customENV.access_key;
const aws_secretAccessKey = customENV.secret_access_key;
const aws_region = customENV.s3_region;
const aws_bucket = customENV.s3_bucket;
//configuring the AWS environment
AWS.config.update({
region: aws_region,
accessKeyId: aws_accessKeyId,
secretAccessKey: aws_secretAccessKey
});
new AWS.S3().getObject({ Bucket: aws_bucket, Key: req.body.template }, function(err, data) {
if (!err) {
res.send('good');
} else {
res.send(err);
}
});
}};
S3管理控制台中的Bucket具有EU区域(法兰克福),因此应该是正确的
凭证是正确的。我做错了什么?我已经找到了问题所在。正如我在评论中所写,我们正在使用GoogleFirebase将文件发送到AWSS3。问题是我们使用了错误的价格计划(Spark而不是Blaze),这就是我无法进行外部调用的原因。这听起来非常愚蠢,但我犯了这个错误,因为在我的
.env
文件中,我的桶值和区域值混淆了。
在转换了它们的值之后,我的代码又开始工作了
使用AWS CLI工具检查访问权限。如果您可以通过AWS CLI(列出、上载、签署URL、删除等)进行访问,但不能通过您的代码进行访问,那么您很可能会遇到类似的问题
希望这能帮助像我这样的人。我有一个类似的例子,我使用.env文件来存储密钥、id和区域 .env中的此代码有错误:
AWS_ID = 'AKIAW6LZAWQJYVSFY6MV'
当我删除单引号时,未知端点错误消失了
AWS_ID = AKIAW6LZAWQJYVSFY6MV
如错误所述,您的bucket似乎位于
eu-central-1
之外的另一个区域,请登录aws控制台,查看您的bucket位于哪个区域,并在代码中使用相同的区域。@Justinas-更新的回答customENV来自何处?此代码是否在本地计算机上运行?如果是这样,您可能应该在~/.aws中设置凭据,而不是在这样的代码中设置凭据。如果它在其他地方运行(比如lambda),那么您需要添加一个策略来允许lambda函数访问S3bucket@dbramwell我们正在使用GoogleFirebase(不要问我为什么)将文件发送到AWSS3。代码正在公共网站上运行(在firebase部署之后)。环境值来自另一个系统,但我甚至尝试了硬编码的值,结果是一样的。我也有同样的问题。但我没有付费计划,我有跟踪账户。这是否意味着我无法使用SDK访问S3?