1

S3バケットを削除するためのより良い方法を探しています。
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に欠けているメソッドはありますか?

ありがとうございました!

4

3 に答える 3

3

誰かがまだこの古い質問に興味がある場合に備えて。そして、誰かが私と同じようにそれを偶然見つけました。特に、S3インタラクションに.Netコアを使用している人。

その間に、DeleteS3BucketWithObjectsAsyncと呼ばれる関数を持ち、すべてのオブジェクトを含むバケットの削除をサポートする公式のAWSS3Utilsクラスが登場しました。公式ドキュメントはここにあります

これは、AWSSDK.S3nugetパッケージのAmazonS3Util名前空間の一部です。

于 2020-01-08T19:21:44.703 に答える
2

APIなしで直接行う方が簡単です。S3管理コンソールを使用した「ライフサイクル」設定を使用してS3のバケットを削除する非常に簡単な方法があります。

  • 削除するバケットを選択し、[プロパティ]の下の[ライフサイクル]に移動します。

  • 新しいルールを追加する「バケット全体」に適用する新しいルールを設定します

  • 右下の「ルールの設定」ボタンをクリックします

  • [オブジェクトに対するアクション]プルダウンで、[完全に削除]を選択します

  • 日数を「1」に設定します。これで完了です。バケツは24時間でなくなります。

于 2014-11-16T13:11:30.653 に答える
1

それは不可能だと思います。それらのRESTAPIでさえ、空でないバケットの削除をサポートしていません。

DELETEバケットの
説明
このDELETE操作の実装は、URIで指定されたバケットを削除します。バケット自体を削除する前に、バケット内のすべてのオブジェクト(すべてのオブジェクトバージョンと削除マーカーを含む)を削除する必要があります。

S3 REST APIから取得)。

複数のオブジェクトの削除リクエストを呼び出すことで、正しい方法で実行しています。バージョン管理されたバケットを使用している場合は、バケットを削除する前に、すべてのバージョンのすべてのオブジェクトを削除する必要があることに注意してください。

于 2012-08-05T22:46:20.890 に答える