AWS EKSでのコスト削減のベストプラクティス


# AWS EKSでのコスト削減のベストプラクティス
-------------------

![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2944615/3d8bc2cb-bdb6-f3b1-175b-265310e8aaca.png)


クラウドコンピューティングの普及に伴い、ますます多くの企業がAWS EKS（Elastic Kubernetes Service）を使用してコンテナ化されたアプリケーションをホストしています。しかし、クラスターの規模が拡大するにつれて、コストの問題も顕著になります。コストをより良く管理・最適化するために、企業はさまざまな角度からAWSのツールや戦略を組み合わせて効果的に管理する必要があります。この記事では、実際の経験に基づいて、AWS EKSでコストを削減する方法について詳しく説明します。

### 1. AWSの購入戦略を活用する：Savings PlanとReserved Instance
-------------------

AWS EC2（Elastic Compute Cloud）は、On-Demand、Reserved Instance、Savings Planなど、さまざまなコンピューティングインスタンスのタイプを提供しています。その中で、On-Demandは最も柔軟な購入方法で、ユーザーは実際のニーズに応じてインスタンスを起動・停止できます。しかし、On-Demandの価格は比較的高く、長期間稼働するワークロードにはコストがかさみます。コストを削減するためには、長期間使用するインスタンスに対して、Reserved InstanceやSavings Planを選択することができます。もう一つの選択肢としてSpot Instanceもありますが、Spot Instanceはすべてのワークロードに適しているわけではなく、価格が動的に変動し、場合によってはインスタンスが停止される可能性があります。

以下は、AWS EC2の3つの購入戦略の価格比較です：
![](images/2.jpg)

**Savings Plan**は、一定のコンピューティングリソース使用量を約束することで、相応の割引を受けることができる柔軟な価格モデルを提供します。On-Demandモデルに比べて、Savings Planは最大72%のコンピューティングコストを節約できます。Savings Planは、長期にわたってEKSクラスターや継続的なワークロードを使用する場合に最適で、インスタンスタイプやオペレーティングシステム、リージョンに制限がありません。

**Reserved Instance**は、特定のEC2インスタンスタイプに適用される予約インスタンス購入オプションです。1年から3年の使用期間を事前に購入することで、より高い割引を得ることができます。Reserved InstanceはSavings Planに比べて制約が多いですが、特定のインスタンス仕様が明確なワークロード（例えば、データベースや長期サービスなど）には、より多くのコスト削減効果をもたらすことができます。

実際の操作では、ワークロードの特徴に応じて適切な購入戦略を選択できます。長期間安定しているワークロードにはReserved Instanceが適しており、不確定なワークロードにはSavings Planの柔軟性が役立ちます。

![2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2944615/fb1e69f8-0360-18e1-9dbd-5674fd7656d1.jpeg)


### 2. アプリケーションのプロファイリングとRightSizingによる計算リソースの最適化

計算リソースの過剰割り当てを防ぐために、RightSizingは効果的な最適化戦略です。その核心は、各アプリケーションワークロードに適切なコンピューティング仕様を選択し、リソースの無駄を避けることです。

EKSクラスターでは、計算ノードはEC2インスタンスに基づいています。ノードの仕様が大きすぎても小さすぎても、リソースの無駄やパフォーマンス不足を引き起こす可能性があります。RightSizingのプロセスは以下のステップで進められます：

- **既存のワークロードを監視する**：Amazon CloudWatchやPrometheusなどの監視ツールを使用して、CPU、メモリなどの主要な指標を収集し、アプリケーションの実際のリソース使用状況を把握します。
- **過去のデータを分析する**：過去の使用データに基づいて、コンピューティング仕様を調整する必要があるかどうかを評価します。長期間にわたって低使用率のインスタンスについては、仕様を下げることを検討し、リソース制限に頻繁に達しているインスタンスには、仕様の向上を検討します。
- **適切なノード仕様を選択する**：ワークロードの特性に基づいて、適切なEC2インスタンスタイプを選択します。AWSは、計算最適化、メモリ最適化、ストレージ最適化など、さまざまな専用インスタンスを提供しており、異なるニーズに対応しています。

RightSizingを通じて、企業はアプリケーションの正常な動作を確保しながら、不要なリソース支出を削減し、コスト削減を実現できます。

### 3. 定期的なシャットダウン：業務の低負荷時に計算ノードを停止する

多くの企業では、ワークロードが常にピーク状態にあるわけではありません。業務の低負荷時間を特定することで、企業は不要な計算ノードを定期的にシャットダウンし、コストを効果的に削減できます。

AWSは、定期的なシャットダウンを実現するためのさまざまな自動化ツールを提供しています。Amazon EventBridgeやAWS Lambdaを使用して、ビジネスの低負荷時（夜間や週末など）に不要なEC2インスタンスを自動的に停止したり、EKSクラスターのノード数を削減するためのスケジュールタスクを設定できます。

一般的な実践として、EKSクラスターのノードグループに対して定期的なシャットダウンと起動スクリプトを設定します。例えば、毎晩の業務終了後にいくつかのノードを停止し、翌朝に自動的に起動することができます。この戦略は、24時間稼働しない業務アプリケーションに特に効果的です。

特にOn-Demandインスタンスを使用しているユーザーにとって、定期的なシャットダウンは非常に効果的なコスト削減戦略です。計算リソースの使用時間を適切に計画することで、コストを最大限に削減できます。

### 4. クラスターの自動スケールにSpotインスタンスを活用する

AWSのSpotインスタンスは、コスト削減のもう一つの有効な方法です。Spotインスタンスは通常、オンデマンドインスタンスよりもはるかに安価ですが、その不安定さには適切な計画が必要です。EKSクラスターでは、Spotインスタンスを自動スケールリソースの一部として活用できます。

業務のピーク時には、Cluster Autoscalerを設定することで、クラスターが実際の負荷に応じて動的にSpotインスタンスを追加することができます。Spotインスタンスのコストが低いため、企業はこれらのインスタンスを使って、非重要な負荷や中断可能なタスクを処理できます。負荷が軽減されたり、Spotインスタンスが回収された際には、Cluster Autoscalerが自動的にノードを削減し、リソースの無駄を防ぎます。

Spotインスタンスを使用する際の鍵は、ノードグループとワークロードの優先度を適切に構成することです。重要なタスクには引き続きオンデマンドインスタンスを使用し、中断可能な負荷にはSpotインスタンスを割り当てて実行することができます。

### 5. 長時間稼働するPodの代わりにAWS Lambdaを使用する

EKSクラスター内では、一部のPodが長時間稼働し、リソースを占有しているが、タスクを常時処理しているわけではない場合があります。これらのシナリオでは、長時間稼働するPodの代わりにAWS Lambdaを使用してコストを削減することを検討できます。

実際のワークロードでは、一時的なタスクを使用して業務要件を満たすことが多く

、この場合にはPodの代わりにAWS Lambdaを使用できます。Lambdaはサーバーレスコンピューティングサービスで、ユーザーはコードをアップロードするだけで、AWSがコンピューティングリソースを自動的に管理し、オンデマンドでリソースを割り当て、課金します。長時間稼働するPodと比べて、Lambdaは短時間のコンピューティングタスクにより適しており、コストを大幅に削減できます。

ただし、Lambdaはすべてのシナリオに適しているわけではありません。長時間稼働し、継続的に処理する必要があるタスクには、引き続きPodを使用する必要があります。そのため、Lambdaを使用する際は、ビジネスニーズや負荷の特性に基づいて適切な選択を行う必要があります。

Lambdaは、ユーザーが実際の計算時間に対してのみ課金されるサーバーレスコンピューティングサービスです。定期的なタスクや短時間の計算において、Lambdaを使用することで、長時間稼働するPodがリソースを占有することで生じる無駄を回避できます。ほとんどのケースでは、Lambda関数の呼び出しが頻繁でない限り、Lambdaを使用することで大幅なコスト削減が可能です。ただし、呼び出し頻度が高すぎると、コストが増加する可能性があります。

さらに、Lambdaは基盤となる計算リソースを管理する必要がなく、リクエストに応じて自動的にスケールアップするため、保守や管理のコストも大幅に削減されます。一次的な計算タスクや定期的なタスクの一部をLambdaに移行することで、サービスの安定性を維持しつつ、リソース使用をさらに最適化し、不要なコストを削減できます。

![3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2944615/29261873-b966-8f77-723b-5d1f822b8a7e.jpeg)

### 結論

AWS EKSでのコスト削減は、多面的な最適化プロセスです。AWSの購入戦略を活用し、アプリケーションのリソース使用を最適化し、定期的なシャットダウン戦略を実施し、Spotインスタンスを組み合わせてスケールし、長時間稼働するPodの代わりにLambdaを使用することで、企業はアプリケーションのパフォーマンスを維持しながら、クラウドコンピューティングのコストを最大限に削減できます。

これらの戦略は、企業の支出削減をサポートするだけでなく、EKSクラスター全体の運用効率を向上させ、リソースの効率的な利用を実現します。実際の操作では、企業は自社のビジネス特性に応じて最適化計画を柔軟に調整し、すべての投資が最大の価値をもたらすようにする必要があります。