Ongoing service disruptions
For the most recent update on ongoing service disruptions affecting the AWS Middle East (UAE) Region (ME-CENTRAL-1), refer to the AWS Health Dashboard. For information on AWS Service migration, see How do I migrate my services to another region?
Amazon S3 のコストが想定よりも高い場合に、削減する方法を教えてください。
AWS の請求において、Amazon Simple Storage Service (Amazon S3) の使用量が想定したよりも高くなっているため、コストを削減したいです。
簡単な説明
発生する Amazon S3 料金の種類を特定するには、Amazon S3 での現在の請求および使用状況をレビューします。AWS 使用状況レポートを使用しても、料金が発生する S3 バケットを確認できます。
使用タイプに応じて、次の方法を使用して請求内容を把握します。
- Amazon S3 ストレージレンズを使用すると、S3 ストレージ全体の使用状況とアクティビティを確認できます。デフォルトのダッシュボードは毎日、AWS アカウントのすべての S3 バケットに関するストレージメトリクスを更新します。
- サーバーアクセスログまたは AWS CloudTrail データイベントを使用すると、S3 バケットへのリクエストを監視できます。
解決策
注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI で発生したエラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。
Amazon S3 の請求コストを削減するには、次の手順を実行します。
不完全なマルチパートアップロードを削除する
マルチパートアップロードを開始すると、そのマルチパートアップロードを完了または終了させるまで、Amazon S3 はアップロードされたファイルの全部分を保持します。マルチパートアップロードを完了しない場合、Amazon S3 はアップロードされたパートを引き続き保存するため、ストレージの料金が請求されます。
AWS CLI コマンド abort-multipart-upload を実行してマルチパートアップロードを終了すると、このコマンドは完了していないアップロードされたパートを削除します。ただし、他のツールでは、マルチパートアップロードを終了させても、アップロードが完了していないパートが保持されることがあります。
不完全なマルチパートアップロードを削除するには、次のベストプラクティスを実施してください。
- 指定した日数が経過した後、不完全なマルチパートアップロードを削除するためのライフサイクルポリシーを作成します。
- ListMultipartUploads Amazon S3 API コールを使用すると、マルチパートアップロードが一覧表示されます。次に AbortMultipartUpload を使用し、失敗した、またはキャンセルするマルチパートアップロードを終了させます。
- アカウント内のバケットに対して Amazon S3 ストレージレンズを使用し、未完了のマルチパートアップロードの数とサイズを判断します。
- Amazon S3 ストレージレンズを使用すると、マルチパートアップロードが含まれた S3 バケットを特定できます。
過去のバージョンのオブジェクトを削除する
重要: Amazon S3 は、バケットから削除したデータを復元することはできません。
バケットで S3 Versioning 機能を有効にした場合、各オブジェクトにはストレージコストの原因となる複数のバージョンが含まれる可能性があります。
オブジェクトの各バージョンを確認するには、Amazon S3 コンソールを使用するか、ListObjectVersions API コールを実行します。次に、不要なオブジェクトバージョンを削除します。
バージョニングを有効化したバケットで特定のオブジェクトバージョンを完全に削除するには、そのオブジェクトバージョン ID を指定する必要があります。オブジェクトに対して削除リクエストを実行すると、Amazon S3 はそのオブジェクトに削除マーカーを追加します。削除マーカーを付けたオブジェクトがオブジェクトの現行のバージョンになり、元のオブジェクトは過去のバージョンになります。ただし、Amazon S3 はオブジェクトとそのバージョンを削除しません。
オブジェクトのバージョンを管理するには、次の操作を行います。
- ライフサイクルルールを作成します。
重要: Amazon S3 では完全削除を取り消すことはできません。ライフサイクルルールのパラメータを必ず確認してください。 - Amazon S3 ストレージレンズ メトリクスを参考に、アカウント内のバケットの現在および過去のバージョンの数および削除マーカーを判断します。
ストレージクラスの変更コストを確認する
あるストレージクラスから別のストレージクラスにオブジェクトを変更すると、コストが発生します。
また、AWS では、Amazon S3 Glacier Flexible Retrieval および Amazon S3 Glacier Deep Archive に保存したアーカイブオブジェクトごとに、40 KB の追加メタデータに対する料金が発生します。S3 Standard レートで 8 KB、S3 Glacier Flexible Retrieval または S3 Deep Archive レートで 32 KB 分の料金が発生します。
詳細については、「Amazon S3 ライフサイクルを使用してオブジェクトを移行する」を参照してください。
オーバーヘッドコストを削減するには、複数の小容量オブジェクトをいくつかの大容量オブジェクトに集約することをおすすめします。
バケット全体のオブジェクトを別のストレージクラスに移行するライフサイクル設定ルールを設定すると、Amazon S3 の料金が発生します。ライフサイクルルールによってコストが増加したかどうかを判断するには、AWS CloudTrail イベント履歴および Amazon S3 サーバーアクセスログで PutBucketLifecycleConfiguration コールの有無を確認します。さらに、S3 ライフサイクルアクションのログを確認します。
ストレージコストを最適化するには、アクセスの要件に応じてデータを自動的に移動する S3 Intelligent-Tiering ストレージクラスの使用をおすすめします。
S3 ストレージクラス分析を使用しても、各ストレージクラスに含まれるデータ量を調べることができます。
注: バケットごとに S3 ストレージクラス分析を設定する必要があります。
データ取得コストをレビューする
次のストレージクラスに保存するオブジェクトには、データ取得コストがかかります。
- S3 Standard-IA
- S3 1 ゾーン – IA
- S3 Glacier Flexible Retrieval
- S3 Glacier Deep Archive ストレージクラス
例えば、S3 Glacier Flexible Retrieval ストレージクラスからオブジェクトを取得する場合、取得のコストは一括取得オプションによって異なります。標準取り出しの合計コストは、迅速取り出しの合計コストよりも低くなります。
S3 Glacier Flexible Retrieval に保存したオブジェクトの一括取得には、料金はかかりません。S3 ストレージレンズダッシュボードを使用すると、複数のストレージリクエストおよびデータしよう状況を監視できます。
バケットに対するリクエストを監視する
次の方法でバケットへのリクエストを監視し、大量のリクエストから発生した料金を確認します。
- AWS では、サーバーアクセスログを有効にしても料金はかかりません。ただし、この機能が配信するログファイルに対しては、通常の標準ストレージ料金が発生します。
- AWS CloudTrail のオブジェクトレベルでのログ記録を使用すると料金が発生します。
- Amazon CloudWatch メトリクスを使用すると料金が発生します。
データ転出の料金によるコストを削減するには、バケットにアクセスする際に Amazon Elastic Compute Cloud (Amazon EC2) インスタンスを使用します。Amazon EC2 インスタンスは、バケットと同じ AWS リージョン内の Amazon Virtual Private Cloud (Amazon VPC) 内にある必要があります。
バケットのサイズ変更を確認する
バケットサイズの変更は、S3 コンソール、AWS CLI コマンド、または CloudWatch を使用して確認できます。
コンソールでバケットの現在のサイズと過去のサイズを比較するには、次の手順を実行します。
- Amazon S3 コンソールを開きます。
- [バケット] を選択し、該当するバケットを選びます。
- [管理] タブを選択します。
- [メトリクス] を選択します。
次に、以下の AWS CLI コマンド ls を実行します。
aws s3 ls --summarize --human-readable --recursive s3:///bucket-name
注: bucket-name を実際のバケット名に置き換えます。
出力例:
2021-10-07 21:32:57 452 Bytes foo/bar/car/petrol 2021-10-07 21:32:57 896 Bytes foo/bar/truck/diesel 2021-10-07 21:32:57 189 Bytes foo/bar/hybrid/battery 2021-10-07 21:32:57 398 Bytes vehicles.txt Total Objects: 4 Total Size: 2.9 MiB
CloudWatch を使用してもストレージメトリクスを監視できます。バケットサイズの変化を日、週、月ごとに監視するには、S3 ストレージレンズを使用します。
各バケットのコストを確認する
高いコストが発生するバケットを特定するには、バケットでコスト配分タグを有効にします。次に、AWS Cost Explorer を使用してバケットを確認します。詳細については、「Amazon S3 バケットのコストを確認する方法を教えてください」を参照してください。
使用状況と料金の関係性を把握する
使用状況レポートにはストレージ使用量がバイト-時間数単位で記録され、請求レポートにはストレージ使用量がギガバイト-月数 (GB-月数) 単位で記録されます。ストレージ使用量とストレージ料金の関係を把握するには、バイト-時間数を GB-月数に換算します。換算の例については、「Amazon S3 に関するよくある質問」で「Amazon S3 の使用に対して、どのように料金が発生し、請求が行われるかを把握したいです」を教えてください。
Amazon S3 使用状況レポートは、AWS Billing and Cost Management ダッシュボードからダウンロードできます。S3 ストレージレンズダッシュボードを作成しても、ストレージと請求の詳細なメトリクスを取得できます。
