在S3中删除存储桶

时间:2012-08-03 14:14:04

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

我正在寻找一种更好的删除S3 Bucket的方法 AWS SDK for .Net不允许删除非空桶和
没有任何重载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中删除存储桶是否有更好的方法 - 我不需要首先获取对象。
AWS SDK for .Net中是否缺少任何方法?

谢谢!

3 个答案:

答案 0 :(得分:2)

如果仍然有人对此旧问题感兴趣。有人像我一样偶然发现了它。特别是使用.Net核心进行S3交互的人。

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

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

答案 1 :(得分:1)

我认为不可能。甚至他们的REST API都不支持删除非空桶:

  

DELETE Bucket
  说明
  DELETE操作的此实现将删除URI中指定的存储桶。必须先删除存储桶中的所有对象(包括所有对象版本和删除标记),然后才能删除存储桶本身。

(取自S3 REST API)。

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

答案 2 :(得分:0)

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

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

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

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

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

  • 将天数设置为“1”您已完成。铲斗将在24小时内消失。