AWS 請求書において、Amazon S3 の料金が想定外に高くなっています。Amazon S3 のコストを削減するにはどうすればよいですか?
最終更新日: 2021 年 5 月 21 日
AWS 請求書の Amazon Simple Storage Service (Amazon S3) 使用料金が予想よりも高くなっています。Amazon S3 のコストを削減するにはどうすればよいですか?
簡単な説明
Amazon S3 の料金は、ストレージ、リクエストとデータ取り出し、データ転送 (S3 Transfer Acceleration の使用を含む) 、およびデータ管理に基き発生します。
Amazon S3 の料金を削減できる場所を特定するには、まず Amazon S3 の現在の請求と使用状況を理解する必要があります。そして、コストがかかる方法を理解する必要があります。
Amazon S3 での請求方法を理解したら、請求コストを削減するための次のヒントを検討してください。
- 不完全なマルチパートアップロードをクリーンアップする。
- 不要となった古いバージョンのオブジェクトを削除する。
- ストレージクラスの移行コストを確認する。
- データ取得にかかるコストを確認する。
- バケットに送られるリクエストを追跡する。
- バケットサイズの変化状況を確認する。
- 個々のバケットのコストを確認する。
- 使用量と料金の関係を理解する。
また、次の Amazon S3 機能を使用して、請求に関する問題の調査に役立てることもできます。
- Amazon S3 Storage Lens を使用して、Amazon S3 ストレージ全体の使用状況とアクティビティの単一ビューを取得します。S3 Storage Lens は、組織、アカウント、バケット、オブジェクト、あるいはプレフィックスレベルでインサイトを生成します。S3 Storage Lens はこれらのストレージメトリクスを分析し、ストレージコストを最適化し、データを保護するためのベストプラクティスの適用に役立つ推奨事項を提供します。
- Amazon S3 Storage Class Analysis を使用して、データアクセスパターンを観察します。S3 Storage Class Analytics を使用すると、アクセス頻度の低い標準ストレージを STANDARD_IA (IA、アクセス頻度の低い場合) ストレージクラスに移行するタイミングを決定できます。
注: バケットごとに Amazon S3 Storage Class Analysis を設定する必要があります。
解決方法
不完全なマルチパートアップロードをクリーンアップする
マルチパートアップロードの開始後は、それが完了または中止するまで、アップロード済みのファイルのすべてのパートが Amazon S3 により保持されます。マルチパートアップロードが正常に完了しなかった場合でも、Amazon S3 はアップロードされたパートを保管し続けます。その結果、アップロードされたパートの保管料金が課金されます。
AWS コマンドラインインターフェイス (AWS CLI) を使用してマルチパートアップロードを中止 (abort-multipart-upload) した場合には、オペレーションは (不完全な) アップロード済みパートを削除します。ただし、Amazon S3 のマルチパートアップロード API を利用する他のツールを使っていると、アップロードが完了したパートとは別に、不完全なマルチパートアップロードが残る可能性があります。
不完全なマルチパートアップロードをクリーンアップする場合のベストプラクティスをいくつか紹介します。
- 不完全なマルチパートアップロードから取り残されるアップロードされたパートのストレージ料金を避けるには、ライフサイクルポリシーを作成します。ライフサイクルポリシーを使用して、不完全なマルチパートアップロードを一定日後にクリーンアップできます。
- Amazon S3 API 呼び出しを使用して、マルチパートアップロードを一覧表示します。その後、失敗した、またはキャンセルしたいマルチパートアップロードをすべて中止します。
- S3 Storage Lens を使用して、アカウント内の特定のバケットまたはすべてのバケットについて、不完全なマルチパートアップロードの数とサイズを決定します。
さらに、Amazon S3 Storage Lens を活用して、どの S3 バケットにマルチパートアップロードが含まれているかを特定できます。S3 Storage Lens を使用すると、不完全なマルチパートアップロードのデータ量をプレビューできます。
不要となった古いバージョンのオブジェクトを削除する
警告: オブジェクトやオブジェクトのバージョンを削除するときは注意してください。Amazon S3 では、バケットから削除したデータを復元することはできません。
バケットで バージョニング を有効にしている場合、各オブジェクトには複数のバージョンを含めることができます。各オブジェクトバージョンは、それぞれストレージコストに影響を与えます。
各オブジェクトのバージョンは、Amazon S3 コンソールを使用するか、ListObjectVersions API 呼び出しを実行することで確認できます。次に、不要なオブジェクトバージョンを削除します 。
注: バージョニング対応のバケットでオブジェクトバージョンを完全に削除するには、そのオブジェクトのバージョン ID を指定する必要があります。バージョニング対応のバケット内にあるオブジェクトで、単に削除リクエストを実行すると、Amazon S3 はオブジェクトに削除マーカーを追加します。削除マーカーがオブジェクトの最新バージョンになり、実際のオブジェクトは以前のバージョンになります。 この場合でも、オブジェクトとそのバージョンは実際には消去されません。
次を使用することもできます。
- オブジェクトの現在のバージョンと以前のバージョンを管理するためのライフサイクルルール。ただし、Amazon S3 における永続的な削除は元に戻すことができないため、ライフサイクルルールのパラメータを慎重に確認する必要があります。
- S3 Storage Lens を使用して、現在のバージョン、以前のバージョンの数、およびアカウント内の特定のバケットまたはすべてのバケットのマーカーを削除できます。
ストレージクラスの移行コストを確認する
一般的には、継続的なストレージコストは、オブジェクトを他のストレージクラスに移行することで削減します。ただし、オブジェクトを 1 つのストレージクラス から別のストレージクラスへ移行する場合にも、コストが発生する可能性があることを知っておくことが重要です。
例えば、オブジェクトが S3 標準 から S3 標準 - IA ストレージクラスに移行すると、1,000 回のライフサイクル移行リクエストごとに 0.01 USD が課金されます。また、任意のストレージクラスから Amazon Simple Storage Service Glacier ストレージクラスへのオブジェクト移行では、1,000 回のライフサイクル移行リクエストごとに 0.05 USD が課金されます。料金および詳細な情報については「Amazon S3 の料金」をご参照ください。
バケットのオブジェクト全体を、別のストレージクラスに移行するようなライフサイクル設定ルールを作成した場合に、S3 の料金が増加することがあります。料金の増加がライフサイクルルールの原因であるかどうかを判断するには、 AWS CloudTrail イベント履歴を確認します。また、 PutBucketLifeCycleConfiguration 呼び出しの Amazon S3 サーバーアクセスログを確認して 、いつルールが適用されたかを特定することもできます。
さらに、S3 Storage Class Analysis を使用して、異なるストレージクラスから取得されたデータの量を確認できます。
注: S3 Storage Class Analysis は、バケットごとに設定する必要があります。
データ取得にかかるコストを確認する
S3 標準 - IA、S3 1 ゾーン - IA、S3 Glacier、または S3 Glacier Deep Archive ストレージクラスに保存されたオブジェクトでは、データ取り出しに対しコストが発生します。
例えば、S3 Glacier ストレージクラスから 1,500 万個のオブジェクトを取得する場合は、取得オプションに注意してください。取得の総コストは、選択した一括取得オプションに基づきます。
一括取り出しの場合:
- 取り出しリクエスト料金は 15,000,000 / 1000 x 0.025 USD = 375 USD です。
- 取り出し料金は 100,000 x 0.0025 USD = 250 USD です。
- 合計コストは 625 USDになります。
標準取り出しの場合 :
- 取り出しリクエスト料金は 15,000,000 / 1000 x 0.05 USD = 750 USD です。
- 取り出し料金は 100,000 x 0.01 USD = 1,000 USD です。
- 合計コストは 1750 USDになります。
迅速取り出しの場合:
- 取り出しリクエスト料金は 15,000,000 / 1000 x 10 USD = 150,000 USD です。
- 取り出し料金は 100,000 x 0.03 USD = 3,000 USD です。
- 合計コストは 153,000 USD になります。
ヒント: さまざまなストレージリクエストとデータ使用量を監視するために、 S3 Storage Lens ダッシュボードを使用することもできます。
バケットに送られるリクエストを追跡する
バケットへのリクエストは、次のいずれかの方法でモニタリングできます。
- サーバーアクセスのログ記録を使用します。アクセスログの確認方法の詳細については、「Amazon S3 サーバーアクセスログの形式」をご参照ください。
- AWS CloudTrail により、オブジェクトレベルのログ記録が利用可能です。
- Amazon S3 リクエストに対して Amazon CloudWatch メトリクスを使用します。AllRequests や BytesDownloaded などのメトリクスは、バケットに対するリクエストのモニタリングに役立ちます。
バケットに対して行われたリクエストを把握した後は、リクエストで生じるコストの削減策を講じることが可能になります。例えば、バケットポリシーまたは AWS Identity and Access Management (IAM) ポリシーを使用して、バケットへの不正アクセスを防止したり、パブリックアクセスを制限したりできます。または、データ転送の OUT 料金によるコストを削減するために、Amazon Elastic Compute Cloud (Amazon EC2) インスタンスを使用してバケットにアクセスできます。Amazon EC2 インスタンスは、バケットと同じ AWS リージョン内の Amazon Virtual Private Cloud (Amazon VPC) に存在する必要があります。
バケットサイズの変化状況を確認する
現在のバケットのサイズと前月のサイズを比較することで、ストレージコストを分離して評価できます。バケットのストレージサイズは、Amazon S3 コンソールで確認できます。
1. Amazon S3 コンソールでバケットを表示します。
2. [Management] (管理) タブを開きます。
3. [メトリクス] を選択します。
AWS CLI を使用してバケットのストレージサイズを確認することも、 Amazon CloudWatch でストレージメトリックスをモニタリングすることもできます 。または、日、週、月単位でバケットサイズの変更を監視するには、S3 Storage Lens を使用することもできます。
個々のバケットのコストを確認する
コストが高くなる特定のバケットを特定するには、バケットでコスト配分タグを有効にします。次に、AWS Cost Explorer を使用してバケットを確認します。この方法の詳細については、「 Amazon S3 バケットのコストを調べるにはどうすればよいですか?」を参照してください。
使用量と料金の関係を理解する
使用状況レポートにはストレージ使用量がバイト時間単位で示され、請求レポートでは、ストレージ使用量が GB 月単位で記録されています。このため、ストレージ使用量とストレージ料金との関係性を理解するには、バイト-時間を GB-月に変換する必要があります。この変換の例については、「Amazon S3 の AWS 請求レポートと使用状況レポートの理解」を参照してください。
Amazon S3 使用状況レポートは、請求情報とコスト管理ダッシュボードからダウンロードできます。または、詳細なストレージと請求メトリックスを取得するには、アカウント内のすべてのバケットに対して S3 Storage Lens ダッシュボードを作成します。