Amazon Elastic Container Service(ECS)について調べました

業務の中でECSの話が度々上がり、改めて理解を深めたくまとめます。
恥ずかしながら筆者のECS知識としては、コンテナに関するサービスでForgateと組み合わせると管理コストが下げられるくらいの知識しかありませんでした。。

■ECSとは何かをAWS公式ドキュメントから見ていきます

コンテナ化されたアプリケーションを簡単にデプロイ、管理、スケーリングできる、完全マネージド型のコンテナオーケストレーションサービスです。
フルマネージドサービスである Amazon ECS には、AWS の構成と運用に関するベストプラクティスが組み込まれています。
Amazon Elastic Container Registry や Docker などの AWS とサードパーティーツールの両方に統合されています。
この統合により、チームは環境ではなくアプリケーションの構築に集中しやすくなります。コントロールプレーンの複雑な管理は必要なく、クラウドの AWS リージョン 間またはオンプレミスで、コンテナワークロードを実行およびスケーリングできます。
引用:https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/Welcome.html
 
なるほど。。それぞれの単語の意味を理解できないと理解を深められなそうです。

■ECSの構成要素

1.クラスター :コンテナを配置する複数のEC2やForgate、外部インスタンス(オンプレ)で構成される要素
2.サービス :クラスター内で実行中のタスクを管理する
3.タスク定義 :タスクを構成するコンテナ群の定義 ※タスク内には複数のコンテナを起動させることが可能
4.タスク :タスク定義に基づいて起動するコンテナの集まり
 

■コンテナとは

アプリケーションとその実行環境を1つにまとめあげる技術のこと。らしい。。
そろそろ何を言っているのか分からなくなってきましたね。
イラストを交えながら説明していきます。
 

物流業界におけるコンテナ

まずはコンテナのイメージを持てるように、物流業界で使われているコンテナ(箱)について知ることが理解の助けになるそうなので調べてみます。
物流業界では貨物の大きさや形(規格)が統一されていない物をコンテナに格納し積み上げ・積み下ろしをすることで持ち運びやすいようにしているそうです。
上記内容を頭の片隅に置いて下段に記載の内容を読み進んでみてください。きっとさきほどよりイメージし易くなるはずです。

物理基盤・仮想化技術・コンテナの違い

コンテナも物流業界と同じく規格を統一し、持ち運びし易くするために生まれた技術で、アプリの実行環境を1つにまとめることができます。
比較しながらコンテナについて解説した方が理解し易いと思うので、物理基盤の特徴から解説していきます。
 

1. 物理基盤(イメージ:一軒家)

物理サーバの上に直接LinuxやWindowsといったOSそしてミドルウェア、アプリケーションをインストールするのが一般的です。
メリット・デメリットは以下の通りとなり、物理基盤での1番のデメリットはCPUやメモリ等のリソースを集約しないことで無駄が生まれてしまうことです。このデメリットを解消するために、仮想化技術が登場しました。
 

  • メリット:物理サーバを1台丸ごと使用するため、性能面は優れている。障害発生時の切り分けが比較的容易である。
  • デメリット:使用していないリソースに無駄が多い。各層に依存する。

2. 仮想化技術(イメージ:アパート)

物理基盤(イメージ:一軒家)と違い土地や建物は共有してますが、各部屋毎に個別で契約が発生しているイメージです。
仮想化技術にはホストOS型とハイパーバイザー型がありそれぞれゲストOSが必要となります。
メリット・デメリットは以下の通りとなり、仮想マシンは各々でゲストOSを起動する必要があり、メモリ消費に無駄があります。
ここで登場したのがコンテナです。

  • メリット:
    1.1台の物理サーバから複数の仮想マシンを起動するため、低コストかつリソースを効率的に活用できる。
    2.各仮想マシンは完全に別々の動作をするため、ゲストOSやミドルウェア、アプリケーション等を個別に動作させることが出来る。
  • デメリット:
    1.ゲストOSやインストール設定等は物理サーバ同様、必要である。
    2.仮想マシン毎にゲストOSが動作するため、メモリ消費の無駄が多い。

     

3. コンテナ(イメージ:シェアハウス)

1・2のイメージと比較すると土地や建物だけではなく、生活用品(家電など)も共有しているイメージです。
コンテナにはゲストOSが含まれておらず、ホストOSを共有しているので2のメモリ消費の無駄という観点を克服しています。
コンテナ内には以下のものが含まれています。

  • アプリケーションの実行に必要な設定ファイル
  • ライブラリと呼ばれるプログラムの部品(ソフトウェア)
  • ランタイムと呼ばれるプログラムの動作に必要なソフトウェア

これらのまとまりをイメージと呼び、このイメージからコンテナが各々独立して実行されます。
そのため、1つのホストOS上で他アプリケーションとの競合を意識することなくアプリケーションを実行できます。
メリット・デメリットは以下の通りとなり、前述した物流業界のコンテナと同じくホスト OS と同系列でカーネルに互換性のある OS(Linux系でいうと(CentOS・Ubuntu))であれば他サーバ・環境に持ち運びがし易くなります。
※コンテナ内にゲストOSが含まれず、イメージを持ち運ぶだけなので物理基盤・仮想化技術と比べ管理が楽そうですね。

  • メリット:
    1.持ち運びがしやすい
    2.起動・処理を高速化できる
    3.リリースサイクルを高速化できる
    4.バックアップへの切替を容易にできる

  • デメリット:
    1.ホストOSへの依存が発生する
    2.学習コストが高い

     
    と、ここまでがコンテナの説明です。。
    だいぶ大雑把に説明しましたがなかなかの量です。

 

■もう一度冒頭の公式ドキュメントを読み直してみます

「コンテナ化されたアプリケーションを簡単にデプロイ、管理、スケーリングできる、完全マネージド型のコンテナオーケストレーションサービスです。」※AWS公式ドキュメントより一部抜粋

 
AWSのコンテナを動かす実行環境のサービスかと思っていましたが、どうやら違うようです。
コンテナをオーケストレーションするサービスみたいですね。
ECSはコンテナの管理に使用し、実際にコンテナを実行する環境には、Amazon EC2Fargateといった別のサービスを使用するみたいです。
では、オーケストレーションについて調べていきます。

 

■オーケストレーションとは

コンテナを管理するサービスのことを、オーケストレーターといい、オーケストレーターでコンテナ管理することをオーケストレーション(自動化)というそうです。
みんな大好き自動化ですね!
 

■コンテナオーケストレーターの目的

コンテナオーケストレーターを使う目的は、複数ホストで起動するコンテナを一元管理するためです。

  • オーケストレーターがない場合(※複数のDockerホストが起動している前提):
    管理者は各Dockerホスト毎にログインし、コンテナを運用・管理するといった手間が発生します。
    管理者が同じような操作をすることとなり非効率です(運用コストが高い)。

  • オーケストレーターがある場合(※複数のDockerホストが起動している前提):
    ECSが複数のDockerホストそしてコンテナを管理してくれます。
    よって、管理者はECSだけを確認・管理すればよくなり効率的です(運用コストが低い)。
    また万一、コンテナが停止した場合もあらかじめ定義した設定に従ってコンテナを再起動し、サービス提供可能な状態にしてくれます。

 

■まとめ

社内勉強会でECSについて説明しようと考えていましたが、コンテナを理解するところからになりました。
何事も一歩ずつですね。次回は実際にECSを利用した構築をしようと思います。

Last modified: 2023-11-11

Author