チュートリアル: ECS CLI を使用して EC2 タスクのクラスターを作成するを参考に学習をしてみた。自分なりに解釈を加えたので、間違っている場合もありますのでその際は、ご指摘下さい。
ECSの概要
こちらの図を拝借して・・・

Cluster: ECSを束ねるもの、よくあるサーバ群の普通のClusterを想像すれば良い
Service: ECSのタスク定義(Task definition)で指定した数のインスタンスを起動させ同時に実行、更に維持させる。例えばTaskが落ちた際にはServiceで指定した数より小さくなるため自動で一つタスクが自動起動する
Task definition: DockerイメージやCPUメモリ、linkなどを定義するもの
事前作業
予め以下の2つを作っておく
・VPCを1つ
-今回は 10.0.0.0/16
で作った
・作成したVPC内にサブネットを2つ(別のAZで)
-
ap-northeast-1a
に10.0.0.0/24
とap-northeast-1c
に10.0.1.0/24
を作成した。
Amazon ECS クラスター名を設定
まずは、Amazon ECS CLI で使用する Amazon ECS クラスター名を設定。この情報はローカル環境(今回はMAC)の ~./ecs/config
に保存される
$ ecs-cli configure --cluster ClusterA --region ap-northeast-1 --default-launch-type EC2 --config-name clustername
--config-name
は clustername
は後で使用するので覚えておくこと。忘れたら ~./ecs/config
の内容を見る
クラスタの作成
【前提条件】
・keypairは「webkey.pem」(これは予めaws consoleで作成しておくこと)
・2台のt2.mediumを作成する。
$ ecs-cli up --keypair webkey.pem \
--capability-iam \
--size 2 \
--instance-type t2.medium \
--cluster-config clustername \
--vpc vpc-0fcXXXXXXXXXXXXXX \
--subnets subnet-0eef76fXXXXXXXXX,subnet-07a826YYYYYYYYYY
INFO[0000] Using recommended Amazon Linux AMI with ECS Agent 1.20.1 and Docker version 18.03.1-ce
INFO[0000] Created cluster cluster=ClusterA region=ap-northeast-1
INFO[0001] Waiting for your cluster resources to be created...
INFO[0001] Cloudformation stack status stackStatus=CREATE_IN_PROGRESS
INFO[0062] Cloudformation stack status stackStatus=CREATE_IN_PROGRESS
INFO[0122] Cloudformation stack status stackStatus=CREATE_IN_PROGRESS
Security Group created: sg-0a599d11111111111
Cluster creation succeeded.
これはCloudformationで作成される。
ちなみに上記は1台で作ったが4台にしたい場合は、 scale
オプションで変更を行う。
scale
を使って変更できる内容は ECS Scale を参照
$ ecs-cli scale --size 4 --capability-iam
のように scale
をつける。この場合、最初に作成したEC2インスタンスはダウンすることなく追加2台で合計4台となる
docker-compose.yml を作成
ここでDockerのコンテナを作成する、 docker-compose.yml
を作成する。
これはDockerでお馴染みのファイルである。これと Dockerfile
を組み合わせて次回はやってみようと思う。
version: '3'
services:
wordpress:
image: wordpress
ports:
- "80:80"
links:
- mysql
logging:
driver: awslogs
options:
awslogs-group: kumonavi-wordpress
awslogs-region: ap-northeast-1
awslogs-stream-prefix: wordpress
mysql:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: password
logging:
driver: awslogs
options:
awslogs-group: kumonavi-mysql
awslogs-region: ap-northeast-1
awslogs-stream-prefix: mysql
次に ecs-param.yml
を作成する。これはCPUやメモリの情報を記したもので docker-compose.yml
が Version3の場合は作成する必要がある。
version: 1
task_definition:
services:
wordpress:
cpu_shares: 100
mem_limit: 524288000
mysql:
cpu_shares: 100
mem_limit: 524288000
サービスを作成する。
今回は docker-compose.yml
に記載したwordpressのWEB+DBを作成する。
下記の up
コマンドは create
と start
の合わせ技です。 create
で サービスの定義を作成し、 start
でタスク定義から 1 つの Amazon ECS タスクを開始します。
$ ecs-cli compose service up --cluster-config kumonavicluster
INFO[0000] Using ECS task definition TaskDefinition="ecs:2"
INFO[0000] Created an ECS service service=ecs taskDefinition="ecs:2"
INFO[0000] Updated ECS service successfully desiredCount=1 serviceName=ecs
INFO[0015] (service ecs) has started 1 tasks: (task AAAA-22222ー333333
-1111111111). timestamp="2018-08-15 00:52:25 +0000 UTC"
INFO[0090] Service status desiredCount=1 runningCount=1 serviceName=ecs
INFO[0090] (service ecs) has reached a steady state. timestamp="2018-08-15 00:53:42 +0000 UTC"
INFO[0090] ECS Service has reached a stable state desiredCount=1 runningCount=1 serviceName=ecs
サービスを2つにする
$ ecs-cli compose service scale 2
確認作業
$ ecs-cli ps
Name State Ports TaskDefinition
485cb1ed-1e40-11111-2222-a5e47aw31253a/mysql RUNNING ecs:3
485cb1ed-1e40-11111-2222-a5e47a22223a/wordpress RUNNING 1.1.2.2:80->80/tcp ecs:3
4f4d1431-df3d-11111-2222-69f432222268/mysql RUNNING ecs:3
4f4d1431-df3d-4616-a9a8-69f43b22228/wordpress RUNNING 1.1.3.3:80->80/tcp ecs:3
お掃除
最後はきれいにします。
まずはサービスを削除します。
ecs-cli compose service rm --cluster-config cluster-name
次にクラスターを削除します。
ecs-cli down --force --cluster-config cluster-name