ECSとは
Amazon Elastic Container Service(ECS)、はAWSが提供するフルマネージド型のコンテナオーケストレーションサービスです。これは、マイクロサービスのアーキテクチャの人気が高まる中で、開発者やIT専門家が複数のコンテナを効果的に管理し、デプロイするためのツールとして位置づけられています。
コンテナ技術は、アプリケーションとそれに必要なランタイム、ライブラリ、システムツールを一つのパッケージにまとめることができるため、開発からデプロイ、そしてスケールまでの一貫した環境を提供します。しかし、これらのコンテナを効果的に管理するには、適切なオーケストレーションツールが必要となります。これが、ECSの役割となります。
ECSのコンポーネント
ECSのアーキテクチャは、コンテナ化されたアプリケーションのデプロイとランタイムの管理を行うための各コンポーネントから成り立っています。
Task
ECSにおいて、アプリケーションの実行単位は「Task」として知られています。Taskは、一つ以上のコンテナから構成される実行単位で、ECS上でアプリケーションを起動する際の基本単位となります。
Task Definition
Task Definitionは、Taskの作成と設定のためのテンプレートとして機能します。このテンプレートはJSON形式で記述され、どのコンテナイメージをデプロイするか、各タスクやコンテナにどのようなリソースやIAMロールを割り当てるか、CloudWatch Logsへの出力先など、多くの詳細設定を含むことができます。
一つのTask Definition内には、複数のコンテナ定義を含めることが可能で、それにより一つのTask内で複数の関連するコンテナを効果的に管理することができます。
JSONサンプル
{
"family": "my-task-def",
"networkMode": "awsvpc",
"requiresCompatibilities": [
"FARGATE"
],
"cpu": "256",
"memory": "512",
"containerDefinitions": [
{
"name": "backend",
"image": "xxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/backend:latest",
"essential": true,
"portMappings": [
{
"hostPort": 8080,
"protocol": "tcp",
"containerPort": 8080
}
]
},
{
"name": "frontend",
"image": "xxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/frontend:latest",
"essential": true,
"environment": [],
"portMappings": [
{
"hostPort": 8000,
"protocol": "tcp",
"containerPort": 8000
}
],
"command": [
"run",
]
}
]
}
Service
指定した数だけTaskを維持するスケジューラで、オーケストレータのコア機能にあたる要素です。Service作成時は、起動するTaskの数や関連づけるロードバランサーやTaskを実行するネットワークを指定します。また、Taskが何らかの理由で終了した場合は、Task定義をベースに新しいTaskを生成して指定したTask数を維持します。
Serviceは、オーケストレーションのコア機能としての役割を果たします。Taskが何らかの理由で終了した場合は、Task Definitionをベースに新しいTaskを生成して指定したTask数を維持します。Serviceは、関連するロードバランサーやネットワーク、そして実行するTaskの数などの設定を持っています。
Cluster
Clusterは、ECSにおける論理的なグルーピングの単位で、複数のServiceやTaskを管理するためのものです。Cluster内で、利用可能なリソースやタスクの状態、サービスの状態などを一元的に確認することができます。
データプレーン
データプレーンは、ECSのコンポーネントと連携して、コンテナが実際に動作する環境やリソースを提供する部分です。AWSが提供するデータプレーンは次の二つです。
- Amazon Elastic Compute Cloud (EC2)
- AWS Fargate
Amazon Elastic Compute Cloud (EC2)
Amazon EC2は、AWSが提供する仮想プライベートサーバーです。ECSにおけるデータプレーンの一部として、EC2はコンテナの実行環境としての役割を果たします。ユーザーは、必要に応じてインスタンスタイプやリソース量を選択することができ、EC2上で直接コンテナを起動、管理することが可能です。さらに、EC2はAWSの広範なサービス群との統合が容易であり、セキュリティやネットワーク、ストレージの面での高い拡張性と柔軟性を持っています。
AWS Fargate
AWS Fargateは、サーバーレスのコンテナ実行環境であり、EC2のようにインスタンスの選択や管理の必要がありません。ユーザーは単にコンテナを指定し、Fargateが必要なリソースの確保やスケーリングを自動的に行います。これにより、開発者はインフラの管理から解放され、アプリケーションのコードやビジネスロジックに集中することができます。
参考