Amazon Simple Storage Service (Amazon S3) の Amazon CloudWatch メトリクスと AWS Command Line Interface (AWS CLI) ストレージメトリクスの間に不一致が見られます。2 つのソース間で報告されるストレージサイズにこれほどの大きな違いがあるのはなぜですか?
簡単な説明
Amazon S3 の CloudWatch ストレージメトリクスと AWS CLI を使用して計算されたメトリクスに不一致がある場合は、次の点を確認してください。
- オブジェクトのバージョニング。
注意: Amazon S3 のオブジェクトバージョニング機能を使用すると、バケット内で 1 つのオブジェクトの複数のバージョンが保持されます。デフォルトでは、バケットにおける Amazon S3 オブジェクトバージョニングは無効になっており、この機能を明示的に有効にする必要があります。さらに、AWS CLI ストレージメトリクスの計算では、バケットに保存されている各オブジェクトの最新バージョンとサイズのみがカウントされます。
- 不完全なマルチパートアップロード
**注意:**不完全なマルチパートアップロードは AWS CLI ストレージの計算には含まれませんが、CloudWatch メトリクスのストレージとして計算されます。
報告の不一致の原因を特定するには、オブジェクトバージョニングを有効にしているかどうかを確認し、バケット内にマルチパートアップロードがないか調べます。これらの 2 つの要因により、CloudWatch で計算されたバケットサイズの値が増加する可能性があります。詳細については、バケットの Amazon S3 CloudWatch 日次ストレージメトリクスを参照してください。
ヒント: Amazon S3 に不完全なマルチパートアップロードがある場合は、ライフサイクル設定ルールを作成することを検討してください。このライフサイクル設定ルールにより、不完全なパーツが自動的にクリーンアップされ、データストレージのコストが削減される場合があります。ライフサイクルルールは非同期に動作するため、オペレーションに遅延が生じる可能性があることに注意してください。ただし、オブジェクトが削除対象としてマークされると、(オブジェクトがまだ削除されていない場合でも) ストレージについての料金は請求されなくなります。
また、Amazon S3 モニタリングメトリクスが記録されるのは 1 日に 1 回であるため、最新の情報が表示されない場合があります。一方、CloudWatch は AWS リソースとアプリケーションをリアルタイムでモニタリングします。
解決方法
CloudWatch の日次ストレージメトリクス
CloudWatch では、BucketSizeBytes メトリクスは、Amazon S3 と Amazon S3 Glacier のすべてのストレージタイプ、オブジェクトバージョン、および不完全なマルチパートアップロードをキャプチャします。この値は、すべてのオブジェクトサイズ、バケット内のメタデータ (現在のオブジェクトとそれ以外のオブジェクトの両方)、および不完全なマルチパートアップロードのサイズを合計することによって計算されます。例えば、BucketSizeBytes メトリクスは、以下のすべてのオブジェクトストレージクラスの S3 バケットに保存されているデータの量 (バイト単位) を計算します。
- S3 Standard
- S3 Intelligent-Tiering
- S3 標準 – 低頻度アクセス
- S3 1 ゾーン – IA
- S3 低冗長化ストレージ
- S3 Glacier Deep Archive
- S3 Glacier
また、CloudWatch の NumberOfObjects メトリクスには、すべてのストレージクラスについて、バケットに保存されているオブジェクトの総数が含まれます。この値は、バケット内のすべてのオブジェクト (現在のバケットとそれ以外のバケットの両方)と、不完全なマルチパートアップロードのパートの総数をカウントします。NumberObjects メトリクスは、バケット内のすべてのバージョンのオブジェクトの総数も計算します。例えば、同じオブジェクトに 2 つのバージョンがある場合、2 つのバージョンは 2 つの別々のオブジェクトとしてカウントされます。詳細については、メトリクスとディメンションを参照してください。
AWS CLI を使用した毎日のストレージ計算
AWS CLI を使用して Amazon S3 のストレージメトリクスを計算するには、次のコマンド構文を使用します。
aws s3 ls --summarize --human-readable --recursive s3://bucketname | grep -i total
このコマンド構文は、Amazon S3 バケット内のオブジェクトの総数とサイズを計算します。ただし、バケットに保存されている各オブジェクトの最新バージョン (およびそのサイズ) のみが計算されることに注意してください。各オブジェクトのマルチパートアップロード、削除マーカー、および最新でないバージョンは、バケットの合計サイズまたはオブジェクトの総数には計算されません。
不完全なマルチパートアップロード
不完全なマルチパートアップロードの一覧を確認するには、list-multipart-uploads コマンドを実行します。
aws s3api list-multipart-uploads --bucket <bucket-example>
その後、list-parts コマンドと UploadId 値を使用して、マルチパートアップロード内のすべてのオブジェクトを一覧表示します。
aws s3api list-parts --bucket <bucket-example> --key large_test_file --upload-id <examplevalue>
ライフサイクルルールの作成
マルチパートアップロードを自動的に削除するには、ライフサイクル設定ルールを作成します。以下の手順を実行してください。
1. Amazon S3 コンソールを開きます。
2. [Management] (管理) タブを開きます。
3. [Create new policy] (新しいポリシーを作成) を選択します。
4. ポリシーの名前を追加します。
5. [Select - Delete expired delete markers or incomplete multipart uploads] (選択 - 失効した削除マーカーまたは不完全なマルチパートアップロードを削除) を選択します。
6. (オプション) バケットがバージョニングされていない場合は、[Delete incomplete multipart uploads] (不完全なマルチパートアップロードを削除) を選択します。
オブジェクトのバージョン管理
Amazon S3 バケットで異なるバージョンのオブジェクトを確認および監査するには、Amazon S3 インベントリリストを使用します。Amazon S3 インベントリリストファイルには、ソースバケット内のオブジェクトのリストと、各オブジェクトのメタデータが含まれます。インベントリリストファイルでは、バケット名、オブジェクトサイズ、ストレージクラス、バージョン ID などのメタデータがキャプチャされます。
関連情報
例 8: マルチパートアップロードを中止するライフサイクル設定
オブジェクトの有効期限