【问题标题】:AWS Bucket UndeletableAWS 存储桶不可删除
【发布时间】:2019-06-04 17:07:32
【问题描述】:

AWS S3 Web 控制台列出了已删除的存储桶。选择存储桶并尝试清空或删除它会导致“清空存储桶”或“删除存储桶”模式确认按钮静默失败。

如果您单击存储桶并尝试上传文件,则会收到错误消息“找不到错误数据”。如果您尝试创建文件夹,则会收到“错误无法创建名为 '' 的文件夹”。如果您尝试更改属性、权限或管理,也会收到错误消息。

如果您尝试创建具有相同名称的存储桶(可能是为了覆盖旧存储桶),您会收到一条错误消息,指出该存储桶名称已被占用。

s3-upload 等库同样无法删除或覆盖存储桶。

AWS(节点)SDK:

var aws = require('aws-sdk');

var s3 = new aws.S3();

s3.listBuckets({}, (error, data) => {
  console.log(error);
  console.log(data);
});

返回存储桶,即使它不应该存在。

{ 
  Buckets: [ 
   { Name: 'bucket.that.shouldnt.exist', CreationDate: 2017-02-20T01:51:19.000Z },
  ],
  Owner: { 
   DisplayName: '...',
   ID: '...' 
  }     
}

s3.deleteBucket({
  Bucket: 'bucket.that.shouldnt.exist'
}, (error, data) => {
  console.log(error);
  console.log(data);
});

返回

{ 
  NoSuchBucket: The specified bucket does not exist
  at Request.extractError (.../aws-sdk/lib/services/s3.js:585:35)
  at Request.callListeners (.../aws-sdk/lib/sequential_executor.js:106:20)
  at Request.emit (.../aws-sdk/lib/sequential_executor.js:78:10)
  at Request.emit (.../aws-sdk/lib/request.js:683:14)
  at Request.transition (.../aws-sdk/lib/request.js:22:10)
  at AcceptorStateMachine.runTo (.../aws-sdk/lib/state_machine.js:14:12)
  at .../aws-sdk/lib/state_machine.js:26:10
  at Request.<anonymous> (.../aws-sdk/lib/request.js:38:9)
  at Request.<anonymous> (.../aws-sdk/lib/request.js:685:12)
  at Request.callListeners (.../aws-sdk/lib/sequential_executor.js:116:18)
  message: 'The specified bucket does not exist',
  code: 'NoSuchBucket',
  region: null,
  time: 2019-06-04T16:56:35.537Z,
  requestId: '...',
  extendedRequestId: '...',
  cfId: undefined,
  statusCode: 404,
  retryable: false,
  retryDelay: 33.90621042754991 
}

【问题讨论】:

    标签: amazon-s3


    【解决方案1】:

    Amazon S3 是一个大规模的分布式系统。删除 S3 存储桶与删除硬盘上的本地文件夹完全不同。

    在您开始删除存储桶后,存储桶名称会在一定时间内不可用。您无法重新创建存储桶、重新删除存储桶、从存储桶获取对象或将对象放入存储桶。

    最近删除的存储桶名称不能重复用于创建新存储桶的时间量会有所不同。如果您之前拥有存储桶名称并且您尝试在同一区域重新创建存储桶,那么您通常几乎可以立即重新创建它。如果您不是之前的所有者,或者您尝试在其他区域重新创建存储桶名称,则存储桶名称通常会在几个小时内不可用。

    请注意,作为一般规则,如果您打算重复使用相同的存储桶名称,那么最好直接清空存储桶,而不是删除并重新创建存储桶。另一个客户可能会在您的删除和重新创建尝试之间创建同名存储桶,从而导致您失去对存储桶名称的控制(当然不太可能,但有可能)。

    【讨论】:

      【解决方案2】:

      由于某种原因,AWS createBucket API 工作了(尽管控制台没有工作):

      var aws = require('aws-sdk');
      
      var s3 = new aws.S3();
      
      s3.createBucket({
        Bucket: 'bucket.that.shouldnt.exist'
      }, (error, data) => {
        console.log(error);
        console.log(data);
      });
      

      那么,你应该可以对被覆盖的bucket进行正常的操作了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-09-11
        • 2018-03-06
        • 2019-08-05
        • 1970-01-01
        • 2017-08-24
        • 2020-12-14
        • 1970-01-01
        • 2015-06-22
        相关资源
        最近更新 更多