ピークパフォーマンスを実現する最適なEC2インスタンスサイズの選び方
ワークロードのCPU、メモリ、ストレージ、ネットワーク、コストのシグナルをAWSインスタンスファミリーにマッチングさせてEC2インスタンスサイズを選択します。
ピークパフォーマンスを実現する最適なEC2インスタンスサイズの選び方
適切なAmazon EC2インスタンスサイズを選択することは、パフォーマンスリスクと無駄なコストのバランスです。インスタンスが小さすぎると、負荷がかかったときにアプリケーションが遅くなります。大きすぎると、ワークロードが使用しないCPU、メモリ、ネットワーク容量に対して支払うことになります。
汎用からコンピューティング最適化、メモリ最適化まで、異なるインスタンスファミリー間の微妙な違いを理解することが、AWS上での効率的なクラウドリソース管理への第一歩です。
1. EC2インスタンスファミリーの理解
AWSはEC2インスタンスを、主要なリソース割り当て(CPU、メモリ、ストレージ、ネットワーキング)に基づいてファミリーに分類しています。ワークロードの主要なリソース要件を正しいファミリーにマッチングさせることが、ベースラインパフォーマンスにとって重要です。
A. 汎用インスタンス(M、Tファミリー)
これらのインスタンスは、コンピューティング、メモリ、ネットワーキングリソースのバランスを提供し、多くのWebサーバー、小規模から中規模のデータベース、開発環境に最適です。
- Mファミリー(例:
m6i、m7g): バランスの取れたワークロードに対して安定したスケーラブルなパフォーマンスを提供します。 - Tファミリー(例:
t3、t4g): これらはバースト可能インスタンスです。ベースラインのCPUパフォーマンスを提供しますが、必要に応じてCPUクレジットを利用してベースラインを超えてバーストできます。低トラフィックのWebアプリケーションや、持続的な高いCPUを必要としないバックグラウンドサービスなど、変動するトラフィックパターンを持つワークロードに最適です。
Tインスタンスのヒント: CPUクレジット残高を注意深く監視してください。インスタンスが一貫してクレジットを使い果たすと、ベースラインパフォーマンスにスロットリングされます。このシナリオでは、Mファミリーのインスタンスに移行する必要があります。
B. コンピューティング最適化インスタンス(Cファミリー)
アプリケーションがCPU集約型(高パフォーマンスWebサーバー、バッチ処理、ビデオエンコーディング、科学モデリングなど)の場合、Cファミリー(c6i、c7g)はコンピューティングパワーに対して最高の価格/パフォーマンス比を提供します。
C. メモリ最適化インスタンス(R、Xファミリー)
これらは、大規模なリレーショナルデータベース、インメモリキャッシュ(RedisやMemcachedなど)、大規模データセットへの高速アクセスを必要とする高パフォーマンス分析エンジンなど、メモリ集約型タスク向けに設計されています。
- Rファミリー(例:
r6i、r7a): 高いメモリ対vCPU比。
D. ストレージ最適化インスタンス(I、Dファミリー)
NoSQLデータベース(Cassandra、MongoDB)やデータウェアハウジングアプリケーションなど、ローカルストレージ上の非常に大規模なデータセットに対する非常に高いシーケンシャル読み取り/書き込みアクセスを必要とするワークロードに使用されます。
2. ワークロード要件の分析
選択したファミリー内で適切なサイズを選択するには、アプリケーションが実際に何を必要としているかを定量化する必要があります。これには通常、既存の環境での主要業績評価指標(KPI)の監視、または負荷テスト中の監視が含まれます。
A. CPU使用率分析
アプリケーションがCPUバウンドかどうかを判断します。高い持続的なCPU使用率(一貫して70〜80%以上)は、より多くの処理能力が必要であることを示します。バースト可能なワークロードの場合、平均CPU使用率をCPUクレジット使用量に対して監視します。
実行可能な手順: ターゲット環境が持続的なアプリケーション(プライマリAPIゲートウェイなど)の場合、Tインスタンスを避け、MやCなどの安定したファミリーを選択します。
B. メモリ消費量(RAM)
メモリは、Javaアプリケーションや大規模キャッシュなどのアプリケーションにとってしばしばボトルネックになります。過度のスワッピングやページング(ディスクスペースを仮想メモリとして使用)が観察される場合、インスタンスはメモリ不足です。
主要な指標: ピーク負荷時にアプリケーションが積極的に使用しているRAMの割合を測定します。データベースやキャッシュソフトウェアのニーズに合ったメモリ対vCPU比を持つインスタンスを選択します(例:メモリが最重要の場合はRファミリー)。
C. ストレージとI/O要件
アプリケーションが頻繁にディスクに読み書きする場合(トランザクションデータベースなど)、単なるローカルディスクサイズではなく、1秒あたりの入出力操作(IOPS)とスループットに焦点を当てます。
- インスタンスストレージ(エフェメラル): 一部のインスタンス(Iファミリーなど)は、高性能なローカルNVMeストレージを提供します。これは一時的なデータに最適ですが、停止/終了時に失われます。
- Elastic Block Store(EBS): 永続ストレージの場合、インスタンスタイプが必要なEBSボリュームパフォーマンス階層(例:
gp3vs.io2Block Express)をサポートしていることを確認します。
D. ネットワーク帯域幅
大量のデータ転送を処理するアプリケーション(メディア処理、大規模データストリーミングなど)の場合、ネットワークスループットが重要になります。多くの最新インスタンスはEnhanced Networking(ENA)をサポートしていますが、達成可能な最大帯域幅はインスタンスサイズに応じてスケーリングします。
- ヒント: 小さいインスタンスはしばしばネットワーク帯域幅が制限されています。高スループットのアプリケーションを扱う場合は、常にネットワークパフォーマンス仕様を確認してください。
3. サイジング戦略:テストから本番へ
サイジングプロセスは反復的であり、データに基づいて行う必要があります。
ステップ1:小規模インスタンスでベースラインを確立
選択したファミリーのm6g.largeまたは同等のインスタンスから小規模に開始します。アプリケーションをデプロイし、予想されるピークトラフィックを模倣した標準化された負荷テストを実行します。
ステップ2:ボトルネックを特定し、垂直にスケーリング
CloudWatchメトリクス(CPU使用率、メモリ使用率、ネットワークイン/アウト、ディスク読み取り/書き込みIOPS)を使用して制約を見つけます。
| 見つかったボトルネック | 推奨されるアクション | ターゲットファミリー/サイズ増加 |
|---|---|---|
| 高いCPU% | より多くの処理能力が必要 | 次の大きいサイズまたはCファミリーインスタンスに移動。 |
| 高いメモリ% | より多くのRAMが必要 | 次のサイズに移動、場合によってはRファミリーインスタンス。 |
| EBSレイテンシが高い | ストレージが遅い | EBSボリュームパフォーマンスを向上させるか、ローカルストレージが必要な場合はIファミリーインスタンスに移動。 |
ステップ3:垂直スケーリングの例
m6i.xlarge(4 vCPU、16 GiB RAM)から開始し、リソースを2倍にする必要があると判断した場合:
- 垂直スケールアップ:
m6i.2xlarge(8 vCPU、32 GiB RAM)に移動。 - 水平スケールアウト(ベストプラクティス): ステートレスサービスを実行している場合、推奨される方法は、ロードバランシングを導入し、2つの
m6i.xlargeインスタンスをデプロイすることです。これにより、冗長性とスケーラビリティが提供されます。
垂直スケーリングに関する警告: 簡単ですが、はるかに大きなインスタンスサイズに移動すると、アプリケーションがすべての新しいリソースを均一に利用していない場合、予期しないオーバーヘッドやリソースの不均衡が発生する可能性があります。大幅な垂直ジャンプの後は常にテストしてください。
4. AWS Gravitonプロセッサの活用
インスタンスを選択する際は、プロセッサアーキテクチャを考慮してください。AWS GravitonプロセッサはArmアーキテクチャを使用し、m7gやc7gなどのgサフィックスが付いたファミリーに表示されます。オペレーティングシステム、ランタイム、ライブラリ、コンテナイメージがArmをサポートしている場合、これらはしばしば強力な価格パフォーマンスを提供します。
スタックが互換性がある場合は、x86をデフォルトと仮定するのではなく、負荷テストにGravitonを含めてください。
適切なサイジングを継続的に維持する
最適なEC2インスタンスサイズの選択は、経験的データに基づいた継続的な最適化プロセスです。まず、主要なリソースニーズ(CPU、メモリ、ストレージ)を正しいEC2ファミリーに合わせます。次に、負荷テスト中にCloudWatchなどの監視ツールを使用して、ピークパフォーマンス目標を達成するために必要なそのファミリー内の正確なサイズを経験的に決定します。過剰プロビジョニングを避け、垂直および水平スケーリング戦略の両方を慎重にテストすることで、アプリケーションがAWS上で効率的かつコスト効果的に実行されることを保証します。