AWSに戻る

Amazon ECS (Elastic Container Service)

Amazon ECSとは

Amazon Elastic Container Service (Amazon ECS) は、AWSが提供するフルマネージドのコンテナオーケストレーションサービスです。Dockerコンテナをサポートし、AWSのインフラストラクチャ上でコンテナ化されたアプリケーションを簡単に実行、停止、管理することができます。ECSを使用することで、独自のコンテナオーケストレーションソフトウェアをインストール・運用・スケーリングする必要がなく、アプリケーションの開発に集中できます。

Amazon ECSの主な特徴

Amazon ECSの起動タイプ

ECSには2つの起動タイプがあり、ニーズに合わせて選択できます:

起動タイプ 説明 適したユースケース
EC2起動タイプ ユーザーが管理するEC2インスタンス上でコンテナを実行 カスタムインスタンスタイプが必要な場合、大規模なワークロード、コスト最適化が重要な場合
Fargate起動タイプ サーバーレスでコンテナを実行(インフラストラクチャ管理不要) インフラストラクチャ管理を避けたい場合、小〜中規模のワークロード、バッチ処理

Amazon ECSの主要コンポーネント

クラスター

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と統合して、タスク間でトラフィックを分散させることもできます。

Amazon ECSの使用方法

ECSは、AWS Management Console、AWS CLI、SDKs、またはインフラストラクチャ as コード(IaC)ツールを使用して利用できます。

クラスターの作成

AWS CLIを使用したクラスターの作成

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}"

Amazon ECSのネットワーキング

ECSは、以下のネットワークモードをサポートしています:

ネットワークモード 説明 起動タイプの互換性
awsvpc 各タスクに独自のElastic Network Interface(ENI)とプライベートIPアドレスを提供 EC2、Fargate(Fargateでは必須)
bridge Dockerのデフォルトネットワークモード。コンテナはホストのブリッジネットワークを使用 EC2のみ
host コンテナはホストのネットワークインターフェースを直接使用 EC2のみ
none コンテナにネットワーク接続なし EC2のみ

Amazon ECSのストレージオプション

ECSタスクには複数のストレージオプションがあります:

Amazon ECSのセキュリティ

ECSのセキュリティを確保するためのベストプラクティス:

タスク実行ロールとタスクロール

タスク定義でのIAMロールの指定

{
  "family": "webapp",
  "executionRoleArn": "arn:aws:iam::123456789012:role/ecsTaskExecutionRole",
  "taskRoleArn": "arn:aws:iam::123456789012:role/ecsTaskRole",
  "containerDefinitions": [
    {
      "name": "web",
      "image": "nginx:latest",
      ...
    }
  ],
  ...
}

Amazon ECSのモニタリングと可観測性

ECSタスクとサービスのパフォーマンスと健全性を監視するためのツール:

Amazon CloudWatch

CloudWatchは、ECSクラスター、サービス、タスクのメトリクスを収集し、アラームを設定して自動アクションをトリガーすることができます。

AWS CloudTrail

CloudTrailは、ECS APIコールを記録し、誰が何をいつ行ったかを追跡します。

Amazon CloudWatch Logs

CloudWatch Logsを使用して、ECSタスクからログを収集、監視、分析することができます。

タスク定義でのCloudWatch Logsの設定

{
  "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"
        }
      },
      ...
    }
  ],
  ...
}

AWS Container Insights

Container Insightsは、コンテナ化されたアプリケーションとマイクロサービスのメトリクスとログを収集、集約、要約します。

Amazon ECSのユースケース

ECSは以下のようなユースケースに適しています:

Amazon ECSとの統合サービス

ECSは他のAWSサービスと統合して、より強力なソリューションを構築できます:

サービス 統合の利点
AWS Fargate サーバーレスコンテナ実行環境を提供
Amazon ECR コンテナイメージのストレージと管理
Elastic Load Balancing タスク間でトラフィックを分散
Amazon VPC タスクの論理的に分離されたネットワーク環境を提供
AWS IAM タスクとサービスのアクセス制御
Amazon CloudWatch タスクとサービスのモニタリングとアラート
AWS CloudFormation ECSリソースのインフラストラクチャ as コード
AWS CodePipeline コンテナアプリケーションの継続的デリバリー

Amazon ECSのベストプラクティス

まとめ

Amazon ECSは、AWSクラウド内でコンテナ化されたアプリケーションを簡単に実行、管理するためのフルマネージドコンテナオーケストレーションサービスです。EC2インスタンス上でコンテナを実行するか、Fargateを使用してサーバーレスでコンテナを実行するかを選択できます。

ECSの主な利点は以下の通りです:

ECSを効果的に活用するには、ワークロードに適した起動タイプの選択、コンテナイメージの最適化、適切なネットワーキングとストレージの設定、セキュリティベストプラクティスの適用、適切なモニタリングの設定が重要です。また、他のAWSサービスと組み合わせることで、より強力で柔軟なコンテナベースのアプリケーションを構築することができます。