すいません、ちょっと気になったものでのかっぱ@inokara)です。

はじめに

あの Vagrant や Serf でおなじみの hashicorp さんからまたまた ktkr なツールがリリースされました。

ん、あれ、あまり響きませんか?

あの、Vagrant や Serf の hashicorp さんですよ…(涙

ということでちょいダウンロードしてちょい使ってみました

そもそも consul-haproxy なにこれ(ダイナミックダイクマ)

This project provides consul-haproxy, a daemon for dynamically configuring HAProxy using data from Consul.

とあるので consul 使って HAProxy の設定をダイナミックダイクマに書き換えてしまおうというツールのようです。ざっとドキュメントを拝見した限りでは HAProxy には散々泣かされていると自負する自分からすると以下のようなメリットを感じました。

  • Consul からバックエンド情報を取得してバックエンドを動的に書き換えられる(すげー!)
  • もちろん、フロントエンドとバックエンドの関連付けも持たせられそう

パッと使ってみると単純に HAProxy の設定を生成するツール

ドキュメントExample を真似てみました。

バイナリのダウンロード

Consul や Serf と同様に consul-haproxy も郷(Go Lang)で書かれていますのでバイナリを落っことして来るだけです。

wget https://github.com/hashicorp/consul-haproxy/releases/download/v0.1.0/consul-haproxy_linux_amd64

試した環境は Amazon Linux なので consul-haproxy_linux_amd64 をダウンロードしてきます。

テンプレート作成

以下のようなテンプレートを in.conf として作成しておきます。

global
    daemon
    maxconn 256

defaults
    mode tcp
    timeout connect 5000ms
    timeout client 60000ms
    timeout server 60000ms

listen http-in
    bind *:8000{{range .c}}
    {{.}}{{end}}

ポイントは {{range .c}}{{.}}{{end}} の部分です。 c はタグみたいなものだと思って下さい。

HAProxy の設定を生成

上記のテンプレートを元に以下のように実行して設定を生成します。

./consul-haproxy_linux_amd64 -addr=demo.consul.io -in in.conf -backend "c=consul@nyc1:80" -backend "c=consul@sfo1:80" -dry

テンプレート内の c タグが展開され下記のように HAProxy の設定が標準出力に表示されました。

global
    daemon
    maxconn 256

defaults
    mode tcp
    timeout connect 5000ms
    timeout client 60000ms
    timeout server 60000ms

listen http-in
    bind *:8000
    server 0_nyc1-consul-1_consul 192.241.159.115:80
    server 0_nyc1-consul-3_consul 198.199.77.133:80
    server 0_nyc1-consul-2_consul 192.241.158.205:80
    server 1_sfo1-consul-1_consul 107.170.195.169:80
    server 1_sfo1-consul-3_consul 107.170.195.158:80
    server 1_sfo1-consul-2_consul 162.243.155.82:80

ふぇえ。

ちょっとお待ち下さい

あまりこのツールの良さがここまでの書き方では伝わらなかったかもしれませんが、引き続き、動作確認の上で追記していきます!

元記事は、こちらです。