1. ホーム
  2. 記事一覧
  3. ECSの基本を理解する(クラスター、サービス、タスク定義、タスク)

2023.07.22

ECSの基本を理解する(クラスター、サービス、タスク定義、タスク)

こちらの記事では、AWSのコンテナオーケストレーションサービスであるECS(Amazon Elastic Container Service)の基本、クラスター、サービス、タスク定義、タスクについて解説します。

ECS(Amazon Elastic Container Service)とは

Amazon Elastic Container Service

Amazon Elastic Container Serviceは、AWSが提供するフルマネージドのコンテナオーケストレーションサービスです。ECSを利用することで、Dockerコンテナのスケーリング、実行、停止、管理をより簡単に行うことができます。

ECSでは、「EC2」「Fargate」、AWS外のオンプレミス環境で実行されるコンテナ環境をECSで簡単に管理できる****Amazon ECS Anywhereの**3つの起動タイプをコンテナ実行環境としてサポートしています。

コンテナオーケストレーション

コンテナオーケストレーションは、複数のコンテナを自動で管理するためのプロセスやツールのことを指します。主な機能として、コンテナのデプロイメント(配置)、スケーリング(拡張・縮小)、ネットワーキング、ロードバランシングなどがあります。

そして、コンテナオーケストレーションを実現するために使用するのがコンテナオーケストレーションツールです。ECSをはじめ、代表的なコンテナオーケストレーションツールにはKubernetesやDocker Swarmなどが挙げられます。これらはオーケストレータ(**コントロールプレーン)**とも呼ばれます。

これらのツールを使うことで、管理者は複数のコンテナホストに対して一つ一つ手動でコマンドを実行する必要がなくなり、より効率的にコンテナを運用、管理することが可能になります。

逆に言えば、コンテナオーケストレーションツールを使用しないと複数のコンテナホストを手動で管理することになり、複数あるコンテナに対して一つずつコマンドを実行する必要が出てくるため、非効率かつオペレーションミスにもつながってしまいます

ECSを利用するメリットとは?

ECSはAWSが提供するフルマネージドのコンテナオーケストレーションサービスです。CodeBuildやCodePipeline、Systems Manager Parameter Storeといった様々なAWSのサービスとの連携はマネージドサービスが実行してくれるため、ECSは非常に扱いやすいサービスとされています。

また、ECSはリージョン内の複数のAZ(アベイラビリティーゾーン)をまたいでコンテナを実行することができるため、より可用性の高い運用が可能です。

このように、AWSの各サービスとの連携を簡単に実現しながら、複数のコンテナを高い可用性を保って実行できるのはECSの魅力の一つと言えます。

ECSの主な構成要素

ECSを利用する上で基本となる構成要素として、「クラスター」、「サービス」、「タスク定義」、「タスク」の4つがあります。これらの要素はECSを利用する際に必要な設定項目になるため、図を利用しながら解説していきます。

クラスター

AWS公式

クラスターとは、後述する「サービス」と「タスク」を実行する基盤のことです。図で示すと赤枠の部分に相当します。

実際にクラスターを作成する際には、以下の項目を設定していきます。

  • クラスター名
  • どのVPCとサブネットを使用するのか?
  • 利用するインフラの種類(Fargate、EC2インスタンス、オンプレミスの仮想マシンまたはサーバー)

尚、設定項目については新しいコンソールと旧コンソールで違いがあるため、実際に触れる際には注意が必要です。

サービス

AWS公式

サービスとは、クラスター内で実行するタスク(コンテナ群)を管理する役割を持っています。

サービスでは、どのタスク定義を使用して、どのECSクラスターを使用するのか?などを決めることができます。

そして、起動タイプとしてEC2を選択しコンテナを仮想サーバー上で動作させるのか、Fargateを選択してコンテナをサーバーレスで動作させるのかを設定することができます。

また、どのくらいのタスク数が必要なのか?を定義することができるため、必要なタスクの数を3とした場合、起動後は3つのタスク数を自動で維持、管理してくれます。これにより、万が一障害が発生してサービスが停止してしまった場合にも、指定したタスクを自動で再作成してくれるという利点があります。

タスク定義

AWS公式

タスク定義とは、どのようなコンテナを作成するのか?を定義したものです。タスク定義は一度作成すると設定内容を変更することはできないため、変更したい場合は新しいタスク定義を別で作成するか、リビジョンと呼ばれるバージョン単位で内容を上書きする必要があります。

実際の設定項目の一部は以下のとおりです。

設定要素内容
ファミリー名タスク定義の名前
コンテナ名起動するコンテナ名
イメージURI使用するコンテナイメージのURI
ポートマッピングでのポート番号使用したいポート番号の指定
環境変数の設定環境変数の内容を設定
ボリューム名コンテナへアタッチするボリューム
実行ロールの設定タスクがAWSサービスにAPIリクエストを行うために使用できるIAM ロール。
ネットワークモードの設定default、bridge、Host、awsvpc、None

このタスク定義で設定した内容をもとにして、タスクと呼ばれるコンテナ群は作成されます。

また、ポートマッピングで使用するポートマッピングのポート番号を指定しなかった場合、動的にポート番号が割り当てられます。

タスク

タスクとは、先述したタスク定義をもとにして起動したコンテナの集まりのことです。

一つのタスク内では複数のコンテナを起動することもできます。例えばNginxなどのWebサーバーと、Gunicornなどのアプリケーションサーバーを一つのタスク内で実行する、といったことも可能です。

タスクのどれかが障害などで停止したりした場合には、サービスで設定した必要なタスク数をもとに自動的に新しいタスクが起動します。これにより、サービス内の希望するタスク数を維持することができます。

まとめ

こちらの記事では、ECSにおける基本的な要素、(クラスター、サービス、タスク定義、タスク)について解説しました。

  • クラスターは「サービス」と「タスク」を実行する基盤のこと
  • サービスは、クラスター内で実行するタスク(コンテナ群)を管理する役割を持っている
  • タスク定義とは、どのようなコンテナを作成するのか?を定義したもの
  • タスクとは、タスク定義をもとにして起動したコンテナの集まりのこと

それぞれの要素について図を見ながらイメージしていただき、ECSの基本的な4つの要素について少しでも理解に繋がれば幸いです。

エンベーダー編集部

エンベーダーは、ITスクールRareTECHのインフラ学習教材として誕生しました。 「遊びながらインフラエンジニアへ」をコンセプトに、インフラへの学習ハードルを下げるツールとして運営されています。

RareTECH 無料体験授業開催中! オンラインにて実施中! Top10%のエンジニアになる秘訣を伝授します! RareTECH講師への質疑応答可

関連記事