はじめに
多岐にわたるAWSのサービスの中で、コンテナオーケストレーションサービスであるAmazon Elastic Container Service (ECS) は、モダンなアプリケーション開発の核心をなすものとして注目を浴びています。ECSは、コンテナの運用を容易にするためのマネージドサービスで、このECSを使用する際に、ユーザーはデータプレーンとしてEC2またはFargateのどちらを選択するかを決める必要があります。この記事では、ECSのデータプレーンとして選択可能なEC2とFargateについて比較します。
ECS on EC2
ECS on EC2のアーキテクチャでは、ECSがコントロールプレーンとして機能し、EC2がデータプレーンとして機能します。EC2上にECS Taskを起動し、そのTask上でコンテナを実行します。
コスト面
ECS on EC2を使用する際のコストは、主に次の2つの部分に発生します。
-
サービス利用コスト
EC2インスタンスやEBSボリュームの利用に関連するコストです。特に、EC2インスタンスは、起動している時間に応じて課金されます。そのため、キャパシティプラニングが適切に行われている場合、コストを抑えることができます。 -
運用コスト
EC2インスタンスのメンテナンスに関連するコストです。具体的には、OSのアップデートやセキュリティパッチの適用など、ユーザーの責任で行わなければならないタスクが発生します。
拡張性
ECS on EC2の拡張性には次の特徴があります。
-
デプロイの速さ
EC2のホスト上にイメージキャッシュを保持できるため、新しいコンテナのデプロイが迅速に行えます。 -
水平スケーリング
キャパシティプラニングの制限により、確保したキャパシティ内でしか水平スケーリングが行えません。 -
リソース拡張
EC2のサイズ変更やインスタンスファミリーの選択など、リソースの変更や拡張が容易です。
信頼性
EC2上での運用では、次の方法で障害調査やトラブルシューティングが可能です。
-
SSHアクセス
何か問題が発生した場合、直接SSHでEC2インスタンスにアクセスして調査ができます。 -
System Manager
AWSのSystem Managerを使用すると、SSHを使用せずにEC2インスタンスにアクセスすることができます。
ECS on Fargate
ECS on Fargateの場合、ECSはコントロールプレーンとして機能し、Fargateがデータプレーンとして動作します。この構成では、物理的なサーバーの管理が不要となり、ECS Taskを直接Fargate上で実行することができます。
コスト面
ECS on Fargateを使用する際のコストは次の要因に関連しています。
-
サービス利用コスト
Fargateの利用に関連するコストが主体です。特に、vCPUやメモリリソースの使用に応じて課金されます。コンテナイメージを取得してからECS Taskが終了するまでの期間が課金の対象となります。EC2と比較して利用料金は2~3割増しのような目安です。 -
運用コスト
サーバーレスの特性上、伝統的なインフラの保守や管理に関連するコストは大幅に削減されます。
拡張性
ECS on Fargateの拡張性には次の特性があります。
-
デプロイ速度
コンテナごとにENI(Elastic Network Interface)がアタッチされるため、やや遅延が生じることがあります。また、イメージキャッシュの機能がないため、コンテナの起動時に毎回イメージを取得する必要があります。 -
水平スケーリング
Fargate自体がリソースの調達を自動的に行うため、迅速なスケーリングが可能です。
信頼性
ECS on Fargateの運用では、ECS Execを利用して障害調査やトラブルシューティングが可能です。ECS Execを利用することで、Fargate上で動作するコンテナに対して直接コマンドを実行することができます。
EC2とFargateのどちらを選択すれば良いか
EC2とFargateはそれぞれ異なるユースケースがあります。
大容量のデータをローカルに保持する必要がある場合
一部のアプリケーション、特にブロックチェーンのようなものでは、大量のデータをローカルに保持する必要があります。このような場合、物理的なストレージの柔軟性と拡張性が求められるため、EC2が適しています。
機械学習が必要な場合
機械学習モデルのトレーニングや推論には高度な計算リソースが必要です。特に、GPUのような特殊なハードウェアを使用する場合、EC2のインスタンスタイプを選択することで、これらの要件を満たすことができます。現在のFargateはGPUをサポートしていないため、このような用途の場合、EC2が適しています。
高いリソース集約率を実現したい場合
EC2上にサービスを稼働する場合の「高いリソース集約率」とは、インスタンスに割り当てられたCPUとメモリを無駄なく使うことを意味します。高いリソース集約率を実現するためには、処理に応じて適切なインスタンスタイプを指定する必要があります。Fargateを利用する場合はインスタンスタイプの指定が不要であり、自動的にリソースを最適化します。
参考