如何解决创建S3存储桶Node.js时AWS-SDK出现问题
我目前正在使用aws-sdk
来列出和创建存储桶。
我的代码如下
var AWS = require('aws-sdk');
const router = require('express').Router();
require('dotenv').config();
AWS.config.logger = console;
// AWS.config.update({region: process.env.AWS_REGION}); // AWS bucket region
s3 = new AWS.S3({
// apiVersion: '2006-03-01',accessKeyId: process.env.AWS_ACCESS_KEY_ID,secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,region: process.env.AWS_REGION
}); // s3 svc object
// Accepts Bucket Name,Bucket Created User/ Belonging Organization
router.post('/create',(req,res,next)=>{
var bucketParams = {
Bucket: req.body.bucket
}
console.log(process.env.AWS_ACCESS_KEY_ID);
s3.createBucket(bucketParams,(err,data)=>{
console.log("sample");
if (err) {
console.log("Error",err);
} else {
console.log("Success",data.Location);
}
})
});
router.get('/',next)=>{
s3.listBuckets((err,data)=>{
if(err){
}else{
}
})
});
我用于这些策略的AWS IAM用户策略如下。
{
"Version": "2012-10-17","Statement": [
{
"Effect": "Allow","Action": "s3:*","Resource": "*"
}
]
}
问题是,每当我提交http请求时,该请求都不会终止或返回有效的响应。
例如。
我得到以下有关创建名为sample-1
的存储桶的信息
[AWS s3 409 1.052s 0 retries] createBucket({
Bucket: 'sample1',CreateBucketConfiguration: { LocationConstraint: 'eu-west-1' }
})
sample
Error BucketAlreadyExists: The requested bucket name is not available. The bucket namespace is shared by all users of the system. Please select a different name and try again.
at Request.extractError (/home/caesar/Workspace/res-s3/res-s3-backend/node_modules/aws-sdk/lib/services/s3.js:837:35)
at Request.callListeners (/home/caesar/Workspace/res-s3/res-s3-backend/node_modules/aws-sdk/lib/sequential_executor.js:106:20)
at Request.emit (/home/caesar/Workspace/res-s3/res-s3-backend/node_modules/aws-sdk/lib/sequential_executor.js:78:10)
at Request.emit (/home/caesar/Workspace/res-s3/res-s3-backend/node_modules/aws-sdk/lib/request.js:688:14)
at Request.transition (/home/caesar/Workspace/res-s3/res-s3-backend/node_modules/aws-sdk/lib/request.js:22:10)
at AcceptorStateMachine.runTo (/home/caesar/Workspace/res-s3/res-s3-backend/node_modules/aws-sdk/lib/state_machine.js:14:12)
at /home/caesar/Workspace/res-s3/res-s3-backend/node_modules/aws-sdk/lib/state_machine.js:26:10
at Request.<anonymous> (/home/caesar/Workspace/res-s3/res-s3-backend/node_modules/aws-sdk/lib/request.js:38:9)
at Request.<anonymous> (/home/caesar/Workspace/res-s3/res-s3-backend/node_modules/aws-sdk/lib/request.js:690:12)
at Request.callListeners (/home/caesar/Workspace/res-s3/res-s3-backend/node_modules/aws-sdk/lib/sequential_executor.js:116:18) {
code: 'BucketAlreadyExists',region: 'us-east-1',time: 2020-08-18T15:24:22.974Z,requestId: '3C1F8277A6CAD712',extendedRequestId: 'bfRp36yH8Gh64zjM5VrUqCJi0V1AY5Sc5Snpf5yROPyV0HHgWTtE7gIEz70HRHb2JoOcO6jfLvQ=',cfId: undefined,statusCode: 409,retryable: false,retryDelay: 5.386495440613426
}
最奇怪的是,没有相同名称的存储桶,而我在这种情况下使用的区域是eu-west-1
。任何人都知道为什么会发生这种情况以及为什么请求没有被终止的任何线索。
解决方法
存储桶名称对于AWS是全局的。见下文
Amazon S3存储桶名称在全球范围内必须唯一。如果收到“存储桶名称已存在”或“ BucketAlreadyExists”错误,则必须使用其他存储桶名称来创建存储桶。这些错误消息表明另一个AWS账户拥有一个具有相同名称的存储桶。
您应该尝试使用唯一的名称。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。