ElastiCacheを作成すると、「Configuration Endpoint」というものが利用でき、
Auto Discoveryで利用するElastiCacheのクラスタ情報を取得することができます。
情報は下記のように「config get cluster」で取得することができます。
# telnet test.xxxxxx.cfg.apne1.cache.amazonaws.com 11211
Trying xxx.xxx.xxx.xxx...
Connected to test.xxxxxx.cfg.apne1.cache.amazonaws.com.
Escape character is '^]'.
config get cluster
CONFIG cluster 0 191
2
test.xxxxxx.0001.apne1.cache.amazonaws.com|10.156.25.174|11211 test.xxxxxx.0002.apne1.cache.amazonaws.com|10.158.181.191|11211
END
quit
Connection closed by foreign host.
上記の情報からノードやポートの情報を切り出すシェルスクリプトを作ってみました。
#!/bin/sh
CONFIG_NODE=test.xxxxxx.cfg.apne1.cache.amazonaws.com
CONFIG_PORT=11211
LINE=`echo config get cluster | nc $CONFIG_NODE $CONFIG_PORT | head -3 | tail -1`
COUNT=`echo $LINE | tr -dc ' ' | wc -c`
COUNT=`expr $COUNT + 1`
for INDEX in `seq 1 $COUNT`; do
NODE=`echo $LINE | cut -d ' ' -f $INDEX`
HOST=`echo $NODE | cut -d '|' -f 1`
PORT=`echo $NODE | cut -d '|' -f 3`
echo $HOST $PORT
done
※下記でインストールしたnetcat(nc)を利用しています。
# yum -y install nc
...
実行すると下記のようにノード情報を切り出すことができます。
# ./test.sh
test.xxxxxx.0001.apne1.cache.amazonaws.com 11211
test.xxxxxx.0002.apne1.cache.amazonaws.com 11211
ElastiCacheのノードを追加し再度実行すると、追加を確認できました。
# ./test.sh
test.xxxxxx.0001.apne1.cache.amazonaws.com 11211
test.xxxxxx.0002.apne1.cache.amazonaws.com 11211
test.xxxxxx.0003.apne1.cache.amazonaws.com 11211