タスク定義に基づいてタスクまたはサービスを実行できるようです。タスクとサービスの違いと類似点は何ですか?タスクを作成するときに「タスクグループ」を指定できるが、サービスは作成できないという事実にヒントはありますか?タスクとサービスは階層的にタスク定義のインスタンス化が等しいのですか、それともサービスはタスクで構成されていますか?
タスクDefinitionは1つ以上のコレクションcontainer configurations。一部のタスクには1つのコンテナのみが必要な場合がありますが、他のタスクには2つ以上の潜在的にリンクされたコンテナが同時に実行する必要がある場合があります。タスク定義では、使用するDockerイメージ、公開するポート、割り当てるCPUとメモリの量、ログの収集方法、環境変数の定義を指定できます。
Taskは、タスクを直接実行するときに作成され、コンテナ(タスク定義で定義されている)を停止または終了するまで起動し、その時点で自動的には置き換えられません。タスクを直接実行することは、CRONを介して達成された例として、短時間の実行ジョブに最適です。
サービスは、常にいくつかのタスクが常に実行されていることを保証するために使用されます。エラーのためにタスクのコンテナが終了した場合、または基礎となるEC2インスタンスが失敗して置き換えられた場合、ECSサービスは失敗したタスクを置き換えます。これがClustersを作成する理由です。そのため、使用するCPU、メモリ、ネットワークポートに関して、サービスに十分なリソースがあります。 。私たちにとって、タスクが実行されている限り、どのインスタンスでタスクが実行されるかは実際には関係ありません。サービス構成は、タスク定義を参照します。サービスは、タスクの作成を担当します。
サービスは通常、Webサーバーなどの長時間実行されるアプリケーションに使用されます。たとえば、オレゴン州(us-west-2)でNode.JSを使用してWebサイトを展開した場合、高可用性のために、少なくとも3つのタスクが3つのアベイラビリティーゾーン(AZ)で実行されます。失敗した場合、別の2つがあり、失敗したものは置き換えられます(self-healing!と読みます)。これを行うには、サービスを作成します。クラスター内に6つのEC2インスタンス(AZごとに2つ)があった場合、サービスはCPU、メモリ、およびネットワークリソースも考慮しながら、できる限りゾーン間でタスクを自動的に分散します。
更新:
これらのことを階層的に考えることが役立つかどうかはわかりません。
もう1つの非常に重要なポイントは、ロードバランサーを使用するようにサービスを構成できることです。そのため、タスクを作成するとき、つまりタスク定義で定義されたコンテナーを起動するときに、サービスはコンテナーのEC2インスタンスをロードバランサーに自動的に登録します。ロードバランサーを使用するようにタスクを構成することはできません。サービスのみができます。