
【Part4】ぜんぜんわからなかったECSについてまとめてみました (概念と実際の画面で見ていくAWS ECS解説)
こんにちはこぐまです。
前回のAWSのサービス「ECS」の記事の続きです。
今回は「その4」です。「その3」は以下をご参照ください。
はじめに
前回までで、ECSで出てくるとっつきにくい専門用語の一部を
説明しました。
・クラスター
・サービス
・タスク
・タスク定義
・Service Auto Scailing
・EC2 Auto Scailing
今回は、それが実際のAWSの画面でどのように表示されるのかを見ていきたいと思います。
なお、WebでアクセスできるAWSの画面のことを
「AWSマネジメントコンソール」といいます。
AWSを普段利用していない方は、なかなか見慣れない画面だと思いますので、雰囲気だけでも感じていただけるといいかと思います。
なお、AWSマネジメントコンソールは結構な頻度で改善が加えられていきます。あくまで執筆時点(2022/02/26)の画面であることをあらかじめお伝えしておきます。

かなりコンソール画面は変わりました(いい意味で使いやすくなりました)
トップ画面から、「ECS(Elastic Container Service)」サービスを選択して、ECS画面に遷移します。
(ここもいろんなやり方があるので、次の記事で詳しく説明します。)
・ECS メイン画面

「緑色」は今表示されている画面のカテゴリ
「オレンジ色」はここまで説明してきた専門用語や命名した名前等を示しています。
まずは、「クラスター」に関する情報が出てきますね。
今回サンプルとして、クラスター名を「koguma-cluster」と名付けました。
画面右下部分を再掲します。

これを見ると、
「EC2」という欄の中に、オレンジ線で示したように、
「サービス」が1個、
実行中の「タスク」が3個、
「EC2 Container Instance」が1個、
それぞれあることがわかります。
なお、「FARGATE」「EXTERNAL」の欄についても同じような項目がありますが、ここではまったく気にしなくてよいです。
上記画面から、「koguma-cluster」という青い部分をクリックすると、
以下の画面に遷移します。
・ECS クラスター画面

ここをじっくり見ていきます。
まず画面上部から。

上から見ていきますが、初めて見るときに大切なのは、
オレンジ線のところだけです。その他は無視してください。
・このクラスター名は「koguma-cluster」です。
・このクラスターに「登録されているコンテナインスタンス」(「その3」まで読んでいただけると、「クラスターに登録されているコンテナインスタンス」という言葉の意味がよくわかると思います!)の数は「1台」です。
・このクラスターで実行されているタスクは「3個」です。
「3個のEC2」という画面の表示は現時点ではわかりにくいので無視してください。
・このクラスターには「サービス」が付いています。付いているサービスは「1種類」で、現在有効になっています。(なお「その3」で説明したように、「サービス」を付けることは必須ではありません。)
続いて、画面の下部を見ていきましょう。
・ECS クラスター画面「サービス」タブ

細かくてすみません・・拡大してご覧ください。
こちらも同じように、オレンジ線のところだけ注目します。
「サービス」というタブが現在見れています。
このクラスターには「1種類」のサービスが付いていて、そのサービス名は「koguma-service」です。
サービスで利用されている「タスク定義」の名前は「koguma_task:5」です。(最後についている「:5」というのは「バージョン5」という意味で、作ってから5回更新された「タスク定義」であることを示しています。)
なお、「koguma-service」によって実行中されているタスクが「2個」あることもわかります。
また必要なタスク(初期値)が2個であることもわかります。
必要なタスクが「2個」であり、現在実行されているタスクも「2個」なので、このサービスはとても安定しているということもわかります。
(レストランにおいて、お客様を安定して接客できているという状態です)
でも、上部の画面では、タスクは「3個」と表示されていたのに、
ここの「サービス」タブではタスクは「2個」しか実施されていないようです。・・なぜでしょう?
この謎は次の「タスク」タブで解けます。
・ECS クラスター画面「タスク」タブ
次に、この画面の別のタブ「タスク」を選択してみます。

(「タスク」タブを開いたところ)
黒くなっていることころは、一意のIDなので、
念のためマスクしているだけです。あまり気にしないでください。
さて、こちらではこのクラスター「koguma-cluster」上で実施されている
タスクを一覧化しています。
こちらも同じように、オレンジ線のところだけ注目します。
・タスクは「3つ」あります。それぞれのタスクに名前(ID)がついています。
・3つのタスクはどれも同じタスク定義「koguma-task:5」から作られていることがわかります。
・3つのタスクはどれも「同じコンテナインスタンス」上で動いていることがわかります(コンテナインスタンスのIDが同じなので)
・3つのタスクのうち、下2つは、サービスから起動されているものであることがわかります。(「開始元」、「グループ」の記載からわかります。)
・3つのタスクのうち、最初の1つは「開始元」や「グループ」にサービスの記載がないことから、「クラスター」から直接実行されていることがわかります。
先程の謎の答えはここにありました。
前回の「その3」でも少し説明しましたが、タスクの実施方法は2種類あります。
1つは「サービス」から実施させる方法
・・この時は、「タスク」タブで「開始元」、「グループ」にそのサービス名を示すような内容が確認できます。
もう一つは、「クラスター」から直接実施させる方法
・・この時は、「タスク」タブで「開始元」が空白となるようです。
ちなみに、どちらもタスクを実行させるための「タスク定義」は必要です。
・ECS クラスター画面「ECSインスタンス」タブ
次に、この画面の別のタブ「ECSインスタンス」を選択してみます。

(「ECSインスタンス」タブを開いたところ)
・・実は本当に最近、この記事を書いてから気づいたんですけど、
このタブ名「ECSインスタンス」のところ、私はずっと「EC2インスタンス」だと思ってました。
ということで、「ECSインスタンス」の説明をしなくてはいけないですね。
詳しい説明は画面の中に書かれているのですが、
「ECSインスタンス」とは、「EC2インスタンス」または「Externalインスタンス」のことです。
でも、「Externalインスタンス」のことは今は忘れてください。
つまり、「ECSインスタンス」=「EC2インスタンス」で大丈夫です。
(一つの実体に対して複数のあだ名をつけるから、初めての方はすごく混乱するんですよね。。私もそうでした。仕方のない理由はあるんでしょうけど、混乱しにくい名前を付けてほしいですね・・。)
さて、「ECSインスタンス」というタブの下部に表示されている内容を見ていきます。ここではまさに、「コンテナインスタンス」と「ECS(EC2)インスタンス」の関係が表示されています。
このクラスターには「コンテナインスタンス」が1台あります。
その「コンテナインスタンス」には、名前として一意の「ID」がついています。また、その元となる「EC2インスタンス」にも一意のIDがついています。
(ここも「その2」の説明でよくわかるかと思います。「コンテナインスタンス」とは、初めからコンテナを載せるための準備万端の「EC2インスタンス」のことでしたね。だから「コンテナインスタンス」も実質「EC2インスタンス」なわけで、AWSでの管理方法として、2つの名前(ID)がついているというだけの話です。)
「実行中のタスクの数」という欄を見ると、
この1台の「コンテナインスタンス」上で3つのタスクが実行されていることもわかります。ここは「タスク」のタブで説明した通りです。
(ここでは判断できませんが、)内訳は、2つのタスクがサービスから、1つのタスクがクラスターから実行されています。
「使用可能なCPU」,「使用可能なメモリ」については、
この「コンテナインスタンス」の残りの「余裕」を表します。
あとどれくらいタスク(コンテナ)実行できるか・・の目安ですね。
当然残りが「0」であれば、このコンテナインスタンス上では
新しいタスクを実施させることはできません。
・ECS サービス画面
続いて、「サービス」タブに戻って、
「サービス名(koguma-service)」をクリックしてみます。

「サービス」タブを開いているところ。ここでサービス名(koguma-service)をクリックする。
・ECS サービス画面 「タスク」タブ

初めて遷移してきたときには、「タスク」タブではないかもしれません。
すでに何度か説明してきている内容ばかりかと思うので、
この画面で表示されている内容も今ならかなりわかるのではないでしょうか。
注目すべきはやはり、クラスター全体でのタスク実行数は3つだけれども、
サービスで管理しているタスクは2つであるということです。
なので、タスクに関してもその2つしか表示されていません。
・ECS サービス画面 「イベント」タブ
続いて、「サービス」画面の「イベント」タブを見てみましょう。

一意のIDが多く、黒塗りが多くてすみません・・
(サンプル用ですぐ消すので問題ないかもしれないのですが・・一応)
ここでは、「サービス」が行った記録が書かれていきます。
つまり、「接客の履歴」ですね。
個人的に、ここで一番出てほしいメッセージはオレンジの「steady state」です。(これ超大事!)
つまり、今の状態は安定です!(お客様に満足いただけております)
という意味のメッセージです。
ぜひ運用する場合はこのメッセージを気にかけてあげてください。
・ECS サービス画面 「Auto Scailing」タブ
では次に、「Auto Scailing」タブを見てみます。

一応、ここでクイズです。
この「Auto Scaling」とはECS専門用語で出てきた
・Service Auto Scailing
・EC2 Auto Scailing
のどちらでしょうか?
はい、ここは「サービス」の画面での「タブ」なので、
もちろん「Service Auto Scailing」のことを指しています。
(でも、ここはちゃんと「Service Auto Scailing」と画面に表示してほしいなあと個人的には思っています・・。)
「Service Auto Scailing」は「サービス」の機能の一つであり、
負荷に応じて「タスクの数」を増減させる・・でしたね。
最小タスク2、最大タスク4とある通り、タスクの数を2~4の範囲で増減します。そして、その増やす減らすの判断を「サービス内で実行されているタスクの平均CPU使用率が80%」という閾値で判断しています。
(この閾値の部分はまた別の機会に説明しようと思います。)
なお、もう一つの「Auto Scailing」である、「EC2 Auto Scailing」については、実はECSの画面では見えないのです・・。
これについては次回の記事で説明します。
では、最後の専門用語「タスク定義」について、実際の画面でどう見えるかを見てみましょう。
・ECS タスク定義画面
「タスク定義」はいろんなところから遷移できます。
今まで出てきたどこからでもいいので、「タスク定義」というリンクがあるところをクリックしてみましょう。

これ以降もスクロールが続く・・。
「タスク定義」とは、タスクの「説明書」「設計書」でしたね。
だから色々決めること、書くことがあり、画面が縦に長いです。
まず①の画面では、タスク定義名が記載されています。
このタスク定義の名前は「koguma-task」です。
(今思うとあまり名前がよくなかったかもしれない・・)
またサービスのところで説明した通り、「koguma-task:5」となっているのは、「バージョン5」という意味で、作ってから5回更新された「タスク定義」であることを示しています。
下にスクロールします。

「タスクサイズ」というのは、タスク1つあたりの利用するCPUとメモリを
記載します。
そして・・ここでようやく出てきました。「コンテナ」です。
ECSにおいて、「コンテナ」の定義を決める場所は、「タスク定義」の最奥に位置しています。
「タスク」は「1つ以上のコンテナの集まり」でしたね。
なので、1つのタスクの中に複数のコンテナがある場合は、ここに設定していくのです。
コンテナ名は「koguma-container」です。
コンテナの中に詰まっている「モノ(イメージ)」はnginxです。
(nginxについて何?という方は、Webサイトを表示させるようなプログラムだと思って下さい。つまり、このコンテナを実行させると、外からアクセスできるWebサイトが立ち上がるということです。実際に立ち上がりアクセスできます。)
「コンテナ」の青い四角の部分は展開できます。

コンテナの部分を展開して表示
ここで、一つ一つのコンテナに対する細かい設定ができます。
今回はコンテナは1つだけ用意して、そこに「モノ」として
「nginx」を入れました。外部からアクセスするには、アクセスする道を作る必要があるので、それを「ポートマッピング」で指定しています。
ほかにも様々な設定ができることが画面からわかると思いますが、
詳細な説明は別の機会にしたいと思います。
さて、ここまでで、ECS専門用語のほとんどは画面で確認することができました。いかがだったでしょうか?
実際の画面を見ると、より理解が深まるかと思います。
ちなみに、自分自身もこの記事を書いていく中で、ECSについて初めて知ったこともたくさんあります!
(ぜんぜんわからなかったECS・・という記事ですが、まだまだ全然わかっていないECS・・という感じです。。)
そういうものも今後アウトプットできるようにしていきたいと思います。
さて、次回はいよいよ、ECSを実際に触り、ゼロからECS上でコンテナを動かす実践記事を書いていきたいと思います!
ここまで読んでくれて、ありがとうございました!
【マガジン紹介】
「ぜんぜんわからなかったECSシリーズ」のマガジンです!
鋭意更新中です!
AWS未経験者にもわかるように、優しく解説しています。
是非お読みいただけると嬉しいです!