こちらの記事では、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を利用する際に必要な設定項目になるため、図を利用しながら解説していきます。
クラスター
クラスターとは、後述する「サービス」と「タスク」を実行する基盤のことです。図で示すと赤枠の部分に相当します。
実際にクラスターを作成する際には、以下の項目を設定していきます。
- クラスター名
- どのVPCとサブネットを使用するのか?
- 利用するインフラの種類(Fargate、EC2インスタンス、オンプレミスの仮想マシンまたはサーバー)
尚、設定項目については新しいコンソールと旧コンソールで違いがあるため、実際に触れる際には注意が必要です。
サービス
サービスとは、クラスター内で実行するタスク(コンテナ群)を管理する役割を持っています。
サービスでは、どのタスク定義を使用して、どのECSクラスターを使用するのか?などを決めることができます。
そして、起動タイプとしてEC2を選択しコンテナを仮想サーバー上で動作させるのか、Fargateを選択してコンテナをサーバーレスで動作させるのかを設定することができます。
また、どのくらいのタスク数が必要なのか?を定義することができるため、必要なタスクの数を3とした場合、起動後は3つのタスク数を自動で維持、管理してくれます。これにより、万が一障害が発生してサービスが停止してしまった場合にも、指定したタスクを自動で再作成してくれるという利点があります。
タスク定義
タスク定義とは、どのようなコンテナを作成するのか?を定義したものです。タスク定義は一度作成すると設定内容を変更することはできないため、変更したい場合は新しいタスク定義を別で作成するか、リビジョンと呼ばれるバージョン単位で内容を上書きする必要があります。
実際の設定項目の一部は以下のとおりです。
設定要素 | 内容 |
---|---|
ファミリー名 | タスク定義の名前 |
コンテナ名 | 起動するコンテナ名 |
イメージURI | 使用するコンテナイメージのURI |
ポートマッピングでのポート番号 | 使用したいポート番号の指定 |
環境変数の設定 | 環境変数の内容を設定 |
ボリューム名 | コンテナへアタッチするボリューム |
実行ロールの設定 | タスクがAWSサービスにAPIリクエストを行うために使用できるIAM ロール。 |
ネットワークモードの設定 | default、bridge、Host、awsvpc、None |
このタスク定義で設定した内容をもとにして、タスクと呼ばれるコンテナ群は作成されます。
また、ポートマッピングで使用するポートマッピングのポート番号を指定しなかった場合、動的にポート番号が割り当てられます。
タスク
タスクとは、先述したタスク定義をもとにして起動したコンテナの集まりのことです。
一つのタスク内では複数のコンテナを起動することもできます。例えばNginxなどのWebサーバーと、Gunicornなどのアプリケーションサーバーを一つのタスク内で実行する、といったことも可能です。
タスクのどれかが障害などで停止したりした場合には、サービスで設定した必要なタスク数をもとに自動的に新しいタスクが起動します。これにより、サービス内の希望するタスク数を維持することができます。
まとめ
こちらの記事では、ECSにおける基本的な要素、(クラスター、サービス、タスク定義、タスク)について解説しました。
- クラスターは「サービス」と「タスク」を実行する基盤のこと
- サービスは、クラスター内で実行するタスク(コンテナ群)を管理する役割を持っている
- タスク定義とは、どのようなコンテナを作成するのか?を定義したもの
- タスクとは、タスク定義をもとにして起動したコンテナの集まりのこと
それぞれの要素について図を見ながらイメージしていただき、ECSの基本的な4つの要素について少しでも理解に繋がれば幸いです。
エンベーダー編集部
エンベーダーは、ITスクールRareTECHのインフラ学習教材として誕生しました。 「遊びながらインフラエンジニアへ」をコンセプトに、インフラへの学習ハードルを下げるツールとして運営されています。
関連記事
2020.02.25
完全未経験からエンジニアを目指す爆速勉強法
USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話
- キャリア・学習法
- エンジニア
2023.10.19
インフラエンジニアの仕事内容について解説
こちらはEnvaderの記事になります。
- インフラエンジニア
- ネットワーク
- AWS
2023.10.28
TerraformでAWS RDS/Auroraの時限起動を設定し、コストを削減
この記事では、AWSのデータベースサービスであるRDSとAuroraについて簡単に触れた後、なぜコスト削減が大事なのか、そしてそのためにどうやってTerraformを使うのかを紹介していきます。
- AWS
2022.12.26
【AWS】オブジェクトストレージAmazon S3の特徴とユースケース
この記事では、実際にAmazon S3を使ったユースケースを3つご紹介致します。
- AWS