Amazon Elastic Container Service (Amazon ECS) は、AWSが提供するフルマネージドのコンテナオーケストレーションサービスです。Dockerコンテナをサポートし、AWSのインフラストラクチャ上でコンテナ化されたアプリケーションを簡単に実行、停止、管理することができます。ECSを使用することで、独自のコンテナオーケストレーションソフトウェアをインストール・運用・スケーリングする必要がなく、アプリケーションの開発に集中できます。
ECSには2つの起動タイプがあり、ニーズに合わせて選択できます:
起動タイプ | 説明 | 適したユースケース |
---|---|---|
EC2起動タイプ | ユーザーが管理するEC2インスタンス上でコンテナを実行 | カスタムインスタンスタイプが必要な場合、大規模なワークロード、コスト最適化が重要な場合 |
Fargate起動タイプ | サーバーレスでコンテナを実行(インフラストラクチャ管理不要) | インフラストラクチャ管理を避けたい場合、小〜中規模のワークロード、バッチ処理 |
ECSクラスターは、タスクまたはサービスの論理的なグループです。EC2起動タイプを使用する場合、クラスターはコンテナインスタンスのグループでもあります。Fargate起動タイプを使用する場合、AWSがインフラストラクチャを管理します。
タスク定義は、アプリケーションを構成するコンテナのブループリントです。コンテナイメージ、CPU/メモリ要件、ポートマッピング、環境変数、ボリュームなどを指定します。
{
"family": "webapp",
"containerDefinitions": [
{
"name": "web",
"image": "nginx:latest",
"cpu": 256,
"memory": 512,
"essential": true,
"portMappings": [
{
"containerPort": 80,
"hostPort": 80
}
]
}
],
"requiresCompatibilities": [
"FARGATE"
],
"networkMode": "awsvpc",
"cpu": "256",
"memory": "512"
}
タスクは、タスク定義に基づいて起動されるコンテナのインスタンスです。タスクは、クラスター内のコンテナインスタンス(EC2起動タイプ)またはAWSが管理するインフラストラクチャ(Fargate起動タイプ)で実行されます。
ECSサービスは、クラスター内で指定された数のタスクを同時に実行および維持します。タスクが失敗した場合、サービススケジューラは新しいタスクを起動して置き換えます。サービスはApplication Load Balancerと統合して、タスク間でトラフィックを分散させることもできます。
ECSは、AWS Management Console、AWS CLI、SDKs、またはインフラストラクチャ as コード(IaC)ツールを使用して利用できます。
aws ecs create-cluster --cluster-name my-cluster
aws ecs register-task-definition --cli-input-json file://task-definition.json
aws ecs create-service \
--cluster my-cluster \
--service-name my-service \
--task-definition my-task:1 \
--desired-count 2 \
--launch-type FARGATE \
--network-configuration "awsvpcConfiguration={subnets=[subnet-0123456789abcdef0,subnet-0123456789abcdef1],securityGroups=[sg-0123456789abcdef0],assignPublicIp=ENABLED}"
aws ecs run-task \
--cluster my-cluster \
--task-definition my-task:1 \
--count 1 \
--launch-type FARGATE \
--network-configuration "awsvpcConfiguration={subnets=[subnet-0123456789abcdef0],securityGroups=[sg-0123456789abcdef0],assignPublicIp=ENABLED}"
ECSは、以下のネットワークモードをサポートしています:
ネットワークモード | 説明 | 起動タイプの互換性 |
---|---|---|
awsvpc | 各タスクに独自のElastic Network Interface(ENI)とプライベートIPアドレスを提供 | EC2、Fargate(Fargateでは必須) |
bridge | Dockerのデフォルトネットワークモード。コンテナはホストのブリッジネットワークを使用 | EC2のみ |
host | コンテナはホストのネットワークインターフェースを直接使用 | EC2のみ |
none | コンテナにネットワーク接続なし | EC2のみ |
ECSタスクには複数のストレージオプションがあります:
ECSのセキュリティを確保するためのベストプラクティス:
{
"family": "webapp",
"executionRoleArn": "arn:aws:iam::123456789012:role/ecsTaskExecutionRole",
"taskRoleArn": "arn:aws:iam::123456789012:role/ecsTaskRole",
"containerDefinitions": [
{
"name": "web",
"image": "nginx:latest",
...
}
],
...
}
ECSタスクとサービスのパフォーマンスと健全性を監視するためのツール:
CloudWatchは、ECSクラスター、サービス、タスクのメトリクスを収集し、アラームを設定して自動アクションをトリガーすることができます。
CloudTrailは、ECS APIコールを記録し、誰が何をいつ行ったかを追跡します。
CloudWatch Logsを使用して、ECSタスクからログを収集、監視、分析することができます。
{
"family": "webapp",
"containerDefinitions": [
{
"name": "web",
"image": "nginx:latest",
"logConfiguration": {
"logDriver": "awslogs",
"options": {
"awslogs-group": "/ecs/webapp",
"awslogs-region": "us-west-2",
"awslogs-stream-prefix": "ecs"
}
},
...
}
],
...
}
Container Insightsは、コンテナ化されたアプリケーションとマイクロサービスのメトリクスとログを収集、集約、要約します。
ECSは以下のようなユースケースに適しています:
ECSは他のAWSサービスと統合して、より強力なソリューションを構築できます:
サービス | 統合の利点 |
---|---|
AWS Fargate | サーバーレスコンテナ実行環境を提供 |
Amazon ECR | コンテナイメージのストレージと管理 |
Elastic Load Balancing | タスク間でトラフィックを分散 |
Amazon VPC | タスクの論理的に分離されたネットワーク環境を提供 |
AWS IAM | タスクとサービスのアクセス制御 |
Amazon CloudWatch | タスクとサービスのモニタリングとアラート |
AWS CloudFormation | ECSリソースのインフラストラクチャ as コード |
AWS CodePipeline | コンテナアプリケーションの継続的デリバリー |
Amazon ECSは、AWSクラウド内でコンテナ化されたアプリケーションを簡単に実行、管理するためのフルマネージドコンテナオーケストレーションサービスです。EC2インスタンス上でコンテナを実行するか、Fargateを使用してサーバーレスでコンテナを実行するかを選択できます。
ECSの主な利点は以下の通りです:
ECSを効果的に活用するには、ワークロードに適した起動タイプの選択、コンテナイメージの最適化、適切なネットワーキングとストレージの設定、セキュリティベストプラクティスの適用、適切なモニタリングの設定が重要です。また、他のAWSサービスと組み合わせることで、より強力で柔軟なコンテナベースのアプリケーションを構築することができます。