【问题标题】:Problem with aws-sdk while creating S3 Buckets nodejs创建 S3 存储桶 nodejs 时出现 aws-sdk 问题
【发布时间】:2020-08-19 00:02:48
【问题描述】:

我目前正在使用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('/', (req, res, 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。任何人都知道为什么会发生这种情况以及为什么请求没有被终止。

【问题讨论】:

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


    【解决方案1】:

    存储桶名称对 AWS 来说是全局的。见下文

    Amazon S3 存储桶名称必须在全球范围内唯一。如果您收到“Bucket name already exists”或“BucketAlreadyExists”错误,则必须使用不同的存储桶名称来创建存储桶。这些错误消息表明另一个 AWS 账户拥有同名的存储桶。

    您应该尝试使用唯一的名称。

    【讨论】:

      猜你喜欢
      • 2016-03-18
      • 2017-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-19
      • 1970-01-01
      • 1970-01-01
      • 2021-09-14
      相关资源
      最近更新 更多