円安時代に再考するAWSコスト節約術(ストレージサービス「Amazon S3」編):AWSチートシート
AWS活用における便利な小技を簡潔に紹介する連載「AWSチートシート」。今回はストレージサービスの「Amazon S3」に焦点を当てて、コストを最適化するポイントを紹介します。
「Amazon Web Services」(AWS)活用における便利な小技を簡潔に紹介する連載「AWSチートシート」。以前、『円安時代に再考するAWSコスト節約術(コンピュートリソース編:「EC2」「ECS」「Lambda」)』という記事を書いた時よりもドル高円安の流れは多少落ち着きましたが、それでも数年前の1ドル=110円前後よりは依然としてドル高のままです。
また普段からAWSのコスト最適化を進めておくことはドル円レートの傾向にかかわらず必要なことだと思います。
今回は、多くのシステムで利用されているであろうストレージサービス「Amazon S3」に焦点を当てて、コストを最適化できるポイントを紹介します。
※各サービスの最新の利用料金に関しては公式の情報をご参照ください。
ポイント1:日本以外のリージョンを利用できるかどうか検討する
以前の記事でも書いた通り、AWSのサービスはリージョンごとに利用量当たりの課金料が違います。S3においてもこの原則は変わらず、S3では保存容量、アクセス数、データ転送量についても東京リージョンと比較して北米リージョンが安くなっています。
もし、ある程度大きなファイルの保管場所としてS3を利用する場合、開発用だったり、S3に保存する情報の場所に法的な要件がなかったりするなら北米リージョンを利用することをお勧めします。
ポイント2:最適なストレージクラスを選択する
S3には保存するオブジェクトの性質に合わせてさまざまなストレージクラスが用意されています。下記はストレージクラスの一覧と「どういった場合に、どれを選べばよいか」のポイントです。
- S3標準
リクエスト頻度が高いファイルを保存する - S3標準-IA
リクエスト頻度が低いファイルを保存する - S3 1ゾーン-IA
リクエスト頻度が低く、1つのAZ(アベイラビリティゾーン)に保存することで可用性を下げてもよいものを保存する - S3 Glacier Instant Retrieval
アーカイブ用途だが、必要な時に即時利用したいものを保存する - S3 Glacier Flexible Retrieval
基本的に長期保管するのが決まっており、もしもの場合は早く取り出したいものを保管する - S3 Glacier Deep Archive
長期アーカイブ用途で取り出しの時間がかかってもよいものを保存する - S3 Intelligent-Tiering
上記の用途に適しているかどうか不明な場合に適している。アクセス頻度に応じて、高頻度、低頻度、アーカイブなどのストレージ層に自動で変更してくれる
保存容量、アクセス、データ取り出しにかかる料金については、冒頭で挙げた公式のS3利用料金表を参照すればいいですが、通常利用するファイルの保存についてはアクセス頻度に応じて1〜3の中から選択し、アーカイブファイルの保存用途なら、取り出し時間の要件を考慮し4〜6の中から選択すればよいでしょう。
もしも、保存するファイルの性質がまだ不明な場合は、7を選び、自動的にお得になるストレージ層を利用できる設定をしておくといいでしょう。
もし、自分で「90日後にS3標準から、S3標準-IAへ変更」という明確なルールのもとストレージクラスを変更したい場合は、S3のライフサイクルルールを設定することで実現できます。
ポイント3:保存するオブジェクト自体の容量を削減する
S3は保存しているファイルの容量、データ取り出し(GB当たり)に対して課金されます。これは、もしも圧縮できるデータが多く存在しているのに非圧縮状態で存在していた場合、無駄遣いをしていることになります。
S3にファイルを置く際に圧縮した状態になるようにプログラムや「Kinesis Firehose」の設定をお勧めします。
ポイント4:不要なオブジェクトが残っていないかどうかを確認する
まず簡単なところとして、利用していないファイルを削除するようにしましょう。
S3で盲点になりやすいのは、バージョニングを設定しているバケットで見た目上削除されているが、削除マーカーが付与されているだけで実体としては保存されており、保存容量がかかっている場合です。下図はバージョニングが設定されているS3管理画面のキャプチャーです。
このようにバージョンを表示しないと空のように見えますが、表示した場合、下図のように削除前のファイルが保存されていることが分かります。
バージョニングを設定していて何度も同じファイル名を更新した場合、複数のバージョンが保存されることで、見た目上のファイル数×バージョン数でコストがかかることになります。こういったバージョニングによるコスト増を防ぐためにも、前述のライフサイクルルールを利用できます。具体的には下記キャプチャーの設定でバージョンの世代管理などを細かく行えます。
大きなファイルをアップロードするときにマルチパートアップロードを利用している場合、途中で失敗した場合にゴミとして残ってしまうものを「不完全なマルチパートアップロード」といいます。保存容量を喰(く)うだけなので削除を設定しておくことをお勧めします。
上記のような「非現行バージョン」「不完全なマルチパートアップロード」「削除マーカー」を可視化できるものとしてS3には「StorageLens」機能があるので、そちらを活用することで不要なオブジェクトを把握しやすくしておくのもいいでしょう。
まとめ
今回のポイントをまとめます。
- ポイント1:日本以外のリージョンを利用できるかどうか検討する
- 東京リージョンを使う必要がない場合、他のリージョンを使う選択肢を考慮する
- ポイント2:最適なストレージクラスを選択する
- 保存するものの用途に最適なストレージクラスを考えて利用する
- 保存するもののアクセス傾向が不明な場合、Intelligent-Tieringを利用してみる
- 自分で日数などのルールを設定してストレージクラスを変更したい場合はライフサイクルルールを設定する
- ポイント3:保存するオブジェクト自体の容量を削減する
- データ自体の容量を圧縮などで削減して格納する
- ポイント4:不要なオブジェクトが残っていないかどうかを確認する
- バージョニングを設定しているS3バケットはバージョン×オブジェクトの数保存容量がかかるので不要なバージョンは削除する
- バージョニングを設定しているS3バケットは見た目上削除されていても削除マーカーで見えなくなっている場合があるので、バージョンを表示して完全に削除する
- 不完全なマルチパートアップロードはごみなので削除する
- ライフサイクルルールで、バージョンの世代数管理、削除されたオブジェクトの削除管理、不完全マルチパートアップロードを削除できる
本記事が皆さんのAWS利用のコスト最適化に少しでも寄与できれば幸いです。別の機会にAWSでの通信に関わるコストをテーマにしてコスト最適化について説明する予定です。お楽しみに。
筆者紹介
沼崎 伸洋(ぬまざき のぶひろ)
株式会社システムシェアード 開発事業部所属。
ここ数年はAWSを利用したシステムの設計、開発、構築を行っています。
仕事以外では、AWSの資格をあと2つでコンプリートできるので制覇に向けて頑張っています!
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- 「急激な円安で心の休まらない日々」――NewsPicksのSREが明かす、AWSコスト20%削減術
2022年10月8日、AWSユーザーグループ「JAWS-UG」が主催する勉強会「JAWS DAYS 2022」がオンラインと全国各地のリアル会場で開催された。本稿では、ニューズピックス SREチームの安藤裕紀氏による講演内容を要約してお伝えする。 - 円安で無視できないAWSコスト増、AWSジャパンが説明する「こうすれば安くなります」
2022年9月16日、AWSジャパンは「今だからこそ考える最適なクラウド活用」というテーマで記者説明会を開催した。円安で利用コスト増への対策として「Cloud Financial Management」や「Savings Plans」などの活用方法を説明した。 - AWSコストの妥当性を「説明」できるようにする、クックパッドのインフラコスト管理術
大規模サービスを展開する国内ITベンダー6社による「6社合同SRE勉強会」が2022年3月12日に開催された。主催社の1社であるクックパッドは「AWSコストを可視化して『説明』できるようにするための取り組み」と題したセッションで、大規模にAWSを利用する際に避けて通れない「コストの管理、監視」を効果的に実施するための工夫を複数紹介した。