2017年1月6日金曜日

ecs-cli を使って Amazon EC2 Container Service に複数のコンテナを立ち上げてみる

概要

前回 Amazon EC2 Container Service (ECS) を使って docker コンテナを 1 つ立ち上げてみました
と同時にサービスの概念 (クラスタやタスク、サービスなど)も説明しました
今回は docker-compose 的なことが ECS でもできる「ecs-cli」というコマンドラインツールを使って複数のコンテナを立ち上げてみました

環境

  • Amazon EC2 Container Service (ECS) 2017/01/05 時点
  • ecs-cli 0.4.5
  • CentOS 7.3.1611

事前準備

特にないです
前回の作業のままでも特に問題ないです
が、この記事では前回作成した ECS 上のリソースはすべて削除してから作業しています

ecs-cli のインストール

作業マシンである CentOS7 上にインストールしましょう

ecs-cli の初期化

操作するリージョンとクラスタを指定して初期化します

  • ecs-cli configure --region ap-southeast-2 --cluster ecs-cli-cluster
  • cat ~/.ecs/config

config ファイルができていれば OK です
リージョンは ap-southeast-2 を使っています
クラスタ名は自由に決めて OK です、今回は「ecs-cli-cluster」という名前にしました
今回は実施しなかったのですが、前回紹介した AWS CLI での aws configure で認証ファイルを作成するのは必要かもしれません

クラスタの作成

ECS 上にクラスタとコンテナインスタンスを作成します

  • ecs-cli up --capability-iam --keypair your_ssh_key
INFO[0001] Created cluster                               cluster=ecs-cli-cluster
INFO[0002] Waiting for your cluster resources to be created...
INFO[0002] Cloudformation stack status                   stackStatus="CREATE_IN_PROGRESS"
INFO[0064] Cloudformation stack status                   stackStatus="CREATE_IN_PROGRESS"
INFO[0125] Cloudformation stack status                   stackStatus="CREATE_IN_PROGRESS"
INFO[0187] Cloudformation stack status                   stackStatus="CREATE_IN_PROGRESS"

Cloudformation からクラスタとコンテナインスタンスが作成されます
特に指定はしてませんが、他にもセキュリティグループや VPC に必要なリソースが作成されています
作成完了後にコンソールで確認すると以下のようにクラスタとコンテナインスタンスが作成されています
ecs_cli_with_compose1.png

コンテナの作成と起動

クラスタが作成できたらコンテナを作成し起動します
コンテナを起動するための yml ファイルを作成します

  • cat wordpress.yml
vim wordpress.yml
wordpress:
  image: wordpress
  mem_limit: 268435456
  ports:
    - "80:80"
  links:
    - mysql
mysql:
  image: mysql
  mem_limit: 268435456
  environment:
    MYSQL_ROOT_PASSWORD: password

docker hub にある wordpress と mysql イメージを使ってコンテナを作成します
wordpress は 80 ポートでバインドします
基本的なフォーマットは docker-compose.yml と同じですが、いくつか使えない構文があるので注意してください
特に「build」が使えないのでイメージは事前に作成して docker hub で公開しておく必要があります
http://docs.aws.amazon.com/AmazonECS/latest/developerguide/cmd-ecs-cli-compose.html

yml ファイルを作成したらコンテナを起動してみましょう

  • ecs-cli compose --file wordpress.yml up
INFO[0001] Using ECS task definition                     TaskDefinition="ecscompose-compose:2"
INFO[0001] Starting container...                         container="8081492f-617a-4072-b03b-c5bf55cf6c2a/mysql"
INFO[0001] Starting container...                         container="8081492f-617a-4072-b03b-c5bf55cf6c2a/wordpress"
INFO[0001] Describe ECS container status                 container="8081492f-617a-4072-b03b-c5bf55cf6c2a/wordpress" desiredStatus=RUNNING lastStatus=PENDING taskDefinition="ecscompose-compose:2"
INFO[0001] Describe ECS container status                 container="8081492f-617a-4072-b03b-c5bf55cf6c2a/mysql" desiredStatus=RUNNING lastStatus=PENDING taskDefinition="ecscompose-compose:2"
INFO[0013] Started container...                          container="8081492f-617a-4072-b03b-c5bf55cf6c2a/wordpress" desiredStatus=RUNNING lastStatus=RUNNING taskDefinition="ecscompose-compose:2"
INFO[0013] Started container...                          container="8081492f-617a-4072-b03b-c5bf55cf6c2a/mysql" desiredStatus=RUNNING lastStatus=RUNNING taskDefinition="ecscompose-compose:2"

起動できたら ps でプロセスを確認するとコンテナが起動しているのを確認できると思います

  • ecs-cli ps
Name                                            State                Ports                      TaskDefinition
8081492f-617a-4072-b03b-c5bf55cf6c2a/wordpress  RUNNING              54.206.100.168:80->80/tcp  ecscompose-compose:2
8081492f-617a-4072-b03b-c5bf55cf6c2a/mysql      RUNNING                                         ecscompose-compose:2

コンソールで確認してもタスクが起動しコンテナが RUNNING になっていることが確認できると思います
ecs_cli_with_compose2.png

動作確認

コンテナインスタンスの 80 番ポートにアクセスすると wordpress の画面が表示されるのが確認されると思います
設定や記事の投稿も問題なく行えました
ecs_cli_with_compose3.png

コンテナを停止したい場合は以下でできます
start にすれば再度同じコンテナを起動できます

  • ecs-cli compose --file wordpress.xml stop

が stop/start でコンテナを再起動すると ECS 上では別タスクが走ることになり全く別のコンテナが起動してしまいます
つまりデータを保存している DB も完全に初期化されてしまいます
ちょっここの辺りは別途調査して別記事とかで初回できればと思います
これができないと辛いですよね

最後に

ecs-cli を使って ECS 上に複数のコンテナを使ったアプリを立ち上げてみました
普通はこのあとサービスの登録を行いコンテナが自動起動するように設定するようです

前回はコンソールをメインで説明していきましたが今回はコマンドラインをベースに ECS を操作しました
コマンドラインベースの場合一番はじめにリポジトリやサービスを作る必要がないので、もしかしたらこっちのほうが導入しやすいかもしれません
ただ、基本的には docker-compose 用のツールになるので yml ファイルを準備したり ecs-cli の操作方法は覚える必要があります

また今回は docker hub で公開されているイメージを使いました
独自で作成したアプリも ECS 上で動かすことができるようなのでそれも試してみたいと思います

0 件のコメント:

コメントを投稿