我正在寻找一种更好的删除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中是否缺少任何方法?
谢谢!
答案 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小时内消失。