またーり くおんつ ノート

お勉強した初歩的なことを書くチラシの裏

AWS Elastic Container Service CLIチュートリアル1

先週やったAWS ECSのecs-cliでのチュートリアルの続き.

docs.aws.amazon.com

コンテナクラスターの立ち上げ

key-pairを立ち上げるリージョンに作っておく.

$ aws ec2 create-key-pair --key-name ecs-instances-default-cluster --query 'KeyMaterial' --output text > ecskey.pem
$ chmod 400 ecskey.pem

当たり前だけど、–keypairオプションには上で作った–key-nameを指定する必要がある.
(地味に間違えたが, .pemを指定するのではない.)

$ ecs-cli up --keypair ecs-instances-default-cluster --capability-iam --size 2 --instance-type t2.medium 
INFO[0002] Created cluster cluster=ecs-cli-demo region=us-east-2                                                                
INFO[0004] Waiting for your cluster resources to be created...                  
INFO[0005] Cloudformation stack status  stackStatus="CREATE_IN_PROGRESS"                                                          
INFO[0068] Cloudformation stack status stackStatus="CREATE_IN_PROGRESS"                                                                         
INFO[0132] Cloudformation stack status stackStatus="CREATE_IN_PROGRESS"                                                                        
INFO[0195] Cloudformation stack status stackStatus="CREATE_IN_PROGRESS"

特にERRORが出ずに終わったらOKな模様.

もし間違えたり、ERRORに途中でなってしまったら, 都度downコマンドを実行しないとダメなようだ.

$ ecs-cli down --force

ここは少しめんどい.
(ERRORでも途中まで立ち上がったものは自動でshutdownされない模様.)

docker-composeの構成

チュートリアルにしたがってdocker-compose.ymlみたいなのを作る.

docker-composeに慣れている人ならだいたいわかる.
今回はwordpressmySQLのコンテナをリンクして立てる.
いろんな環境変数やマシンリソースを指定することも出来て, docker-composeは便利.

hello-world.ymlとしてlocalに以下を保存.

version: '2'
services:
  wordpress:
    image: wordpress
    cpu_shares: 100
    mem_limit: 524288000
    ports:
      - "80:80"
    links:
      - mysql
  mysql:
    image: mysql
    cpu_shares: 100
    mem_limit: 524288000
    environment:
      MYSQL_ROOT_PASSWORD: password

クラスターに上記をデプロイする.
docker-compose.ymlという名前だった場合は–fileオプションは省略可能.
この辺りもdocker-composeと同じだ.

$ ecs-cli compose --file hello-world.yml up
INFO[0002] Using ECS task definition TaskDefinition="ecscompose-ecs-demo-php-simple-app:1"                                                    
INFO[0002] Starting container... container="2e0241f0-ac16-444f-8fda-82980689cc04/wordpress"                                               
INFO[0002] Starting container... container="2e0241f0-ac16-444f-8fda-82980689cc04/mysql"                                                   
INFO[0002] Describe ECS container status container="2e0241f0-ac16-444f-8fda-82980689cc04/wordpress" desiredStatus=RUNNING lastStatus=PENDING taskDefinition="ecscompose-ecs-demo-php-simple-app:1"                                 
INFO[0002] Describe ECS container status container="2e0241f0-ac16-444f-8fda-82980689cc04/mysql" desiredStatus=RUNNING lastStatus=PENDING taskDefinition="ecscompose-ecs-demo-php-simple-app:1"                                     
INFO[0015] Describe ECS container status  container="2e0241f0-ac16-444f-8fda-82980689cc04/wordpress" desiredStatus=RUNNING lastStatus=PENDING taskDefinition="ecscompose-ecs-demo-php-simple-app:1"                                 
INFO[0015] Describe ECS container status  container="2e0241f0-ac16-444f-8fda-82980689cc04/mysql" desiredStatus=RUNNING lastStatus=PENDING taskDefinition="ecscompose-ecs-demo-php-simple-app:1"                                     
INFO[0027] Describe ECS container status  container="2e0241f0-ac16-444f-8fda-82980689cc04/wordpress" desiredStatus=RUNNING lastStatus=PENDING taskDefinition="ecscompose-ecs-demo-php-simple-app:1"                                 
INFO[0027] Describe ECS container status  container="2e0241f0-ac16-444f-8fda-82980689cc04/mysql" desiredStatus=RUNNING lastStatus=PENDING taskDefinition="ecscompose-ecs-demo-php-simple-app:1"                                     
INFO[0040] Started container... container="2e0241f0-ac16-444f-8fda-82980689cc04/wordpress" desiredStatus=RUNNING lastStatus=RUNNING taskDefinition="ecscompose-ecs-demo-php-simple-app:1"                                 
INFO[0040] Started container... container="2e0241f0-ac16-444f-8fda-82980689cc04/mysql" desiredStatus=RUNNING lastStatus=RUNNING taskDefinition="ecscompose-ecs-demo-php-simple-app:1" 

立ち上がったコンテナクラスターの確認もdocker-composeと同様.
ちゃんとport 80でwordpressが立ち上がっていて, mySQLも同時に立ち上がってることがわかる.

$ ecs-cli ps                                 
Name State Ports  TaskDefinition                                                                   
2e0241f0-ac16-444f-8fda-82980689cc04/wordpress  RUNNING  13.59.57.80:80->80/tcp  ecscompose-ecs-demo-php-simple-app:1                                             
2e0241f0-ac16-444f-8fda-82980689cc04/mysql RUNNING     ecscompose-ecs-demo-php-simple-app:1            

時間がきたのでコンテナを落として終了.

$ ecs-cli down --force

docker-composeと同じでかなり便利!
先にクラスターを立ち上げておいて後からcompose upするという流れなのな.