ECRとECSの違いとは?Fargate・EC2との関係もわかりやすく解説!

AWSでコンテナを使おうとすると、「ECR」「ECS」「Fargate」という名前が出てきます。

「名前が似ていて、何が違うの?」「アプリを動かすには、どれを使えばよいの?」と迷う方も多いのではないでしょうか。

まず押さえたいのは、ECRはイメージを保存するサービス、ECSはコンテナの起動や管理を行うサービス、Fargateはコンテナを動かすための実行基盤という違いです。

また、コンテナを動かす実行基盤には、FargateのほかにEC2などもあります。

この記事では、以下の内容をわかりやすく説明します。

  • ECR・ECS・Fargateの役割の違い
  • 実行基盤として使うEC2とFargateの違い

ECR・ECS・Fargateの違いをまず整理しよう

3つは、同じ役割を持つサービスではありません。それぞれ、アプリを動かすための異なる部分を担当します。

比較項目ECRECSFargate
主な役割コンテナイメージを保存・配布するコンテナの起動・停止・管理を行うコンテナを動かす実行環境を提供する
イメージしやすい言葉保管庫管理役実行する土台
利用場面作ったイメージをAWSに保存したいアプリを起動し、必要な数を維持したい実行用サーバーの管理をAWSに任せたい

ECR・ECS・Fargateは、「保存」「管理」「実行」という役割で分けると理解しやすくなります。

たとえば、Webアプリを動かす場合は、次のように組み合わせます。

作ったイメージをECRに保存し、ECSで起動や管理を行い、Fargate上でコンテナを動かす。

ECSがコンテナの起動や管理を担当し、そのコンテナが実際に動く環境をFargateが提供します。

補足

コンテナイメージは、アプリのコードや実行に必要なライブラリ、設定などをまとめたものです。

コンテナは、そのイメージをもとに作られる、アプリを実行するための独立した環境です。同じイメージから複数のコンテナを起動できます。

ECSではDocker Hubなどの別のレジストリにあるイメージも利用できるため、ECRの利用は必須ではありません。

ECRとは?コンテナイメージの保管庫

ECRとは、コンテナイメージを保存・管理・配布するAWSのサービスです。正式名称は「Amazon Elastic Container Registry」です。

名前に含まれる「Registry(レジストリ)」は、ここではコンテナイメージを保管して配布する仕組みを意味します。

たとえば、手元のパソコンでWebアプリのイメージを作ったとします。そのイメージをECRへアップロードしておくと、AWS上の実行環境から取得して使えます。

イメージをアップロードする操作をpush(プッシュ)、取得する操作をpull(プル)と呼びます。

ECR内では、「リポジトリ」という保管場所を作り、イメージを保存します。たとえば、my-web-appというリポジトリに、Webアプリのイメージを保存します。

ECRにイメージを保存しただけでは、アプリは起動しません。 イメージを使ってコンテナを起動する工程が必要です。

ECSとは?コンテナの起動や管理を行うサービス

ECSとは、コンテナの起動・停止や、実行状態の管理を行うAWSのサービスです。正式名称は「Amazon Elastic Container Service」です。

アプリを動かすときには、イメージを用意するだけでなく、「どのイメージを使うか」「CPUやメモリをどれくらい使うか」「いくつ動かすか」といった設定が必要です。ECSでは、使うイメージやCPU・メモリなどの設定を「タスク定義」にまとめます。そのタスク定義をもとにタスクを起動し、サービスで継続して動かすタスク数を指定します。

たとえば、「このWebアプリを2つ動かし続けたい」という場合、ECSの「サービス」という機能を使います。サービスは、指定した数の実行単位を維持する仕組みです。

ECSでは、この実行単位を「タスク」と呼びます。1つのタスクには、1つ以上のコンテナが含まれます。

必要なタスク数を2に設定すると、ECSのサービスは2つのタスクを維持しようとします。1つが停止した場合には、代わりのタスクを起動します。

初心者のうちは、ECSはコンテナの管理役と考えるとわかりやすいでしょう。

ただし、管理する仕組みだけではコンテナは動きません。実際に動かすためのCPUやメモリを持つ「実行基盤」も必要です。

実行基盤の違い(EC2 / Fargate)

コンテナを実際に動かすには、実行するための土台となるコンピューターの資源が必要です。

ECSで利用できる実行基盤として、まず次の2つを押さえましょう。

  • EC2:自分で管理する仮想サーバー上でコンテナを動かす
  • Fargate:実行用サーバーの管理をAWSに任せてコンテナを動かす

大きな違いは、コンテナを動かすサーバーを誰が管理するかです。

EC2の場合:サーバーを自分で管理する

EC2とは、AWS上で仮想サーバーを利用できるサービスです。

ECSの実行基盤に自分で管理するEC2を使う場合、EC2インスタンスと呼ばれる仮想サーバーを用意し、その上でコンテナを動かします。

利用者は、サーバーの種類や台数を選び、サーバーのOSの更新や保守なども行います。設定の自由度が高い一方で、サーバーの運用管理が必要です。

この構成では、ECSがコンテナの管理を担当し、EC2がコンテナを動かす土台になります。

Fargateの場合:サーバーの管理をAWSに任せる

Fargateとは、利用者が実行用のサーバーを管理せずに、コンテナを動かせるAWSの実行基盤です。

利用者は、必要なCPUやメモリなどを指定します。実行用サーバーの用意や、そのサーバーのOSの保守はAWS側に任せられます。ただし、コンテナイメージに含まれるアプリやライブラリなどの更新は、利用者が行います。

この構成では、ECSがコンテナの管理を担当し、Fargateがコンテナを動かす土台になります。

Fargateを使う場合、自分でEC2インスタンスを用意する必要はありません。

EC2とFargateの違いをまとめると以下のようになります。

比較項目EC2を自分で管理する構成Fargateを使う構成
実行用サーバーの用意利用者が行うAWSに任せる
実行用サーバーのOSの保守利用者が行うAWSに任せる
サーバーの種類や構成の調整利用者が細かく調整できるFargateで指定できる範囲で設定する
アプリの管理・更新利用者が行う利用者が行う

つまり、コンテナを動かすために必要なのは実行基盤です。EC2が必ず必要というわけではなく、Fargateを使う構成も選べます。

ECRに保存したイメージを使う場合、どちらの構成でも、ECSで起動や管理を行えます。違うのは、コンテナが動く土台と、そのサーバーを管理する人です。

本記事のまとめ

この記事では「ECR・ECSの違いと、EC2・Fargateとの関係」について、以下の内容を説明しました。

  • ECRは、コンテナイメージを保存・配布するサービス。
  • ECSは、コンテナの起動・停止や実行状態を管理するサービス。
  • コンテナを実際に動かすには、EC2やFargateなどの実行基盤が必要。
  • 自分で管理するEC2を使う場合は利用者がサーバーを管理し、Fargateを使う場合はAWSに任せられる。
  • Fargateを使う場合、自分でEC2インスタンスを用意する必要はない。

お読みいただきありがとうございました。

スポンサーリンク