本ページは、AWS に関する個人の勉強および勉強会で使用することを目的に、AWS ドキュメントなどを参照し作成しておりますが、記載の誤り等が含まれる場合がございます。
最新の情報については、AWS 公式ドキュメントをご参照ください。
コンテナ化されたアプリケーションのデプロイ、管理、スケーリングを容易にするフルマネージドコンテナオーケストレーションサービスです。
【AWS Black Belt Online Seminar】Amazon Elastic Container Service (Amazon ECS)(YouTube)(1:00:02)
【AWS Black Belt Online Seminar】CON201 ECS 入門(YouTube)(0:20:28)
【AWS Black Belt Online Seminar】CON202 ECS Fargate 入門(YouTube)(0:16:29)
【AWS Black Belt Online Seminar】CON371 Amazon ECS Anywhere(YouTube)(0:18:36)
【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)
【AWS Black Belt Online Seminar】 CON303 Amazon Elastic Container Service − EC 2 / Fargate Spot ことはじめ(0:20:34)
Amazon Elastic Container Service サービス概要
Amazon Elastic Container Service ドキュメント
起動タイプが EC2 の場合、EC2 インスタンス群のことです。 Fargate の場合は、どのインスタンスで動いているかは隠ぺいされているので、論理的なグループに過ぎない。
システム、環境などで分けるのが一般的だと思われます。
Amazon ECS のサービスクォータ の制限もあるので、クラスターを分けることで、クォータの制限を回避できる場合があります。
また、「Container Insights」を有効化したクラスタと無効化したクラスタを作成することで、CloudWatch のカスタムメトリクスの不要なコストを削減することもできます。
サービスは、指定した数のタスクを維持したり、ロードバランサーなど、実行するタスクの管理をする単位です。
タスク定義とよばれる定義テンプレートに従って起動されるコンテナの集まりです。 タスクの単位で、CPU やメモリの割り当てを行い、割り当てられた範囲でコンテナを起動します。
タスク定義は、次のようになります。(公式のサンプル)
{
"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"]
}
代表的なパラメータは次のとおりです。その他のパラメータについては、「タスク定義パラメータ」を参照してください。
EC2
の場合は省略可能です。省略した場合は、EC2 インスタンスのスペックが上限となります。Fargate
の場合は特定の組み合わせのみ指定可能です。インスタンスプロファイル
のようなものです。memoryReservation
と memory
のパラメータは指定有無などの組み合わせによって割り当てが異なります。
memoryReservation(ソフト制限) | memory(ハード制限) | 予約メモリ~上限メモリ |
未指定 | 3072 MiB | 3072 MiB ~ 3072 MiB |
2048 MiB | 未指定 | 2048 MiB ~ タスクサイズの memory / EC2 のメモリ |
2048 MiB | 3072 MiB | 2048 MiB ~ 3072 MiB |
aws ecs create-cluster --cluster-name fargate-cluster
aws ecs register-task-definition --cli-input-json file://$HOME/tasks/fargate-task.json
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
AWS Cpilot(コパイロット)とは、Amazon ECS CLI の後継にあたるもので、コンテナ化されたアプリケーション用のコマンドラインインターフェイスです。
コマンド1つといくつかの設定で、可用性を考慮した構成や LB の構築、設定などを行ってくれるというものです。
詳しい使い方はこちら。 https://aws.github.io/copilot-cli/ja/