MapReduce ジョブの結果として作成されたフォルダーを削除しようとしています。バケット内の他のファイルは問題なく削除されますが、このフォルダーは削除されません。コンソールから削除しようとすると、ステータスの横にある進行状況バーが 0 のままになります。その間にログアウト/ログインを含め、複数の試行を行いました。
5 に答える
同じ問題があり、AWS CLI を使用して修正しました。
aws s3 rm s3://<your-bucket>/<your-folder-to-delete>/ --recursive ;
(これは、実行済みaws configure
でaws s3 ls s3://<your-bucket>/
すでに機能していることを前提としています)
何よりもまず、Amazon S3には実際にはフォルダ/ディレクトリのネイティブな概念がなく、バケットとオブジェクト/キーのみで構成されるフラットなストレージ アーキテクチャです。これは、S3 用のほとんどのツール ( AWS マネジメント コンソールを含む) で見られるディレクトリ スタイルのプレゼンテーションです。つまり、同一のプレフィックスを持つオブジェクトの階層をシミュレートします-ディレクトリと一致しないオブジェクトの有効期限プレフィックスを指定する方法への私の回答を参照してください? AWS ドキュメントからの引用/参照を含む、このアーキテクチャの詳細については。
したがって、問題は、この階層をシミュレートするために別の規則を使用するツールに起因する可能性があります。たとえば、AWS フォーラムの次の回答を参照してください。
関連する質問Cannot delete file from bucketに対する Ivan Moiseev の回答では、別のツールを使用してそのような問題があるかどうかを調べ、それに応じて修正することを提案しています。
What are these _$folder$ objects ?に対する AWS チームの回答 -これは、S3 でディレクトリを作成するために Hadoop を含む多くのツールで使用される規則です。これらは主に、空のディレクトリを指定するために必要です。より美的なスキームを好む人もいるかもしれませんが、それがこれらのツールのやり方です。
幸運を!
Cloudfront からのログ ファイルを保持するディレクトリであるバケットを削除しようとすると、次のエラーが発生しました。
An unexpected error has occurred. Please try again later.
Cloudfront でのログインを無効にした後、フォルダーを正常に削除できました。
私の推測では、所有者による削除を許可しなかったのは、Cloudfront が使用するシステム フォルダーだったのでしょう。
あなたの場合、MapReduce が問題のフォルダーを保持しているかどうかを確認することができます。
まず、メソッドからディレクトリの内容を読み取り、getBucket
次にすべてのファイルの配列リストを取得してから、deleteObject
メソッドからファイルを削除します。
if (($contents = $this->S3->getBucket(AS_S3_BUCKET, "file_path")) !== false)
{
foreach ($contents as $file)
{
$result = $this->S3->deleteObject(AS_S3_BUCKET,$file['name']);
}
}
$this->S3
は S3 クラスのオブジェクトで、AS_S3_BUCKET
はバケット名です。