【问题标题】:Delete a bucket in S3删除 S3 中的存储桶
【发布时间】:2012-08-03 14:14:04
【问题描述】:

我正在寻找一种更好的方法来删除 S3 存储桶。
适用于 .Net 的 AWS 开发工具包不允许删除非空存储桶和
没有任何重载的DeleteBucket() 可以删除存储桶中的任何子对象。

这是我目前删除存储桶的方式 -

  • 检索桶中的所有对象
  • 删除对象
  • 删除存储桶

//先删除桶中的所有对象——非空桶是不能删除的

using (ListObjectsResponse response = amazonS3Client.ListObjects(new ListObjectsRequest().WithBucketName(bucket.Name)))
{
    if (response.S3Objects.Count > 0)
    {
        List<KeyVersion> keys = response.S3Objects.Select(obj => new KeyVersion(obj.Key)).ToList();
        DeleteObjectsRequest deleteObjectsRequest = new DeleteObjectsRequest
        {
            BucketName = bucket.Name,
            Keys = keys
        };
        amazonS3Client.DeleteObjects(deleteObjectsRequest);
    }
}

//Delete Bucket
DeleteBucketRequest request = new DeleteBucketRequest
{
    BucketName = bucket.Name
};
amazonS3Client.DeleteBucket(request);

在 S3 中删除存储桶是否有更好的方法 - 我不需要先获取对象。
我在适用于 .Net 的 AWS 开发工具包中缺少任何方法吗?

谢谢!

【问题讨论】:

    标签: .net sdk amazon-s3 amazon-web-services


    【解决方案1】:

    如果有人仍然对这个老问题感兴趣。有人像我一样偶然发现它。尤其是使用 .Net 核心进行 S3 交互的人。

    同时出现了官方的AWS S3 Utils类,该类具有名为DeleteS3BucketWithObjectsAsync的功能,支持删除bucket及其所有对象。 官方文档可以找到here

    它是 AWSSDK.S3 nuget 包中 AmazonS3Util 命名空间的一部分。

    【讨论】:

    • 非常感谢!这似乎是一种巧妙的做法。
    • 谢谢,尝试了这个并得到了这个错误:Amazon.S3.AmazonS3Exception:没有密钥的 ?versions 子资源之类的东西----Amazon.Runtime.Internal.HttpErrorResponseException:远程服务器返回错误:(400) 错误请求。 -------- System.Net.WebException:远程服务器返回错误:(400)错误请求。我可以与客户端连接,并且该存储桶与对象一起存在。有任何想法吗?谢谢!
    【解决方案2】:

    无需 API 直接执行此操作会更容易。使用 S3 管理控制台,使用“生命周期”设置删除 S3 中的存储桶有一种非常简单的方法:

    • 选择要删除的存储桶,然后转到“属性”下的“生命周期”。

    • 添加新规则 设置新规则以应用于“整个存储桶”

    • 点击右下角的“配置规则”按钮

    • 在“对对象的操作”下拉菜单中,选择“永久删除”

    • 将天数设置为“1” 大功告成。桶将在 24 小时内用完。

    【讨论】:

      【解决方案3】:

      我认为这是不可能的。甚至他们的 REST API 也不支持删除非空存储桶:

      删除存储桶
      说明
      DELETE 操作的这种实现会删除 URI 中命名的存储桶。必须先删除存储桶中的所有对象(包括所有对象版本和删除标记),然后才能删除存储桶本身。

      (取自S3 REST API)。

      通过调用删除多个对象请求,您正在以正确的方式进行操作。请注意,如果您使用的是版本化存储桶,则必须在删除存储桶之前删除其所有版本中的所有对象。

      【讨论】:

        猜你喜欢
        • 2012-05-16
        • 1970-01-01
        • 1970-01-01
        • 2017-11-16
        • 2018-05-16
        • 2017-06-08
        • 2010-09-06
        • 2018-09-11
        • 2020-07-14
        相关资源
        最近更新 更多