本ページは、AWS に関する個人の勉強および勉強会で使用することを目的に、AWS ドキュメントなどを参照し作成しておりますが、記載の誤り等が含まれる場合がございます。

最新の情報については、AWS 公式ドキュメントをご参照ください。

コンテナ化されたアプリケーションのデプロイ、管理、スケーリングを容易にするフルマネージドコンテナオーケストレーションサービスです。

【AWS Black Belt Online Seminar】Amazon Elastic Container Service (Amazon ECS)(YouTube)(1:00:02)

blackbelt-ecs

【AWS Black Belt Online Seminar】CON201 ECS 入門(YouTube)(0:20:28)

blackbelt-ecs-start

【AWS Black Belt Online Seminar】CON202 ECS Fargate 入門(YouTube)(0:16:29)

blackbelt-ecs-fargate

【AWS Black Belt Online Seminar】CON371 Amazon ECS Anywhere(YouTube)(0:18:36)

blackbelt-ecs-anywhere

【AWS Black Belt Online Seminar】 CON207 Auto Scaling in ECS(0:11:16)

【AWS Black Belt Online Seminar】CON307 ECS Capacity Providers(0:17:47)

blackbelt-ecs-cp

【AWS Black Belt Online Seminar】 CON303 Amazon Elastic Container Service − EC 2 / Fargate Spot ことはじめ(0:20:34)

blackbelt-ecs-ec2-spot

Amazon Elastic Container Service サービス概要

Amazon Elastic Container Service ドキュメント

Amazon Elastic Container Service よくある質問

Amazon Elastic Container Service の料金

Amazon ECS 入門ハンズオン

JP Contents Hub > Containers

ecs-components

  1. クラスター
  2. サービス
  3. タスク
  4. タスク定義

ecs-components-1

起動タイプが EC2 の場合、EC2 インスタンス群のことです。 Fargate の場合は、どのインスタンスで動いているかは隠ぺいされているので、論理的なグループに過ぎない。

システム、環境などで分けるのが一般的だと思われます。

Amazon ECS のサービスクォータ の制限もあるので、クラスターを分けることで、クォータの制限を回避できる場合があります。

また、「Container Insights」を有効化したクラスタと無効化したクラスタを作成することで、CloudWatch のカスタムメトリクスの不要なコストを削減することもできます。

Amazon ECS サービス

ecs-components-2

サービスは、指定した数のタスクを維持したり、ロードバランサーなど、実行するタスクの管理をする単位です。

ecs-components-3

タスク定義とよばれる定義テンプレートに従って起動されるコンテナの集まりです。 タスクの単位で、CPU やメモリの割り当てを行い、割り当てられた範囲でコンテナを起動します。

Amazon ECS の タスク定義

ecs-components-4

タスク定義は、次のようになります。(公式のサンプル)

{
  "containerDefinitions": [
    {
      "command": [
        "/bin/sh -c \"echo '<html> <head> <title>Amazon ECS Sample App</title> <style>body {margin-top: 40px; background-color: #333;} </style> </head><body> <div style=color:white;text-align:center> <h1>Amazon ECS Sample App</h1> <h2>Congratulations!</h2> <p>Your application is now running on a container in Amazon ECS.</p> </div></body></html>' >  /usr/local/apache2/htdocs/index.html && httpd-foreground\""
      ],
      "entryPoint": ["sh", "-c"],
      "essential": true,
      "image": "httpd:2.4",
      "logConfiguration": {
        "logDriver": "awslogs",
        "options": {
          "awslogs-group": "/ecs/fargate-task-definition",
          "awslogs-region": "us-east-1",
          "awslogs-stream-prefix": "ecs"
        }
      },
      "name": "sample-fargate-app",
      "portMappings": [
        {
          "containerPort": 80,
          "hostPort": 80,
          "protocol": "tcp"
        }
      ]
    }
  ],
  "cpu": "256",
  "executionRoleArn": "arn:aws:iam::012345678910:role/ecsTaskExecutionRole",
  "family": "fargate-task-definition",
  "memory": "512",
  "networkMode": "awsvpc",
  "runtimePlatform": {
    "operatingSystemFamily": "LINUX"
  },
  "requiresCompatibilities": ["FARGATE"]
}

代表的なパラメータは次のとおりです。その他のパラメータについては、「タスク定義パラメータ」を参照してください。

memoryReservation(ソフト制限)と memory(ハード制限)の組み合わせ

memoryReservationmemory のパラメータは指定有無などの組み合わせによって割り当てが異なります。

memoryReservation(ソフト制限)

memory(ハード制限)

予約メモリ~上限メモリ

未指定

3072 MiB

3072 MiB ~ 3072 MiB

2048 MiB

未指定

2048 MiB ~ タスクサイズの memory / EC2 のメモリ

2048 MiB

3072 MiB

2048 MiB ~ 3072 MiB

  1. コンテナイメージの作成
  2. コンテナイメージを ECR に Push
  3. クラスター作成
    aws ecs create-cluster --cluster-name fargate-cluster
    
    ecs-create-00-cluster
  4. タスク定義の作成
    aws ecs register-task-definition --cli-input-json file://$HOME/tasks/fargate-task.json
    
    ecs-create-01-taskdef
  5. サービスの作成
    aws ecs create-service --cluster fargate-cluster --service-name fargate-service \
    --task-definition sample-fargate:1 --desired-count 1 --launch-type "FARGATE" \
    --network-configuration "awsvpcConfiguration={subnets=[subnet-abcd1234],securityGroups=[sg-abcd1234]}" \
    --enable-execute-command
    
    ecs-create-02-service

AWS Copilot

AWS Cpilot(コパイロット)とは、Amazon ECS CLI の後継にあたるもので、コンテナ化されたアプリケーション用のコマンドラインインターフェイスです。

コマンド1つといくつかの設定で、可用性を考慮した構成や LB の構築、設定などを行ってくれるというものです。

詳しい使い方はこちら。 https://aws.github.io/copilot-cli/ja/

ecs