Serf/Consulで管理を自動化! ~実践的な手法を紹介~

第8回(最終回) 定型作業を自動化するConsul Template

この記事を読むのに必要な時間:およそ 4 分

Webサーバへの応用例

Consulはエージェントの参加・離脱だけでなく,サービスの正常性についても検出することができます。これを応用すると,Webサーバが正常に応答している時だけ,自動的にproxy設定に登録する事ができます。

Nginxを使ってproxyを使う場合であれば,次のproxy.confのようなテンプレートファイルを用意します。新しくservice "web"という項目が増えています。これは,Consul上でwebという名称のサービスが存在する場合のみ,そのポートやアドレスを追加するものです。

upstream frontend { {{range service "web"}}
    server {{.Address}}:{{.Port}};{{end}}
}

server {
    listen 80 default_server;
    location / {
        proxy_pass http://frontend;
    }
}

各々のConsulクライアントでは,Consulの設定ファイルを用意し,エージェント起動時に読み込ませます。次の設定は,10秒毎にローカルのWebサーバにアクセスし,応答があればwebという名称のサービスが正常に稼働していると定義するものです。

{
  "service": {
    "name": "web",
    "tags": [ "nginx" ],
    "port": 80,
    "check": {
      "script": "curl http://127.0.0.1:80/ >/dev/null 2>&1",
      "interval": "15s",
      "timeout": "5s"
    }
  }
}

Consul Templateでは,設定を反映するためにNginxの再起動オプションを付与して起動します。また,Consulサーバが応答しない場合は30秒でリトライする設定も追加しました。

$ consul-template \
    -consul 127.0.0.1:8500 \
    -template "/opt/consul-template/nginx.conf:/etc/nginx/conf.d/proxy.conf:service nginx restart" \
    -retry 30s

これで,Consulクライアントの状態だけでなく,クライアント上のサービスの稼働状態に応じて自動的にNginxの設定ファイルを書き換えられるようになります。

今回のまとめ

Consul単体でのオーケストレーション機能を使うには,自分で実行用のスクリプトを用意する面倒さがありました。Consul Templateは日常業務における面倒な設定作業を,Consulのサービス検出機能と連携して自動的に処理してくれます。設定ファイルの書き換えとコマンドが実行できる場面であれば,監視の自動設定であったり,デプロイ用ツールの自動実行などに応用が期待できます。

連載のまとめ

一連の連載を通して,SerfやConsulの基本的な使い方や応用方法を見てきました。紹介した以外にも,多くの設定オプションが用意されています。

自動化や効率化にあたって,必要とされている機能や役割は,皆さんの現場によって異なると思います。もし活用できそうな場面があれば,SerfやConsulを使うことで,本来やりたいことや業務に集中することへの貢献ができればと願っています。

参考情報

著者プロフィール

前佛雅人(ぜんぶつまさひと)

クリエーションライン株式会社 Technology Evangelist

ホスティングサービスで運用保守サポートに携わった後,現職へ。サポート業務や新技術検証・開発業務を行う。趣味で監視や自動化に関するOSS検証や翻訳を行うのが好き。辛口の日本酒が大好き。

Twitter:@zembutsu