S3バケットの1つで最近何かが起こった:
私はこれらすべての余分なものがどこから来ているのか探し始めましたが、私が収集したメトリックはCloudWatch(または私たちの請求書)で何が起こっているのと一致していないようです。
バケットにはいくつかの異なるキープレフィックス(「フォルダー」)があるため、最初に行ったのは、次のように、それらのいずれかがこの数値に大きく貢献しているかどうかを確認することでした。
aws s3 ls --summarize --human-readable --recursive s3://my-bucket/prefix
ただし、どのプレフィックスにも数GBを超える大量のデータが含まれているようには見えません。
ようやく走ってみた
aws s3 ls --summarize --human-readable --recursive s3://my-bucket
...そして合計サイズが25GBになりました。 「フォルダのサイズ」を見つけるために間違ったことをしたり、何かを誤解したりしていますか?この追加のストレージがすべて使用されている場所を見つけるにはどうすればよいですか(また、どのプロセスが正常に実行されていないかを確認できます)?
中止されたマルチパートアップロードでした。 S3は、デフォルトで、失敗したすべてのマルチパートアップロードのすべてのアップロード部分を無期限に保持します。プロセスは失敗し、失敗した転送を明示的にクリーンアップせずにマルチパートアップロードを再試行していました。
これを一時的にバージョン管理を有効にし、ライフサイクルルールを設定して、中止されたマルチパートアップロードチャンクを1日後に削除し、1日待って、チャンクレットがクリアされたらバージョン管理を再び無効にすることで、これを修正しました。
この問題を修正する方法に関する広範なサポートとドキュメントがあります。最も一般的なのは、一定の時間が経過した後に古いバージョンを移動することです。
別のオプションは、不完全なマルチパートアップロードを削除することです。これは、2016年以降AWSでサポートされています( source )。これは、S3ライフサイクルルールで確認できます。
誰かがあなたのS3にたくさんのものをアップロードしてからそれを削除したのではないかと思います。 S3 Versioningを有効にしている場合は、削除されたファイルが多数表示される可能性があります。
aws s3api list-object-versions
から始めて、出力を解析します。
不要な古いバージョンを見つけた場合は、aws s3api delete-object ... --version-id ...
を使用して削除し、すぐに削除できます。
あるいは、特定の時間が経過すると古いバージョンを自動的に完全に削除するS3ライフサイクルポリシーを作成できます。
それが役に立てば幸い:)