AWS EC2を始めたばかりです。EC2はリモートコンピューターのようなもので、私がやりたいことがほとんどすべてできると理解しています。その後、ECSについて知りました。私はそれがDockerを使用していることを知っていますが、これら2つの間の関係について混乱しています。
ECSはEC2のDockerインストールにすぎませんか?EC2がすでにあり、ECSを開始した場合、2つのインスタンスがあることを意味しますか?
AWS EC2を始めたばかりです。EC2はリモートコンピューターのようなもので、私がやりたいことがほとんどすべてできると理解しています。その後、ECSについて知りました。私はそれがDockerを使用していることを知っていますが、これら2つの間の関係について混乱しています。
ECSはEC2のDockerインストールにすぎませんか?EC2がすでにあり、ECSを開始した場合、2つのインスタンスがあることを意味しますか?
回答:
あなたの質問
ECSはEC2にドッカーをインストールするだけですか?EC2を既に持っている場合、ECSを開始しますが、2つのインスタンスがあることを意味しますか?
いいえ。インスタンスのAWS ECS
単なる論理グループ(クラスター)でEC2
あり、ホストとして機能するすべてのEC2
インスタンスの一部です。つまり、ECSはコマンドを送信して、コンテナーを起動できます()。すでにEC2をお持ちで、ECSを起動しても、インスタンスは1つです。(AWS ECS Container Agentをインストールして)EC2をECSに追加/登録すると、EC2はクラスターの一部になりますが、EC2の単一のインスタンスになります。ECS
Docker
EC2
EC2が登録されていない(クラスターに追加されていない)Amazon ECSは何の役にも立ちません。
TL; DR
概要
EC2
-単にリモート(仮想)マシンです。 ECS
はElastic Container Service
、コンピュータクラスタの基本的な定義に従って、ECS
基本的にはEC2
マシン/インスタンスの論理グループです
。技術的に言えばECS
、EC2
インスタンスリソース(ストレージ、メモリ、CPUなど)を効率的に使用および管理するための単なる構成です。さらに単純化するために、インスタンスを追加Amazon ECS
せずにを起動EC2
した場合、何もできない、つまり何もできないということになります。ECS
1つ(または複数)のEC2
インスタンスが追加されたときにのみ意味があります。
ここで次に混乱するのは、コンテナの用語です。これは完全に仮想化されたマシンインスタンスではありません。Dockerは、コンテナインスタンスの作成に使用できるテクノロジの1つです。Docker
は、私たちのマシンにインストールできるユーティリティであり、これをDocker
ホストにし、このホストでコンテナを作成できます(仮想マシンと同じですが、はるかに軽量です)。要約すると、これECS
はEC2インスタンスのクラスタリングDocker
に関するものであり、これらの(EC2
)ホスト上でコンテナ/インスタンス/仮想マシンをインスタンス化するために使用します。
必要なのは、を起動しECS
、EC2
必要なだけインスタンスを登録/追加することだけです。EC2インスタンスを追加/登録できます。必要なのは、EC2インスタンス/マシンで実行されているAmazon ECS Container Agentだけです。これは、特別なAMI(Amazon Machine Image)を使用して手動または直接実行できます。 Amazon ECSコンテナエージェント。新しいEC2インスタンスの起動中に、エージェントはそれをデフォルトのECSクラスターに自動的に登録します。
コンテナエージェントインスタンス(のそれぞれで実行されているEC2
内のインスタンス)Amazon ECS
クラスタは、Amazon ECSにインスタンスの現在実行中のタスクとリソース使用率に関する情報を送信し、起動すると、それはアマゾンECSからの要求を受信するたびに作業を停止します。詳細については、「Amazon ECSコンテナエージェント」を参照してください。設定すると、作成された各コンテナインスタンス(EC2
マシン/ノードに関係なく)Amazon ECS
はの群れのインスタンスになります。
詳細情報–このドキュメントのステップ10をお読みください:Amazon ECSコンテナインスタンスの起動:
コンテナーインスタンスのAMIを選択します。Amazon ECSに最適化されたAMI、またはCoreOSやUbuntuなどの別のオペレーティングシステムを選択できます。Amazon ECS最適化AMIを選択しない場合は、「Amazon ECSコンテナエージェントのインストール」の手順に従う必要があります。
デフォルトでは、コンテナインスタンスはデフォルトのクラスタで起動します。デフォルトではなく独自のクラスターで起動する場合は、[詳細]リストを選択し、次のスクリプトを[ユーザーデータ]フィールドに貼り付けます。your_cluster_nameをクラスターの名前に置き換えます。
#!/bin/bash echo ECS_CLUSTER=your_cluster_name >> /etc/ecs/ecs.config
または、Amazon S3にecs.configファイルがあり、コンテナインスタンスロールへのAmazon S3読み取り専用アクセスを有効にしている場合は、[詳細]リストを選択し、次のスクリプトを[ユーザーデータ]フィールドに貼り付け、your_bucket_nameをAWS CLIをインストールし、起動時に設定ファイルを書き込むためのバケット。Noteこの構成の詳細については、「Amazon S3でのコンテナインスタンス構成の保存」を参照してください。
#!/bin/bash yum install -y aws-cli aws s3 cp s3://your_bucket_name/ecs.config /etc/ecs/ecs.config
さらに明確にするために、を使用EC2
せずに単一のインスタンスでコンテナを作成できますECS
。コンテナ化テクノロジのいずれかをインストールしDocker
、create containerコマンドを実行しEC2
て、Docker
ホストをホストとして設定し、Docker
必要な数(またはEC2
のリソースで許可されている数)のコンテナを用意します。
簡単に言うと、EC2は従業員と同じように、ECSはマネージャーです。このマネージャー(ECS)の下のすべての従業員(EC2)は「Docker」タスクを実行でき、マネージャーは「docker」もかなりよく理解しています。したがって、「ドッカー」リソースが必要なときはいつでも、マネージャに表示されます。マネージャーはすでにすべての従業員からのステータスを持っています(EC2)は、どの従業員がタスクを実行する必要があるかを決定します。
さて、あなたの質問に戻ると、「従業員」のいないマネージャーは意味がありません。
EC2を使用すると、ほとんどすべての目的に使用できる個々のインスタンスを起動できます。ECSはコンテナーサービスです。つまり、コンテナーアプリケーションを起動する準備ができているインスタンスを起動します。2つのサービスの主な違いは、EC2では、選択した方法で(手動で、CMツールまたはその他の方法を使用して)各インスタンスを個別に管理する必要があることです。アプリケーションをデプロイし、サーバー間の接続を自分で維持します。ECSを使用すると、コンテナーアプリの展開基盤として機能するマシンのクラスターを起動できます。これにより、クラスター内のすべてのインスタンスを、コンテナーワークロードで使用可能な1つの大きなインスタンスとして扱うことができます。
そして、あなたの質問に答えるために-インスタンスなしでECSクラスターを起動できますが、その上で何も実行できなくなります。ECSクラスター内にEC2インスタンスを登録すると、コンテナーを実行する準備が整います。つまり、肝心なのは-1つのインスタンスでECSとEC2の両方を使用できますが、これらのサービスが構築された実際のユースケースではありません。
簡単に言えば、Elastic Container Service(ECS)はDockerコンテナーオーケストレーションサービスです。
自動スケーリング対応の「サービス」またはアドホックの「タスク」として、1つ以上のDockerイメージを実行するように要求できます。
サービスとタスクは「クラスター」上で実行されます。元々、クラスターは、ECS Cluster Agentを実行する1つ以上の事前構成されたEC2サーバーのグループでした。Cluster AgentはEC2サーバー上のコンテナをスケジュールします。これらのEC2サーバーがEC2インスタンスリストに表示され、通常のEC2の1分あたりの料金で課金されます。通常のEC2サーバーと同じようにSSHで接続することもできます。より多くのサービスまたはタスクを実行するためのより多くの容量が必要な場合、またはEC2の障害に対する回復力が必要な場合は、EC2サーバーの数が多くなります。
2017年11月頃、AWSはECS Fargateを追加しました。これで、クラスターはEC2ノードをプロビジョニングせずに「サーバーレス」で実行できます。タスクまたはサービスが動作するために必要なCPUとメモリの量を定義するだけです。つまり、EC2ではなく、CPUとメモリの時間に対して支払うだけです。
主な違いは、ECSが提供するFargateインスタンスです。