1

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

谢谢!

4

3 回答 3

3

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

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

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

于 2020-01-08T19:21:44.703 回答
2

没有 API 直接做会更容易。有一种非常简单的方法可以使用S3 管理控制台的“生命周期”设置删除 S3 中的存储桶:

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

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

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

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

  • 将天数设置为“1”你就完成了。桶将在 24 小时内消失。

于 2014-11-16T13:11:30.653 回答
1

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

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

(取自S3 REST API)。

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

于 2012-08-05T22:46:20.890 回答