AWSコスト最適化の勘所のまとめ

#  **0.THE FRUGAL ARCHITECT (倹約的なアーキテクト)**
2023年11月下旬に開催された re:Invent 2023 のキーノートにおいて、Amazon CTO のワーナー・ヴォゲルス氏が「THE FRUGAL ARCHITECT (倹約的なアーキテクト)」という考え方をお話されました。

とても刺さる内容となっており、今後私なりの解釈を整理して記事化してみたいと考えています。

https://thefrugalarchitect.com/

https://www.youtube.com/watch?v=UTRBVPvzt9w

#  **1. はじめに** 
近年、様々な企業や組織でAWSの利用が広まってきましたが、AWS活用をしていく中で適切なコスト管理は欠かせません。

適切なコスト管理ができていないと、予想外の箇所でコストが発生し、それに気づかないまま無駄な費用が **長期間にわたって発生し続ける恐れ** があります。そのため現時点でどのくらいの費用がかかっているのかを正確に把握し、それを分析して最適化する必要があります。

#  **2.主要なポイントの要約** 
AWSコスト最適化の主要なポイントは以下の通りです。

- AWS利用料の概要を理解
- 利用状況の分析を行なう
- EC2インスタンスやストレージオプションなどの最適化を行なう
- 持続的なコスト管理を実現するためのタグ付けや予算設定、コスト最適化レポートの活用、コスト最適化の文化醸成

:::note info
 **今後、主要なポイントをテーマに実例を交えた記事を投稿していきます。<br>興味を持った方は是非見ていただければと思います。** </font>
:::
[AWSコスト最適化：実践編（EBSボリュームのgp3化）](https://qiita.com/pohd_ccoe/items/04aff521dae192472769 "AWSコスト最適化：実践編（EBSボリュームのgp3化）")
[AWSコスト最適化：失敗編（CloudWatch アラーム定義増殖事件）](https://qiita.com/pohd_ccoe/items/4530622fd9a09e5cfcb0 "AWSコスト最適化：失敗編（CloudWatch アラーム定義増殖事件）")

#  **3. AWS利用料の概要** 
AWS利用料の理解は、費用削減のための重要なステップです。
基礎的な部分ですが、一度振り返ってみましょう。

##  **3.1 AWS利用料の構成要素と料金モデルの説明** 
AWS利用料は、いくつかの構成要素に基づいて計算されます。
以下では、代表的な要素について説明します

-  **コンピューティングリソース** 
AWSのコンピューティングリソース（例: EC2インスタンス）の利用に伴う料金が発生します。インスタンスのタイプやサイズ、利用時間に応じて料金が異なります。

-  **ストレージ** 
AWSのストレージサービス（例: S3、EBS）の利用にも料金がかかります。データの保存量やデータ転送量に応じて料金が計算されます。

-  **ネットワーキング** 
AWSのネットワーキングサービス（例: VPC、データ転送）の利用に関しても料金が発生します。トラフィックの送信量や接続の種類によって料金が変動します。

上記に記載した要素は代表的なものであり、サービスごとに異なる考え方で料金が計算されます。全ての料金体系を完全に把握することは困難なため、 **『様々な考え方のもとで料金体系が作られている』** という理解を持つことが重要です。

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

#  **4. AWS利用料の分析と最適化** 
AWS利用料を効果的に削減するためには、まず現在の利用状況を分析し、最適化が可能な部分を見つける必要があります。以下では、AWS利用料の分析と最適化について説明します。

##  **4.1 AWS Cost Explorer の活用** 
AWS Cost Explorer は、利用料の分析に役立つツールです。このツールを使用すると、AWSのサービスごとの利用料や傾向を視覚的に把握することができます。

https://aws.amazon.com/jp/aws-cost-management/aws-cost-explorer/

##  **4.2 可視化の重要性** 
AWS利用料の分析と可視化は、費用削減のための重要な手法です。分析によって、特定のサービスやリソースが高額な利用料を引き起こしていることが明らかになる場合、最適化の対象となります。

https://aws.amazon.com/jp/compute-optimizer/

AWS Compute Optimizer を活用することで例えば、とあるEC2が過剰にプロビジョニングされたインスタンスタイプを利用している場合、適切なインスタンスタイプをマネジメントコンソール上で確認することが出来ます。

AWS Compute Optimizer は無料利用することができ、またEC2だけではなく、LmabdaやEBS、ECS on Fargateに関しても推奨事項を確認することができるため、活用したいサービスの１つです。

##  **4.3 リザーブドインスタンスの最適な活用** 
リザーブドインスタンス（以下、RI）は、長期的な利用を見込んでコストを削減するための選択肢です。RIとは、AWSのコンピューティングリソース（例: EC2インスタンス）をあらかじめ予約し、割引価格で利用することができるものです。リザーブドインスタンスを活用することで、通常のオンデマンド料金よりもコストを削減することができます。

https://aws.amazon.com/jp/ec2/pricing/reserved-instances/

AWSでは、リザーブドインスタンスには1年契約と3年契約のオプションがあり、契約期間が長いほど割引率が高くなります。具体的な割引率はインスタンスタイプやリージョンによって異なりますが、一般的には1年契約で最大約40%、3年契約で最大約60%の割引が適用されます。

利用パターンや需要予測に基づいてリザーブドインスタンスを適切に購入することで、利用料の削減が可能です。

RIは契約期間はインスタンスタイプの変更が出来ない、という制約がありますが、同じ割引が適用されるSavings Plans（以下、SP）を活用することでインスタンスファミリーが同じという条件でインスタンスタイプの変更が可能です。

https://aws.amazon.com/jp/savingsplans/

#  **5. サービス最適化の手段** 
サービス最適化は、AWS利用料の費用削減において重要な要素です。以下では、いくつかのサービス最適化の手段を紹介します。

##  **5.1 EC2インスタンスタイプの最適化** 
EC2インスタンスは、アプリケーションの要件に合わせて最適なタイプを選択することが重要です。適切なインスタンスタイプを選択することで、パフォーマンスを最大限に引き出し、無駄なリソースの使用を避けることができます。

具体的な最適化の進め方としては、以下の方法が考えられます。

- パフォーマンス要件に基づいて必要なリソースを見積もること。
- EC2のインスタンスファミリーや世代ごとの特性を理解し、目的に合った最適なインスタンスタイプを選択すること。

また、EC2インスタンスタイプの変更検討には、前述したAWS Compute Optimizer を利用することで適切なインスタンスタイプを見つけ出すことが可能です。

https://aws.amazon.com/jp/ec2/

インスタンスファミリーの特性については、以下の資料が非常に役に立ちます。

https://pages.awscloud.com/rs/112-TZM-766/images/C2-07.pdf


##  **5.2 ストレージオプションの適切な選択** 
AWSのストレージサービスには、さまざまなオプションがあります。データのアクセス頻度や耐久性の要件に基づいて、適切なストレージオプションを選択することで、利用料を最適化できます。

ストレージサービスのうち、EBSのストレージオプションを適切に選択する具体的な手法は以下の通りです。

- データのアクセス頻度に合わせて、適切なストレージクラスを選択
- 頻繁にアクセスされるデータは高速なストレージクラス（SSD）に配置
- アーカイブやバックアップデータは低コストなストレージクラス（HDD）に配置

https://aws.amazon.com/jp/ebs/

EC2を作成する際にデフォルトで作成されるEBSボリュームタイプが   **General Purpose SSD (gp2)**  になっていますが、ユースケース次第では   **General Purpose SSD (gp3)** の方がコストパフォーマンスが良い場合があります。


##  **5.3 Auto Scalingの活用** 
Auto Scalingは、需要に応じてインスタンスの数を自動的に増減させることができる機能です。これによって、無駄なリソースの使用を避けることができます。

具体的な活用としては、以下の方法が考えられます。

Auto Scalingグループを設定し、インスタンスの数を需要に応じて自動的に増減させることで、需要の変動に柔軟に対応することができます。
これらの手法を活用することで、サービスの最適化とAWS利用料の削減を実現することができます。

https://aws.amazon.com/jp/autoscaling/

#  **6. 持続的なコスト管理の重要性** 
AWS利用料の費用削減を実現するためには、持続的なコスト管理が必要です。以下では、持続的なコスト管理の重要性と具体的なアプローチについて紹介します。

##  **6.1 タグ付けとコスト配分** 
リソースにタグを付けることで、利用料のコスト配分や課金情報の可視化が可能になります。タグを活用することで、どの部門やプロジェクトがどれだけの利用料を生み出しているのかを把握し、コスト配分や予算管理を行うことができます。

https://aws.amazon.com/jp/blogs/news/cost-allocation-tag/

##  **6.2 予算とアラートの設定** 
AWSでは、予算とアラートを設定することで、利用料の監視と制御ができます。予算を設定することで、特定の期間やサービスに対する利用料の上限を設けることができます。また、アラートを設定することで、利用料が設定したしきい値を超えた場合に通知を受けることができます。

https://aws.amazon.com/jp/aws-cost-management/aws-budgets/


##  **6.3 コスト最適化レポートの活用** 
AWS Cost and Usage Reports は、利用料の可視化と分析に役立つツールです。これらのレポートを活用することで、利用料の傾向やパターンを把握し、コスト削減のポイントを見つけることができます。

https://aws.amazon.com/jp/aws-cost-management/aws-cost-and-usage-reporting/

##  **6.4 コスト意識の徹底と教育** 
持続的なコスト管理を実現するためには、組織全体でのコスト意識の徹底と教育が必要です。携わる人のAWSの利用料についての意識を高め、費用削減の重要性を理解させる取り組みが重要です。

https://docs.aws.amazon.com/ja_jp/wellarchitected/latest/cost-optimization-pillar/cost_cloud_financial_management_culture.html