cloudpack大阪の佐々木です。

概要

Zabbixを使うとなると、サーバの面倒はどうするんだ?って話に絶対なるので、AWS Fargateで動かして、サーバーレス化してしまおうということです。
(実際はサーバーレスってい言えるかどうか分かりませんが・・・)
実用に耐えうるかは考慮してません。

構成イメージ

IPが変わるのもどうかなーということで、NLB、ALBを使ってホスト名でアクセスできるようにします。
ZabbixサーバはNLBで、ZabbixWebの方はALBで受けるので、サービスを分けています。

手順

VPCまわり、クラスタ、RDS、NLB、ALBの手順は省略します。
CloudWatch Logsのロググループも先に作っておく必要があります。

ファイル構成

. ─┬─ server ─┬─ docker-compose.yml
   │          └─ ecs-params.yml
   │
   └─ web ────┬─ docker-compose.yml
              └─ ecs-params.yml

zabbix-server

コンフィグファイル

server/docker-compose.yml

version: '2'
services:
  zabbix-server:
    image: zabbix/zabbix-server-mysql
    ports:
      - "10051:10051"
    environment:
      DB_SERVER_HOST: :<RDSのエンドポイント>
      MYSQL_DATABASE: <RDSに設定したDB名>
      MYSQL_USER: <RDSに設定したユーザー名>
      MYSQL_PASSWORD: <RDSに設定したパスワード>
    logging:
      driver: awslogs
      options:
        awslogs-group: <ロググループ名>
        awslogs-region: us-east-1
        awslogs-stream-prefix: zabbix

server/ecs-params.yml

version: 1
task_definition:
  ecs_network_mode: awsvpc
  task_execution_role: ecsTaskExecutionRole
  task_size:
    cpu_limit: 256
    mem_limit: 0.5GB
  services:
    zabbix-server:
      essential: true

run_params:
  network_configuration:
    awsvpc_configuration:
      subnets:
        - <サブネットID>
        - <サブネットID>
      security_groups:
        - <セキュリティグループ>
      assign_public_ip: ENABLED

起動

$ cd server
$ ecs-cli compose service up --launch-type FARGATE \
 --target-group-arn <NLBのターゲットグループのARN> \
 --container-name zabbix-server \
 --container-port 10051

zabbix-web

コンフィグファイル

web/docker-compose.yml

version: '2'
services:
  zabbix-web:
    image: zabbix/zabbix-web-apache-mysql
    ports:
      - "80:80"
    environment:
      DB_SERVER_HOST: <RDSのエンドポイント>
      MYSQL_DATABASE: <RDSに設定したDB名>
      MYSQL_USER: <RDSに設定したユーザー名>
      MYSQL_PASSWORD: <RDSに設定したパスワード>
      PHP_TZ: Asia/Tokyo
      ZBX_SERVER_HOST: <zabbix-serverのホスト名(NLBのFQDN)>
      ZBX_SERVER_NAME: <zabbixの管理画面に表示される名前>
      ZBX_SERVER_PORT: 10051
    logging:
      driver: awslogs
      options:
        awslogs-group: <ロググループ名>
        awslogs-region: us-east-1
        awslogs-stream-prefix: zabbix

起動

$ cd web
$ ecs-cli compose service up --launch-type FARGATE \
 --target-group-arn <ALBのターゲットグループのARN> \
 --container-name zabbix-web \
 --container-port 80

接続

ブラウザから http://(ALBのFQDN) にアクセスするとWeb管理画面にログインできます。

ダッシュボードでのステータスも正常です

エージェントで指定する Server はNLBのFQDNになります。

まとめ

Zabbixは単純にスケールアウトできるものでもないですので、あまりFargateに適したものではないですが、サーバのメンテは誰がやる?って話が進まないようなときは、とりあえずFargate化してしまえばいいんではないでしょうか?

元記事はこちら

AWS FargateでサーバーレスZabbix