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
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 をつけない場合
コンテナごとに乱数のストリーム名になります。
ストリーム名が下記のフォーマットになるので、付けておいた方が分かりやすいです。
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の方がだいぶ楽ですね。