回答:
タスクの定義は、 1つの以上の集合体であるコンテナ構成。一部のタスクは1つのコンテナーのみを必要とする場合がありますが、他のタスクは2つ以上の潜在的にリンクされたコンテナーを同時に実行する必要がある場合があります。タスク定義では、使用するDockerイメージ、公開するポート、割り当てるCPUとメモリの量、ログの収集方法、環境変数の定義を指定できます。
A タスクは、それらがされている時点で、あなたは直接タスクを実行すると、それらが停止されるまで(タスク定義で定義されている)が起動コンテナ(s)は、作成されるか、または自分自身で終了され、自動的に置き換えられません。タスクを直接実行することは、おそらくCRONを介して実行された例として、短時間の実行ジョブに理想的です。
A サービスは、あなたが常にタスクのいくつかの数持っていることを保証するために使用されるすべての回で実行されているが。エラーが原因でタスクのコンテナーが終了するか、基になるEC2インスタンスが失敗して置き換えられた場合、ECSサービスが失敗したタスクを置き換えます。これが、使用するCPU、メモリ、およびネットワークポートの観点から、サービスに十分なリソースがあるようにクラスターを作成する理由です。私たちにとって、タスクが実行されている限り、タスクがどのインスタンスで実行されるかは重要ではありません。サービス構成はタスク定義を参照します。サービスは、タスクの作成を担当します。
サービスは通常、Webサーバーなどの長時間実行されるアプリケーションに使用されます。たとえば、Node.JSを使用してWebサイトをオレゴン(us-west-2)に展開した場合、高可用性のために、3つのアベイラビリティーゾーン(AZ)にわたって少なくとも3つのタスクを実行するとします。1つが失敗した場合、別の2つがあり、失敗した1つが置き換えられます(それを自己回復として読み取ります)!)。これを行うには、サービスを作成します。クラスター内に6つのEC2インスタンスがあり、AZごとに2つある場合、サービスは、CPU、メモリ、ネットワークリソースも考慮しながら、可能な限りゾーン間でタスクを自動的に分散します。
更新:
これらのことを階層的に考えることが役立つかどうかはわかりません。
もう1つの非常に重要なポイントは、ロードバランサーを使用するようにサービスを構成できるため、サービスがタスクを作成するとき、つまり、タスク定義で定義されたコンテナーを起動するときに、サービスがコンテナーのEC2インスタンスをロードバランサーに自動的に登録することです。ロードバランサーを使用するようにタスクを構成することはできません。サービスのみを構成できます。
タスク定義:
これは、実行するDockerコンテナーを説明するブループリントであり、アプリケーションを表します。これにはいくつかのタスクが含まれます。
サービス:
タスク定義のインスタンス。また、任意の時間に実行された1つのタスク定義、自動スケーリング、および負荷分散からの最小および最大タスクも定義します。
ECSコンテナインスタンス:
これは、DockerとECS Container Agentが実行されているEC2インスタンスです。エージェントはECSとインスタンス間の通信を処理し、実行中のコンテナーのステータスを提供し、実行中の新しいコンテナーを管理します。
関係: