share facebook facebook facebook twitter twitter menu hatena pocket slack

2018.01.16 TUE

AWS FargateでサーバーレスZabbix

佐々木真也

WRITTEN BY 佐々木真也

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

佐々木真也

佐々木真也

2016年cloudpack join。 前職では構築・設計・PMを担当。 その経験を生かし、案件対応だけでなく検証環境の構築も行います。

cloudpack

cloudpackは、Amazon EC2やAmazon S3をはじめとするAWSの各種プロダクトを利用する際の、導入・設計から運用保守を含んだフルマネージドのサービスを提供し、バックアップや24時間365日の監視/障害対応、技術的な問い合わせに対するサポートなどを行っております。
AWS上のインフラ構築およびAWSを活用したシステム開発など、案件のご相談はcloudpack.jpよりご連絡ください。