【AWS】S3コスト最適化のポイント【S3】

# はじめに
AWSのアーキテクチャを評価する際の観点の1つとして、発生するコストが最適化されているかというものがあります。
Well-Architected Frameworkのコスト最適化の柱ベストプラクティスでは「クラウド財務管理を実践する」「経費支出と使用量の認識」「費用対効果の高いリソース」「需要を管理しリソースを供給する」「継続的最適化」という領域があり、いかにコストの発生を可視化、あるいは監視してそれを分析し、最適化するかが求められます。
この基本的な考え方は各AWSサービスに共通でもAWSサービスごとに実践できる具体的な対策は変わってきます。
今回の記事ではS3に関するコスト最適化の例をいくつか記載しました。

# S3のコストは何に対して発生するか
参考「Amazon S3 の料金」：

https://aws.amazon.com/jp/s3/pricing/

AWS公式のS3の料金の参考サイトから以下の項目に関しての主に料金が発生することが記載されています。
## 「ストレージとリクエスト」
S3 バケットにオブジェクトを保存するための料金が発生し、この料金はストレージコスト、オブジェクトのサイズ、保管期間の長さ、アクセス頻度などによって変化します。
## 「データ転送」
以下の場合を除き、AmazonS3に出入りするすべてデータた転送で料金が発生します
<料金発生対象外>
- すべての AWS サービスとリージョン (中国とGovCloud を除く) で集約された、毎月最初の 100 GB のインターネットに転送されたデータ
- インターネットから転送されたデータ。
- 同じ AWS リージョン内の S3 バケット間で転送されるデータ。 
- Amazon S3 バケットから S3 バケットと同じ AWS リージョン内の任意の AWS のサービスに転送されたデータ (同じ AWS リージョン内の別のアカウントに転送されたデータを含む)。
- Amazon CloudFront (CloudFront) に転送されたデータ。


# 関連する AWS Well-Architectedフレームワークの項目
## COST04-BP05 データ保持ポリシーを適用する

https://docs.aws.amazon.com/ja_jp/wellarchitected/latest/framework/cost_decomissioning_resources_data_retention.html

<ポイント>
・データ保持ポリシーとライフサイクルポリシーを定義してストレージクラスの意向や削除を自動で実行すると、ライフタイム機関の全体的なストレージコストが削減できる


# 不要オブジェクトの削除によってストレージコスト削減「ライフサイクルルール」
・日次、月次バッチで基本的に1回しか使用しないオブジェクト、オンプレミスのバックアップをAWSに移行した後で保存すべき期間を過ぎて不要になったオブジェクトは削除することでストレージの容量とコストを削減できます。
**<イメージ>**
![S3ライフサイクル.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192949/6edce543-e8d4-10f1-4860-1c21f2158e6b.png)

**<設定手順>**
・ライフサイクルルールを作成するにはS3バケットのコンソール画面から「管理」を選択して「ライフサイクルルールを作成する」を選択します
![ライフサイクルルールを作成する.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192949/92b15238-6777-3a80-be51-8eb24c1847c1.png)
・ライフサイクルルールの設定はライフサイクルルールの名前、ライフサイクルルールの適用範囲、ライフサイクルでのアクション(削除かストレージクラスの変更か)を選択します
![ライフサイクルルール設定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192949/42b54ff2-b411-8e57-6c9e-787774ff76a7.png)
・「オブジェクト作成後の日数」でオブジェクトの保持期間を設定します
![ライフサイクル設定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192949/845aa42a-4c01-b23e-e4f9-5e1f583a54fb.png)


・最後に「移行と有効期限切れのアクションの確認」の記載を確認して意図したルールになっているかを確認して「ルールの作成」を選択します
![ライフサイクル設定決定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192949/eab52cdf-7901-b721-7ea4-e035869545e3.png)




# 適切なストレージにオブジェクトを配置「S3 Intelligent Tiering」
・オブジェクトを保管するストレージクラスを選択する上での判断基準の一つにアクセス頻度が挙げられます。
・例えば頻繁にアクセスがあるものは「S3 Standard」を選択し、反対にログのようなアクセスはあまり行わないが問題の調査や監査目的で長期間保存する必要があるものは「S3 Glacier Deep Archive」を選択することが多いと思います。
・S3に保存するオブジェクトのアクセス頻度が予測可能である場合はライフサイクルルール等を使用して適切なストレージクラスの移行を設定できますが、アクセス頻度やストレージクラス選択の要件が決まっていないときはとりあえずStandardを選択するのではなく、Intelligent-Tieringの選択を検討すると良いです
・Intelligent-Tieringはオブジェクトのアクセスパターンに戻づいてオブジェクトを最適なアクセス階層に自動的に移動させます。
・これによりストレージクラスの選定が難しい場合でもStandardクラス一択と比較してコスト最適化が期待できます。
**<イメージ>**
![S3Intelligent－Teering.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192949/41b22fda-55e9-335e-8a60-41e065ec6952.png)





# データ転送と保存データ容量の削減「データ圧縮」
・同じ AWS リージョン内の S3 バケット間で転送されるデータについては料金が発生しませんが、オンプレとAWS間のデータ転送、異なるリージョンのデータ転送には料金が発生します。
・東京リージョンでのデータの転送のコストは0.09USD/GBと記載がありデータ量に応じてコストが発生しています。このコストを削減するためにも生データの保持が必要ない場合は圧縮するようにした方がよいでしょう
・また、圧縮されることでストレージ容量の削減も期待できるためストレージの容量のコストも削減が期待できます
![S3データ転送.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192949/76c6c4a8-20c0-0ee9-fc90-d1ecae78a9bd.png)



# コスト可視化と分析「タグ付けと AWS Cost Explorer」
・ここまでコストの削減に関する手法を紹介しましたが、コスト最適化では実際に何にどのくらいのコストが発生しているかを可視化して分析、その後さらなる改善を継続することが大切です。
・簡単にコストを確認する方法としてCostExplolerがあります。
※参考：AWSブラックベルト「AWS Cost Explorer」

https://pages.awscloud.com/rs/112-TZM-766/images/AWS-Black-Belt_2024_AWS-CostExplorer_0630_v1.pdf

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192949/6db97a2e-8ce0-9200-137f-89b618118c98.png)
・CostExplolerはいつどのサービスにいくらのコストが発生したかを可視化するもので、様々な方法でフィルターを行い必要な情報を抽出することが可能です。
・S3のコスト可視化の1つの工夫としては「タグ」を利用してコストを詳細に可視化することが可能です
・S3バケットに分析したい粒度でタグ付けを行い、CostExplolerでフィルター抽出を行うことでどのバケットにいつどのくらいのコストが発生しているかを可視化することができます。
<設定手順>
・タグはS3コンソール画面の「プロパティ」から設定可能です
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192949/64a8d009-134d-1698-583f-d754e52a7669.png)
・タグ付けはキーと値の組み合わせで行います
※タグ付けの粒度は案件やチームによって変わってきますが、「何の目的でだれが作ったものか」がわかるようなタグ付けがあると良いかなと思います
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192949/a4718402-bf1e-9859-b482-fbbecf750250.png)