DockerとECSは初めてなので、適切な用語を使用しない可能性があります。明確にする必要がある場合はお知らせください。
私のシナリオ:私はいくつかの独立したコンテナを持っています。各コンテナはWebサイトを表します。各コンテナは常に実行する必要がありますが、長期間使用されない場合があります(CPU使用率がゼロなど)。説明のために、10個のコンテナーがあり、各コンテナーに最大200MB RAMおよび最大1vCPUが必要であると仮定します。さらに、10個のコンテナーすべてからの合計負荷を処理するために必要なのは合計2vCPUのみであると仮定します(彼らは同時に高負荷を見ないからです)。
Fargate Option 1:コンテナごとに異なるタスクを作成します:(2GB、1vCPU)x 10(2GBは最小RAM))。
ファーゲートオプション2:すべてのコンテナーを使用して単一のタスクを作成します:(2GB、2vCPU)。
EC2オプション:コンテナごとにタスクを作成し、すべて単一のEC2インスタンスにマッピングします。
私が正しく理解していれば、ファーゲートオプション2の方がはるかに安いファーゲートオプション1よりも、最大2vCPUしか必要ないことがわかっているためです。ただし、オプション2は、停止/開始/スケーリングされるタスクであり、コンテナーを互いに独立したものとして扱いたいため(たとえば、停止/開始/スケーリングを独立して)、柔軟性が大幅に低下します。
さらに、私が正しく理解していれば、EC2オプションは、コンテナーごとにタスクを実行する柔軟性と、実際に必要なリソースに支払う柔軟性の両方を得ることができる唯一の方法です。
したがって、リソース使用率が低い独立したコンテナーの場合、現時点ではFargateは適切ではないようです。
私の理解は正しいですか?
正解です。同じvCPU/RAMの量で、FargateはEC2よりも高価です。
例えば:
最小のFargateコンテナ、0.25vCPUおよび0.5GB RAMコスト$ 0.019/hr、それは約$ 14 /コンテナーあたりの月額です。
1つのvCPUが必要な場合、RAMの最小量は2GBです(Fargateがサポートする構成)を参照)と突然価格は約$ 55 /コンテナー/月です。あなたの場合、10タスクで$ 550 /月になります。
一方、すべてを1つのt3.small(2 vCPU、 2 GB RAM)コストは$ 0.0208/hrで、これは約$ 15 /月です。負荷をサポートするために2つまたは3つのt3.smallインスタンスが必要な場合でも、Fargateよりもはるかに安価です。
すべてのコンテナを1つのFargateタスクにまとめると(Option 2)で提案されているように、EC2ECSを使用するよりもさらにコストがかかります。さらに、1つのタスクに複数の独立したコンテナーがあることによる複雑さ。問題を起こす価値はありません。
まとめると、コンテナーを24時間365日実行したいが、コンテナーが常に完全に使用されていない場合は、EC2ベースのECSクラスターで実行する方がはるかに良いでしょう。
Fargateを使用すると、柔軟性に割増料金を支払うことができます。
コンテナーが短時間実行されてタスクを完了してから終了する場合、または要求に基づいてコンテナーが拡大および縮小される場合は、Fargateで実行する方がはるかに簡単です-基になるEC2を拡大および縮小する必要はありません負荷をサポートするクラスター。
多くの場合、vCPU/RAMあたりのコストが高くても、Fargateで実行した方がうまくいきます。いくつかの処理のために、一度に数百のコンテナのバッチを1日に数回スピンアップし、各コンテナは約10分間しか実行されません。各実行の前にEC2/ECSクラスターをスケールアップする必要がある場合は、クラスターが落ち着くのを待ち、障害に対処してから、バッチジョブを実行してから再度スケールダウンして、オーバーヘッドが非常に大きくなり、バッチ処理にはるかに時間がかかります。
ここでファーゲートは私たちにとって素晴らしい働きをします。ただし、常時接続のサービスには使用しません。
それが役に立てば幸い:)
ECSの代わりにEKS(Elastic Kubernetes Service)を使用することもできます。
Kubernetesを使用すると、ポッド、サービス、ボリュームなどをさらに制御できます。ただし、ECSよりも安いかどうかはわかりません。