![catch-img](https://ferret-one.akamaized.net/images/6683b193cfa2c203b11f790a/original.png?utime=1719906707)
Amazon ECSとはどんなサービス?できることや使い方をわかりやすく解説!
近年、Webアプリケーションなどの開発現場で、Amazon ECS(Amazon Elastic Container Service)の名前を聞くことが多いのではないでしょうか。
Amazon ECSは、Amazonが提供するクラウドサービスであるAWS上で、複数のコンテナを効率的に管理、運用できるツールです。ここでは、幅広い用途で使われているAmazon ECSのサービス概要や関連用語の説明、利用するメリットなどをわかりやすく解説します。
INDEX[非表示]
- 1.Amazon ECSとは?
- 1.1.そもそもコンテナとは
- 1.1.1.サーバ仮想化との違い
- 1.1.2.コンテナの注意点
- 1.1.3.コンテナエンジンについて
- 1.2.Amazon ECSでできること
- 1.3.Amazon ECSの4つの構成要素
- 1.4.Amazon ECSの3つの起動タイプ
- 1.4.1.EC2
- 1.4.2.Fargate
- 1.4.3.ECS Anywhere
- 2.Amazon ECSを利用するメリット
- 2.1.処理が高速
- 2.2.アプリケーションのパッケージ化が可能
- 2.3.コンテナの管理の効率化
- 3.Amazon ECSでのコンテナ作成方法
- 4.まとめ
>> 「Amazon ECS 」に関するお悩み・ご相談はこちら
Amazon ECSとは?
AWSの公式サイトによると、Amazon ECSは「完全に管理されたコンテナオーケストレーションサービス」と説明されています。AWS上でAmazon ECSを利用することにより、Dockerコンテナの実行や停止、CPUやメモリの量を増減するスケーリングなどが簡単におこなえるのが特徴です。コンテナについては、後述する「そもそもコンテナとは?」で詳しく解説します。
Amazon ECSを使えば、クラスターと呼ばれる実行基盤のインストールや管理などを自分でおこなう必要がありません。また、Amazon ECSはほかのAWSのサービスと連携がとりやすく、負荷分散を図るロードバランサ―や、高速アクセスが可能な記憶媒体であるブロックストレージなどと統合させて利用できます。
そもそもコンテナとは
Amazon ECSは、コンテナをオーケストレーションするツールです。Amazon ECSを理解するうえでは、コンテナとはなにか、オーケストレーションとはどのようなことかを知っておく必要があります。ここでは、コンテナについて解説していきます。また、オーケストレーションについては後述する「Amazon ECSでできること」で詳しく解説します。
コンテナとはサーバ仮想化技術の一つで、アプリケーションを動かすのに必要なコンポーネントをひとまとめにパッケージ化したものです。アプリケーションの動作環境を仮想化した、といい換えても良いでしょう。
サーバ仮想化との違い
コンテナと従来のサーバ仮想化とのおおきな違いは、「ハイパーバイザー」と呼ばれる仮想化ソフトウェアの有無です。サーバ仮想化では、物理的なマシンのうえにコンピュータを仮想的に作りだし、そこでプログラムを実行させます。ハイパーバイザーが仮想的なコンピュータの稼働する基盤となります。物理的なマシンが1台でも、ハイパーバイザー上に複数のゲストOSを乗せられるため、作業やテストを並行的に進められるのがメリットです。
従来のサーバ仮想化に対して、コンテナにはハイパーバイザーの代わりに「コンテナエンジン」があります。コンテナエンジンがOSの基本的な役割を担うことで、コンテナは単一のOS上で、同時に動作できます。貨物船や貨物列車に載せて運ばれるコンテナをイメージすると、わかりやすいかもしれません。貨物船や貨物列車のコンテナは、中に荷物を入れるための容器です。Amazon ECSが管理するコンテナも容器のようなものと考えられ、その中はソースコードやミドルウェア、データベースなど、開発に使う道具類や開発の成果が入ります。
従来のサーバ仮想化は、ホストOSにハイパーバイザー、その上部にゲストOS、さらにその上部にアプリケーションやランタイムなどが乗っている重箱型になっていました。
一方コンテナは、ホストOS上にコンテナを稼働させるためのコンテナエンジンを置き、そこにコンテナが乗ります。必要なアプリケーションなどはコンテナ内に収められているため、従来のサーバ仮想化と比較して階層が少ない点が特徴です。階層が少ないことにより、起動時間の短縮につながります。従来のサーバ仮想化では、ゲストOSの起動で分単位の待ち時間が発生していたところ、コンテナの利用では数秒の待機時間で環境が立ちあがります。
コンテナの注意点
コンテナにもデメリットがないわけではありません。構築した際のホストOSの環境に依存するため、構築時と異なるOS上に移行してもコンテナとして起動することができません。コンテナは持ち運びがしやすいため、他のサーバに移して実行するようなこともありますが、ホストOSと同系列で互換性のあるOSであることを事前に確認しておく必要があります。
また、ホストOSに障害が発生すると、その中で連携して動く全コンテナにも影響が出てしまう点も課題です。実サービスで利用する場合は、サービスが停止してしまう危険性があるため別途対策が必定になります。
コンテナエンジンについて
コンテナはハイパーバイザーやゲストOSがない代わりに、コンテナエンジンというプラットフォーム上で稼働します。コンテナエンジンとして代表的なものが、Dockerです。Dockerはオープンソースのソフトウェアで、全世界で月間2,000万人以上の開発者が利用しており、700万以上のアプリケーションで採用されています。
Dockerをはじめとしたコンテナエンジンの特徴として代表的なものは、以下の3つです。
- 動作が軽い
- 共有が容易
- 環境構築が容易
動作が軽いのは、従来の仮想化では必要だったゲストOSがないことで、負荷が小さくなっているためです。
また、Dockerには構築した環境をコピーできる機能があります。「Dockerイメージ」と呼ばれる各種のコンテナ設定のためにまとめられた読み取り専用のテンプレートがあり、「Docker Hub」などのDockerイメージ共有サービスを使用することで、同じ開発環境の構築が手軽にできます。複数のエンジニアが作業を分担するような場合に便利です。
Dockerイメージの他にも、「Dockerfile」と呼ばれるコンテナの設計をコマンド形式でまとめたテキストファイルもあります。Dockerfileをビルドすることで、Dockerイメージは作成されます。
Amazon ECSでできること
さまざまな楽器が音を鳴らすオーケストラは、指揮者にしたがって各楽器の奏者が譜面どおりの音を出すことで、調和のとれたハーモニーを生み出します。Amazon ECSはオーケストラの指揮者のように、各コンテナを総合的に管理し、運用をおこないます。この機能が、Amazon ECSの大きな特徴であるコンテナオーケストレーションです。
貨物船や貨物列車になぞらえると、コンテナの量が多ければ大きな船や列車を用意したり、急ぎの荷物であればスピードの出る船に乗せ換えたりするなどの運行管理が必要です。Amazon ECSは、こうした運行管理者の役割を担っています。
コンテナオーケストレーションの機能がない場合、複数のコンテナを扱う際には、それぞれの管理や運用、保守を個別におこなう必要があります。複数のコンテナに対して、手動でコマンドを実行するのは、手間がかかるだけでなく、エンジニアに開発以外の負荷がかかり、効率低下の原因となりかねません。Amazon ECSを導入していれば、複数のコンテナを一括して管理してくれます。
Amazon ECSの主な機能は、以下のとおりです。
- オートスケーリング
- 自動復旧
- スケジューリング
実行中のコンテナの負荷状況を確認し、必要に応じてCPUやメモリの増減をおこなうのがオートスケーリングです。また、コンテナの運用を監視し、停止しているものがあった場合は新たなコンテナを起動するなどの自動復旧対応をおこないます。スケジューリングは、コンテナを配置する際に、サーバの負荷状況によって適正な配置を判断する機能です。
Amazon ECSは、あくまでコンテナの管理を担うツールであり、コンテナの実行環境ではありません。コンテナの実行環境としては、Amazon EC2やAWS Fargateなどのサービスを利用します。後述する「Amazon ECSの3つの起動タイプ」で詳しく解説します。
Amazon ECSの4つの構成要素
ここでは、Amazon ECSの4つの構成要素に関して説明します。これらの要素は、Amazon ECSの設定をする際に必要です。4つの構成要素は、図のような構造になっています。
タスク定義
タスク定義は、タスクを設定するためのテンプレートの定義です。定義する内容には、以下のようなものがあります。
- コンテナ定義
- タスクサイズ
- ポートマッピング
- 起動タイプ
コンテナ定義で、どのテンプレート(イメージ)を用いてコンテナを作成するかを決めます。タスクサイズでは、CPUやメモリの割り当てを設定します。また、ポートマッピングで使用したいポート番号を指定できますが、指定しなかった場合も動的にポート番号が割り当てられます。
起動タイプとは、Amazon ECSを動かすための実行環境の選択です。起動タイプにはAmazon EC2、AWS Fargate、外部インスタンス(Amazon ECS Anywhere)の3種類があります。後述する「Amazon ECSの3つの起動タイプ」で詳しく解説します。
また、コンテナを動かす実行環境をデータプレーンと呼び、コンテナを管理する場所をコントロールプレーンと呼びます。起動タイプとして示した3種類はデータプレーンで、Amazon ECSはコントロールプレーンという関係です。野球にたとえれば、コントロールプレーンが監督で、データプレーンが選手といえるでしょう。コントロールプレーンにはAmazon ECSのほかに、Amazon EKS(Amazon Elastic Kubernetes Service)というサービスもあります。
KubernetesはDockerと同様の、コンテナオーケストレーションのツールです。米Googleが開発したオープンソースのソフトウェアで、複数のコンテナを運用する場合のネットワークやストレージの連携管理をおこなえる特徴を持ちます。Amazon EKSは、AWS上でKubernetesを利用できるようにしたサービスです。
Kubernetesは世界中で使われているオープンソースソフトウェアであるため、多くのエンジニアが改良を重ねており、豊富な機能を持っています。しかし機能が豊富にある分、Amazon EKSはKubernetesの専門的な知識がないと使いこなせないサービスであり、学習コストがかかってしまうのは難点です。
Amazon ECSはAmazon EKSに比べて機能が絞り込まれているため比較的扱いやすいとされており、Kubernetesを使う特段の理由がないのであれば、Amazon ECSを選択するのが一般的です。
タスク
タスクは、タスク定義にのっとって起動するコンテナのことです。タスクにはコンテナが一つ以上含まれます。タスク内で複数のコンテナを起動することも可能です。
また、障害などにより停止したタスクがある場合は、後述する「サービス」で設定した必要なタスク数をもとに、新しいタスクが自動的に起動します。
サービス
実行中のタスク数を管理するのがサービスです。障害により停止したタスクがある場合に新しいタスクが自動的に起動するのは、指定されたタスク数を維持する機能をサービスが持つためです。
どのタスク定義を使うのかなども、サービスで指定できます。その他に、負荷分散を担うロードバランサ―の指定や、タスクを実行するためのネットワークの設定などが、サービスが担う役割です。
クラスター
サービスに基づいて、タスクを実行するための基盤がクラスターです。クラスター名や利用するFargateやEC2などの実行環境(データプレーン)などを設定して利用します。クラスターを別で作成して開発環境とテスト環境を論理的に分けられるほか、IAM※(Identity and Access Management)で設定している権限ごとに分けることも可能です。
※IAM: AWSサービスへのアクセスを管理するためのサービス
Amazon ECSの3つの起動タイプ
Amazon ECSと組み合わせられる実行環境(データプレーン)には、Amazon EC2、AWS Fargate、ECS Anywhereの3つの起動タイプが用意されています。Amazon EC2とAWS Fargateはクラウド環境であるAWS上で動作し、ECS Anywhereはオンプレミスの環境でAmazon ECSの機能を利用するためのものです。ここからは、各起動タイプについて詳しく説明していきます。
EC2
EC2(Elastic Compute Cloud)インスタンスを構築し、そのうえでDockerなどのコンテナエンジンを起動させます。OSや利用するプロダクト、バージョンなどの管理の自由度が高く、コンテナを動かすホストOSへのSSH接続も可能です。
自由度が高いということは、運用管理が必要になるというデメリットもあります。OSやミドルウェアへのパッチ適用や、セキュリティの対応などがそれにあたります。また、起動するコンテナ数などの管理も必要です。
Fargate
AWS Fargateは、AWS上のコンテナに対しサーバレスで実行できる環境を提供してくれるサービスです。エンジニアにとっては、サーバの構築や保守に煩わされることがなく、アプリケーションの開発に集中できるシステムです。
AWS Fargateのメリットとして大きなものは、コンテナ実行環境のホストマシンのOSや、ミドルウェアの管理が不要になる点です。エンジニアは、OSのセキュリティ対策などの煩雑な作業から解放されます。
AWS Fargateを使えば、インスタンスタイプの管理も不要になります。また、オートスケーリングに対応している点もメリットの一つです。オートスケーリングとは、システムにかかる負荷に自動的に対応して、クラウドサーバの容量やスペックを拡大したり縮小したりしてくれる機能です。
デメリットの一つは、パブリックIPアドレスの固定割り当てができない点です。AWS Fargateを利用すると、Amazon EC2インスタンスへのIP割り当てが自動で実行されるため、パブリックIPアドレスを固定で割り当てることができません。複数のエンジニアが開発に参加するケースなど、固定割り当てが必要な場合は、NAT(IPアドレス変換)ゲートウェイ設定などにより割り当ては可能となりますが、工数がかかることは否めません。
ECS Anywhere
ECS Anywhereは2021年にリリースされており、他の2つと比べると新しいサービスになります。それまではAmazon ECSは、Amazon EC2かAWS FargateなどAWSのリソース上でしか稼働できませんでした。ECS Anywhereを利用すれば、オンプレミス環境でもコンテナ管理がおこなえるようになります。
オンプレミス環境でもコンテナ管理ができるようになることで、クラウド環境で管理しているコンテナとも一貫しての管理が可能になります。環境を問わず、コンテナ内に同じツールやAPIを使用できることになるため、使用ツールの統一を図ることも容易になります。
Amazon ECSを利用するメリット
ここでは、Amazon ECSを利用するメリットをまとめました。3つのポイントに絞ってご説明します。
処理が高速
処理に関する無駄なものを削減して非常に軽量なため負荷が少なく、高速な処理が可能です。
また、Amazon ECSはAWSのほかのサービスとの統合が容易という特徴もあります。AWSとその関連サービスは、拡張性や処理性能の高さで定評があります。AWSのほかのサービスと組み合わせてAmazon ECSを利用すれば、コンテナ化したアプリケーションの実行など、処理を高速でこなすことが可能です。
アプリケーションのパッケージ化が可能
Amazon ECSが管理するコンテナ内で、アプリケーションのパッケージ化が可能です。パッケージ化することにより、別の環境への移行が簡単にでき、実行する場所がどこであってもアプリケーションを高速で起動できます。Amazon ECSは、規模が小さなサービスを複数連携させるマイクロサービスや機械学習のアプリケーションまで、多種多様なアプリケーションのパッケージ化に対応しています。
コンテナの管理の効率化
Amazon ECSの利用により、コンテナの管理を効率化できる点もメリットの一つです。Amazon ECSでは、Kubernetesなどのような専門のスキルが必要となるコンテンツオーケストレーションのソフトウェアを別途インストールする必要がなく、仮想マシン上のクラスターの管理や、コンテナのスケーリングなども必要としません。
Amazon ECSでのコンテナ作成方法
ここからは、実際にAmazon ECSを使った、コンテナの作成方法を説明します。
AWSにログインして、AWSマネジメントコンソールを開いてください。ページ下部にある「すべてのサービス」をクリックします。
「すべてのサービス」が開いたら、左端の列の「コンテナ」の項にある「Elastic Container Service」をクリックします。
左ペインにある「クラスター」をクリックし、ページが開いたら、右端にある「クラスターの作成」ボタンを押下してください。
クラスターの作成ページで、任意の「クラスター名」を設定します。クラスター名は1~255文字で、有効な文字はa~z、A~Z、0~9、ハイフン(-)、アンダースコア(_)です。
「クラスター名」の下に、「インフラストラクチャ」を指定する項目があります。ここにはデフォルトで、「AWS Fargate(サーバーレス)」にチェックされています。Amazon EC2インスタンスを追加するか、ECS Anywhereを使った外部インスタンスの追加が、この項目で可能です。
クラスター名とインフラストラクチャを設定したら、右下の「作成」ボタンを押下してください。
画面が切り替わり、指定したクラスター名でクラスターが作成されます。既存のクラスター名を指定した場合はエラーとなるため、別のクラスター名を指定しなおしてください。
同じページの左ペインにある、「タスク定義」をクリックします。
「タスク定義」のページに遷移したら、右端または下部の「新しいタスク定義の作成」ボタンを押下してください。
「新しいタスク定義の作成」ページが開きます。上部でタスク定義ファミリー名の設定をし、スクロールダウンすると、「インフラストラクチャの要件」を選択する項目があります。「起動タイプ」は「AWS Fargate」がデフォルトです。
この項目では起動タイプのほかに、「タスクサイズ」「条件付きのタスクロール」なども設定できます。タスクサイズはタスク用に予約するCPUとメモリのサイズの設定、条件付きのタスクロールはタスクIAMロールなどです。
さらにスクロールダウンすると、コンテナの詳細設定に移ります。コンテナの名前、コンテナイメージ、コンテナを必須としてマークするかどうかを指定してください。「ポートマッピング」の設定もこの項目でおこないます。その下まで進むと、「ログ収集」や「ストレージ」などのオプション設定ができます。
必要な設定を確認して、ページ最下部の「作成」ボタンを押下すれば、コンテナが作成されます。
まとめ
Amazon ECSは、AWS上で複数のコンテナを効率的に管理できる、コンテナオーケストレーションのツールです。負荷に応じたCPUやメモリ容量の増減、コンテナの運用監視などをしてくれるため、エンジニアは開発に集中できる利点があります。
Amazon ECSは比較的手軽に利用できるツールですが、タスク、サービス、クラスターなどの用語に不慣れな場合は、構築や運用で戸惑ってしまうことがあるかもしれません。「Amazon ECSを利用したいが不安がある」などの場合は、実績のあるITベンダーに相談してみるのも一案です。
>> 「クラウドソリューション」に関するお悩み・ご相談はこちら