cloudpack大阪の佐々木です。
Zabbix環境をコンテナとしてECS上につくってみたので、まとめときます。
デプロイ方法
ecs-cliとdocker-compose使ってデプロイします。
基本的なやり方はこちら
http://qiita.com/taishin/items/076a7699c787da68e396
docker-coposeはv2が使えるらしいので、今回はv2で記述しています。
http://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/cmd-ecs-cli-compose.html
Amazon ECS CLI の最新バージョンでは、Docker 構成ファイル構文のバージョン 1 と 2 がサポートされています。
v2のリファレンス
https://docs.docker.com/compose/compose-file/compose-file-v2/
docker-compose.yml
docker-compose.yml
version: '2' services: mysql-server: image: mysql mem_limit: 268435456 environment: - MYSQL_DATABASE=zabbix - MYSQL_USER=zabbix - MYSQL_PASSWORD=zabbix - MYSQL_ROOT_PASSWORD=zabbix volumes: - /ecs/zabbix_mysql:/var/lib/mysql logging: driver: awslogs options: awslogs-group: "ECS-zabbix" awslogs-region: "us-east-1" awslogs-stream-prefix: "zabbix" zabbix-server-mysql: image: zabbix/zabbix-server-mysql:ubuntu-3.2-latest mem_limit: 134217728 environment: - DB_SERVER_HOST=mysql-server - MYSQL_USER=zabbix - MYSQL_PASSWORD=zabbix - MYSQL_DATABASE=zabbix logging: driver: awslogs options: awslogs-group: "ECS-zabbix" awslogs-region: "us-east-1" awslogs-stream-prefix: "zabbix" links: - mysql-server ports: - 10050:10050 zabbix-web-nginx-mysql: image: taishin/zabbix-web:latest mem_limit: 134217728 environment: - DB_SERVER_HOST=mysql-server - ZBX_SERVER_HOST=zabbix-server-mysql - MYSQL_USER=zabbix - MYSQL_PASSWORD=zabbix - MYSQL_DATABASE=zabbix - TZ=Asia/Tokyo - COMPOSE_HTTP_TIMEOUT=200 logging: driver: awslogs options: awslogs-group: "ECS-zabbix" awslogs-region: "us-east-1" awslogs-stream-prefix: "zabbix" links: - mysql-server - zabbix-server-mysql ports: - 8090:80
順番に説明します。
コンテナ
下記の3つで構成するようにしました。
- mysql
- zabbix-server
- zabbix-web
Zabbixのコンテナはこちらのを使用します。
https://hub.docker.com/u/zabbix/
zabbix-web
はそのまま使うとグラフの日本語が文字化けしますので、日本語フォントを入れて、Buildします。
Dokcerfileは下記のようになります。
FROM zabbix/zabbix-web-nginx-mysql:ubuntu-3.2-latest RUN apt-get update -y && apt-get install -y fonts-ipafont RUN ln -s /usr/share/fonts/opentype/ipafont-gothic/ipagp.ttf /usr/share/zabbix/fonts/ipagp.ttf RUN sed -i -e 's/graphfont/ipagp/g' /usr/share/zabbix/include/defines.inc.php
ecs-cliで使うdocker-composeはbuild
に対応していないので、あらかじめビルドしてどこかにアップしておく必要があります。
http://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/cmd-ecs-cli-compose.html
重要
build ディレクティブは現在サポートされていません。
今回は自分のdockerhubにアップしておきました。
メモリ制限
メモリ制限は下記に記述でハード制限ができます。ソフト制限はできないっぽいです。
mem_limit: 268435456
永続化データ
MySQLのデータは永続化したいので、ボリュームを作成します。
下記の記述でホストOSの/etc/zabbix_mysql
がコンテナの/var/lib/mysql
にマウントされます。
volumes: - /ecs/zabbix_mysql:/var/lib/mysql
マネジメントコンソールで見るとこんな感じです。
amazon-ecs-optimizedのAMIを使う場合は下記も注意です。
http://qiita.com/taishin/items/cff9c3212d0f697653e4
Log
コンテナが出力するログはCloudwatch Logsに転送します。
http://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/using_awslogs.html
docker-compose v1のときは
log_driver: awslogs
こんな記述でしたが、v2では下記のような表記になります。
logging: driver: awslogs options: awslogs-group: "ECS-zabbix" awslogs-region: "us-east-1" awslogs-stream-prefix: "zabbix"
ロググループはあらかじめ作成しておく必要があります。
ストリームプレフィックスですが、
- awslogs-stream-prefix をつけない場合
コンテナごとに乱数のストリーム名になります。
- awslogs-stream-prefix をつけた場合
ストリーム名が下記のフォーマットになるので、付けておいた方が分かりやすいです。
prefix-name/container-name/ecs-task-id
ポート
ホストの8090番ポートをコンテナの80番ポートに転送しています。
ports: - 8090:80
ちなみに固定ポートではなく、ダイナミックポートにする場合は下記のように書きます。
ports: - :80
デプロイ
ecs-cli compose service up
です。
$ ecs-cli compose service up [10:47:02] WARN[0000] Skipping unsupported YAML option... option name=networks WARN[0000] Skipping unsupported YAML option for service... option name=networks service name=zabbix-server-mysql WARN[0000] Skipping unsupported YAML option for service... option name=networks service name=zabbix-web-nginx-mysql WARN[0000] Skipping unsupported YAML option for service... option name=networks service name=mysql-server INFO[0001] Using ECS task definition TaskDefinition="ecscompose-zabbix-docker:40" INFO[0002] Created an ECS service service=ecscompose-service-zabbix-docker taskDefinition="ecscompose-zabbix-docker:40" INFO[0002] Updated ECS service successfully desiredCount=1 serviceName=ecscompose-service-zabbix-docker INFO[0003] Describe ECS Service status desiredCount=1 runningCount=0 serviceName=ecscompose-service-zabbix-docker INFO[0018] ECS Service has reached a stable state desiredCount=1 runningCount=1 serviceName=ecscompose-service-zabbix-docker
マネージメントコンソールでタスク定義をいじるようり、docker-composeの方がだいぶ楽ですね。