こちらの記事では、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つの要素について少しでも理解に繋がれば幸いです。
ECSには、ECS on EC2とFargateの2つがあります。そちらについても解説しているのでご覧ください。
https://envader.plus/article/441
ECSのデプロイメント戦略についてはこちらで解説しています。
【番外編】USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話
プログラミング塾に半年通えば、一人前になれると思っているあなた。それ、勘違いですよ。「なぜ間違いなの?」「正しい勉強法とは何なの?」ITを学び始める全ての人に知って欲しい。そう思って書きました。是非読んでみてください。
「フリーランスエンジニア」
近年やっと世間に浸透した言葉だ。ひと昔まえ、終身雇用は当たり前で、大企業に就職することは一種のステータスだった。しかし、そんな時代も終わり「優秀な人材は転職する」ことが当たり前の時代となる。フリーランスエンジニアに高価値が付く現在、ネットを見ると「未経験でも年収400万以上」などと書いてある。これに釣られて、多くの人がフリーランスになろうとITの世界に入ってきている。私もその中の1人だ。数年前、USBも知らない状態からITの世界に没入し、そこから約2年間、毎日勉学を行なった。他人の何十倍も努力した。そして、企業研修やIT塾で数多くの受講生の指導経験も得た。そこで私は、伸びるエンジニアとそうでないエンジニアをたくさん見てきた。そして、稼げるエンジニア、稼げないエンジニアを見てきた。
「成功する人とそうでない人の違いは何か?」
私が出した答えは、「量産型エンジニアか否か」である。今のエンジニア市場には、量産型エンジニアが溢れている!!ここでの量産型エンジニアの定義は以下の通りである。
比較的簡単に学習可能なWebフレームワーク(WordPress, Rails)やPython等の知識はあるが、ITの基本概念を理解していないため、単調な作業しかこなすことができないエンジニアのこと。
多くの人がフリーランスエンジニアを目指す時代に中途半端な知識や技術力でこの世界に飛び込むと返って過酷な労働条件で働くことになる。そこで、エンジニアを目指すあなたがどう学習していくべきかを私の経験を交えて書こうと思った。続きはこちらから、、、、
エンベーダー編集部
エンベーダーは、ITスクールRareTECHのインフラ学習教材として誕生しました。 「遊びながらインフラエンジニアへ」をコンセプトに、インフラへの学習ハードルを下げるツールとして運営されています。
関連記事
2020.02.25
完全未経験からエンジニアを目指す爆速勉強法
USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話
- キャリア・学習法
- エンジニア
2024.08.31
AzureにはNATゲートウェイはいらない?AWSとの違いとAzureでの使いどころ
この記事では、Azureの「NATゲートウェイが不要」とされる理由を詳しく探ります。具体的には、Azureがどのようにデフォルト設定でインターネット接続を提供しているのか、その利便性や制約について解説します。
- AWS
- Azure
- ネットワーク
2023.12.25
TerraformでAWS Cognitoの認証機能を活用
この記事では、AWS Cognitoの基本概念と機能、そしてそれを利用する具体的な利点を理解することを目指しています。開発者や技術関係者がCognitoの機能を活用して、セキュリティが強化された効率的なユーザー認証システムを構築する方法について具体的な知識を提供します。
- AWS
2024.08.30
【AWS ハンズオン】AWS CloudTrailの基礎を学んでみよう
この記事では、AWS CloudTrailの基礎知識を初心者向けに解説します。AWSを利用するインフラエンジニアにとって、CloudTrailの理解は必要不可欠な知識ですので一緒に基本をしっかりと押さえていきましょう。
- AWS
- ハンズオン