【AWS】ECSとECRについて

2023/11/15に公開

概要

この記事では、ECSとECR、Fargateの概要についてまとめています。
Dockerの基本的な概要については、別途以下の記事でまとめていますので、是非ご覧ください。

ECS(Amazon Elastic Container Service)

ECSとは、フルマネージドのコンテナオーケストレーションサービスです。

コンテナ化されたアプリケーションをより効率的にデプロイ、管理、スケールするのに役立ちます。

ざっくり言うと、AWS上でDockerコンテナを簡単に実行、停止、管理できるサービスのことです。

  • 複数のコンテナを統合して管理することができる
  • AWS上でdocker pull,docker runしてくれるイメージ

オーケストレーションサービスってなに??

オーケストレーションとは、複数のコンテナを統合してデプロイ、管理、スケーリング、および運用するための自動化プロセスを指します。

これは、コンテナ化されたアプリケーションやサービスを効果的に管理するためのものです。

オーケストレーションがない場合はどうなるか

オーケストレーションがない場合、コンテナのデプロイやスケーリングなどは手動で行う必要があります。

各EC2インスタンスに対して個別にコンテナをデプロイし、管理する必要があります。

コンテナの数が少ないのであれば、そこまで面倒ではないかもしれませんが、コンテナの数が増えるにつれて管理が煩雑になってしまいミスなどが発生してしまう可能性があります。

オーケストレーションがある場合(ECS)

オーケストレーションがある場合、ECSはコンテナのデプロイやスケーリングを自動的に処理します。

新しいタスク(コンテナ)の起動や古いタスクの停止、スケールアウトやスケールインがオーケストレーションによって制御されます。

コンテナの面倒な管理は全てオーケストレーションサービス(ECS)に任せることができるようになります。

ECSの構成要素

ECSは下記の要素で構成されています。

  • Cluster(クラスター)
  • Service(サービス)
  • Task Definition(タスク定義)
  • Task(タスク)

Cluster(クラスター)

ECSクラスターは、コンテナが実行される論理的なグループです。
クラスターには複数のEC2インスタンスまたはAWS Fargateが含まれます。
クラスターはリソースの管理とスケーリングの基本単位となります。

Service(サービス)

ECSサービスは、特定のタスク定義から作成される実行中のタスクのセットを管理します。
実行中のタスクの数を定義し、タスクの起動、停止、再起動などを自動的に制御します。
サービスはアプリケーションの高可用性とスケーリングを実現するために使用されます。

Task Definition(タスク定義)

ECSタスク定義は、コンテナの実行に必要な情報を定義します。
タスク定義には、使用するDockerイメージ、ネットワーク設定、データボリュームの設定などが含まれます。
一度タスク定義が作成されれば、それを使用して複数のタスクを起動できます。

Task(タスク)

ECSタスクは、タスク定義に基づいて起動されるコンテナの実際の実体です。
タスクは、クラスター内のEC2インスタンスまたはAWS Fargate上で実行されます。
各タスクは、1つ以上のコンテナから構成され、同じタスク定義から生成されます。

AWS Fargate

Fargateとは、AWS上でコンテナをサーバーレスで実行することが出来るようにする機能を提供してくれるサービスです。

Fargateを使用することで、サーバーのプロビジョニングやクラスターの管理に悩むことなく、コンテナを実行できます。

サーバーレスのコンテナ実行環境を利用することで、サーバーの管理から解放され、アプリケーションの開発、構築に集中することが出来ます。

特徴と利点

  • サーバーレスなコンテナ実行: Fargateでは、サーバーの管理やクラスターのプロビジョニングが不要です。コンテナは個別のタスクとして実行され、AWSが基盤となるインフラストラクチャを管理します。
  • リソースの自動調整: Fargateはアプリケーションの負荷に応じて自動的にリソースを調整します。これにより、アプリケーションが常に適切なリソースを利用できます。
  • セキュアな実行環境: Fargateでは、各コンテナが分離された実行環境で実行され、セキュリティの強化が図られています。コンテナ間の相互影響が最小限に抑えられます。
  • 簡単な料金体系: Fargateは従量課金で、使用したコンピューティングリソースに対してのみ課金されます。インフラストラクチャの管理や待機中のリソースに対しては課金されません。

参考

Discussion