バージョニングのトラブルシューティング
次のトピックは Amazon S3 のバージョニングのよくある問題をトラブルシューティングするのに役立ちます。
バージョニングが有効なバケットで、誤って削除されたオブジェクトを復元する
一般に、S3 バケットからオブジェクトバージョンが削除された場合、それらを Amazon S3 で復元する方法はありません。ただし、S3 バケットで S3 バージョニングを有効にしている場合、バージョン ID を指定しない DELETE
リクエストでは、オブジェクトを完全に削除できません。代わりに、削除マーカーがプレースホルダーとして追加されます。この削除マーカーはオブジェクトの最新バージョンになります。
削除したオブジェクトが完全に削除されているのか、一時的に削除されているのか (その場所に削除マーカーが表示されているか) を確認するには、次の手順に従います。
AWS Management Console にサインインし、Amazon S3 コンソール (https://console.aws.amazon.com/s3/
) を開きます。 -
左側のナビゲーションペインで、[バケット] を選択します。
-
[バケット] リストで、オブジェクトが含まれるバケットの名前を選択します。
-
[オブジェクト]リストで、検索バーの右側にある[バージョンの表示]トグルをオンにして、検索バーで削除されたオブジェクトを検索します。このトグルは、バケットで以前にバージョニングが有効だった場合に限り使用できます。
S3 インベントリを使用して、削除されたオブジェクトを検索することもできます。
-
[バージョンの表示] の切り替えや、インベントリレポートの作成の後にオブジェクトが見つからず、オブジェクトの削除マーカーも見つからない場合、完全に削除され、オブジェクトを復元することはできません。
また、AWS Command Line Interface (AWS CLI) の HeadObject
API オペレーションを使用して、削除されたオブジェクトの状態を確認できます。それには、次の head-object
コマンドを使用して、
を自分の情報に置き換えます。user input
placeholders
aws s3api head-object --bucket
amzn-s3-demo-bucket
--key
index.html
最新バージョンが削除マーカーであるバージョニングされたオブジェクトに対して head-object
コマンドを実行すると、404 Not Found
エラーが表示されます。例:
HeadObject オペレーションの呼び出し時にエラーが発生しました (404): Not Found
バージョニングされたオブジェクトに対して head-object
コマンドを実行し、オブジェクトのバージョン ID を指定すると、Amazon S3 はオブジェクトのメタデータを取得し、オブジェクトがまだ存在し、完全に削除されていないことを確認します。
aws s3api head-object --bucket
amzn-s3-demo-bucket
--key
index.html
--version-id
versionID
{ "AcceptRanges": "bytes", "ContentType": "text/html", "LastModified": "Thu, 16 Apr 2015 18:19:14 GMT", "ContentLength": 77, "VersionId": "Zg5HyL7m.eZU9iM7AVlJkrqAiE.0UG4q", "ETag": "\"30a6ec7e1a9ad79c203d05a589c8b400\"", "Metadata": {} }
オブジェクトが見つかり、最新バージョンが削除マーカーの場合、オブジェクトの以前のバージョンがまだ存在します。削除マーカーはオブジェクトの最新バージョンであるため、削除マーカーを削除することでオブジェクトを復元できます。
削除マーカーを完全に削除すると、2 番目に新しいバージョンのオブジェクトが最新のバージョンのオブジェクトになり、オブジェクトを再び使用できるようになります。オブジェクトの復元方法を視覚的に説明するには、「削除マーカーの削除」を参照してください。
特定のバージョンのオブジェクトを削除するには、バケット所有者になる必要があります。削除マーカーを完全に削除するには、DeleteObject
リクエストにそのバージョン ID を含める必要があります。それには、次のコマンドを使用して、
を自分の情報に置き換えます。user input placeholders
aws s3api delete-object --bucket
amzn-s3-demo-bucket
--key
index.html
--version-id
versionID
delete-object
コマンドの詳細については、AWS CLI コマンドリファレンスの「delete-object」を参照してください。削除マーカーの完全削除の詳細については、「削除マーカーの管理」を参照してください。
バージョニングされたオブジェクトを完全に削除する
バージョニングが有効なバケットでは、バージョン ID のない DELETE
リクエストではオブジェクトを完全に削除することはできません。このようなリクエストでは、代わりに削除マーカーが挿入されます。
バージョニングされたオブジェクトを完全に削除するには、以下の方法から選択できます。
S3 ライフサイクルルールを作成して、最新ではないバージョンを完全に削除します。最新ではないバージョンのオブジェクトを完全に削除するには、[現在のバージョンではないオブジェクトを完全に削除する]を選択し、[オブジェクトが最新バージョンでなくなってからの日数]に日数を入力します。オプションで、[Number of newer versions to retain] (保持する新しいバージョンの数) に値を入力して、保持する新しいバージョンの数を指定できます。このルールの作成については、「S3 ライフサイクル設定の指定」を参照してください。
DELETE
リクエストにバージョン ID を含め、指定されたバージョンを削除します。詳細については、「バージョニングされたオブジェクトの完全削除方法」を参照してください。現在のバージョンを期限切れにするライフサイクルルールを作成します。オブジェクトの現在のバージョンを期限切れにするには、[オブジェクトの現行バージョンを期限切れにする]を選択し、[オブジェクトの作成後の日数]に日数を入力します。このライフサイクルルールの作成については、「S3 ライフサイクル設定の指定」を参照してください。
バージョニングされたオブジェクトと削除マーカーをすべて完全に削除するには、2 つのライフサイクルルールを作成します。1 つは現在のバージョンを期限切れにして古いバージョンのオブジェクトを完全に削除するルールで、もう 1 つは期限切れのオブジェクト削除マーカーを削除するルールです。
バージョニングが有効なバケットでは、バージョン ID を指定しない DELETE
リクエストでは、NULL
バージョン ID を持つオブジェクトのみを削除できます。バージョニングが有効の場合にオブジェクトがアップロードされた場合、バージョン ID を指定しない DELETE
リクエストにより、そのオブジェクトの削除マーカーを作成します。
注記
S3 オブジェクトロックが有効なバケットでは、保護されたオブジェクトバージョン ID を含む DELETE
オブジェクトリクエストにより、403 Access Denied
エラーが発生します。バージョン ID のない DELETE
オブジェクトリクエストでは、200 OK
レスポンスでオブジェクトの最新バージョンとして削除マーカーが追加されます。オブジェクトロックで保護されているオブジェクトは、その保存期間とリーガルホールドが解除されるまで完全に削除できません。詳細については、「S3 オブジェクトロックの仕組み」を参照してください。
バケットのバージョニングを有効にした後、パフォーマンスが低下している
削除マーカーやバージョニングされたオブジェクトが多すぎる場合や、ベストプラクティスに従わない場合、バージョニングが有効なバケットでパフォーマンスが低下する可能性があります。
削除マーカーが多すぎる
バケットでバージョニングを有効にすると、オブジェクトに対してバージョン ID を持たない DELETE
リクエストを行うと、一意のバージョン ID の削除マーカーが作成されます。現在のバージョンのオブジェクトを期限切れにするルールを含むライフサイクル設定では、すべてのオブジェクトに一意のバージョン ID を持つ削除マーカーが追加されます。削除マーカーが多すぎると、バケットのパフォーマンスが低下する可能性があります。
バケットでバージョニングが停止すると、Amazon S3 では新しく作成されたオブジェクトに対するバージョン ID を NULL
としてマークします。バージョニングが停止されたバケットで期限切れアクションを行うと、Amazon S3 がバージョン ID として NULL
を使用する削除マーカーを作成します。バージョニングが停止されたバケットでは、すべての削除リクエストに対して NULL
削除マーカーが作成されます。これらの NULL
削除マーカーは、すべてのオブジェクトバージョンが削除され、単一の削除マーカーだけが残っている場合、期限切れオブジェクト削除マーカーとも呼ばれます。NULL
削除マーカーが多すぎると、バケットのパフォーマンスが低下します。
バージョニングされたオブジェクトが多すぎる
バージョニングが有効なバケットに数百万のバージョンのオブジェクトが含まれている場合、503 Service Unavailable
エラーが増える可能性があります。バージョニングを有効にしたバケットへの PUT
または DELETE
オブジェクトリクエストに対して受信される HTTP 503 Service Unavailable
レスポンスの数が著しく増加した場合、バケットに数百万のバージョンが存在するオブジェクトがある可能性があります。何百万ものバージョンのオブジェクトがある場合、Amazon S3 はバケットへのリクエストを自動的に制限します。リクエストのスロットリングによって、過剰なリクエストトラフィックからバケットを保護しますが、同じバケットに対して行われた他のリクエストに支障がある可能性があります。
数百万のバージョンがあるオブジェクトを確認するには、S3 インベントリを使用します。S3 インベントリは、バケット内のオブジェクトのフラットファイルリストを提供するレポートを生成します。詳細については、「S3 インベントリを使用したデータのカタログ化と分析」を参照してください。
バケット内でバージョニングされたオブジェクト数が多いかどうかを確認するには、S3 Storage Lens メトリクスを使用して、現在のバージョンのオブジェクト数、最新ではないバージョンのオブジェクト数、削除マーカーのオブジェクト数を表示します。Storage Lens メトリクスの詳細については、「Amazon S3 Storage Lens のメトリクスに関する用語集」を参照してください。
Amazon S3 チームでは、同じオブジェクトを繰り返し上書きし、そのオブジェクトに対して数百万のバージョンを作成する可能性のあるアプリケーションを調査して、アプリケーションが意図どおり動作しているかどうか調査することをお客様にお勧めしています。例えば、アプリケーションが毎分同じオブジェクトを 1 週間上書きすると、1 万を超えるバージョンが作成されることになります。各オブジェクトに保存するバージョンは 10 万未満にすることをお勧めします。単一または複数の Amazon S3 オブジェクトに対して数百万のバージョンを必要とするユースケースがある場合の最適なソリューションを決定するには、AWS Support チームにご相談ください。
ベストプラクティス
バージョニングに関連したパフォーマンス低下の問題を防ぐため、次のベストプラクティスを採用することをお勧めします。
ライフサイクルルールを有効にして、以前のバージョンのオブジェクトを期限切れにする。例えば、オブジェクトが最新ではない状態になってから 30 日後に、最新ではないバージョンを期限切れにするライフサイクルルールを作成できます。すべてを削除する必要がない場合は、最新ではないバージョンを複数保持することもできます。詳細については、「S3 ライフサイクル設定の指定」を参照してください。
ライフサイクルルールを有効にして、バケットに関連するデータオブジェクトがない期限切れのオブジェクト削除マーカーを削除します。詳細については、「期限切れオブジェクト削除マーカーの削除」を参照してください。
Amazon S3 のパフォーマンス最適化に関するその他のベストプラクティスについては、「ベストプラクティスのデザインパターン」を参照してください。