元々私、オンプレの環境でエンジニアとして育ったこともあり、 IPアドレスに対して親近感がありました。悪く言えば、使うのが当たり前という先入観です。 ただ、最近気づいたことが、 「名前解決をもっと活用すると便利になる」という点です。
IPアドレスの上に一枚Hostnameを入れることで、疎結合になります。 そして具象化することにより、意味を伝えることが出来るようになります。
具体例をバンバン上げて解説していきたいと思います。
開発サーバへ意味を含めたドメイン名を設定する
AWSを想定します。たとえば開発用に外部公開されているSTGがあったとします。まだ名称は決まっていません。 たいていElasticIPなどでIP固定にさせているかもしれまん。 Route53等のDNSサービスでPublic向けのAレコードを以下のように設定させておくと便利です。
//IPは適当です
54.178.158.136 centos01.rkszdev.net
54.178.158.136 centos02.rkszdev.net
54.178.158.137 centos03.rkszdev.net
54.178.158.138 ubuntu01.rkszdev.net
54.178.158.139 ubuntu02.rkszdev.net
サブドメイン名の所で、centosなどインスタンス名の詳細を分かるようにします。 これによりただの数字の羅列から実体のサーバに変わります。
「centos01使いますね」のメッセージだけで、AWSのどのサーバを使うのかを
開発者同士で簡単に周知出来るようになります。
応用編としては、ubuntu01micro.rkszdev.netなどもう少し情報を含めることも出来るかと思います。
ただ、あまりこれを増やしすぎてしまうと、逆にそれを推測できなくなってしまうため、
ある程度シンプルにして置くほうがベターです。
社内ツールにドメインを設定する
54.178.158.136 git.rkszdev.net
54.178.158.137 jenkins.rkszdev.net
これは定番かもしれませんが、Gitリポジトリなどあれば、それを設定していまいます。 メンバー間の説明が用意になります。 社内ツールの移行も、DNS側でIPアドレスを付け替えるだけでいいので、手間が少ないです。 Gitリポジトリサーバを移動しただけで、メンバーの全てのoriginを変えてもらうは さすがに運用的にも非効率かと思います。
Chefノードに活用する
基本的にSSH接続などと同じ原理ですが、Chefノードなどにもドメイン名を活用させます。 上記の原則を利用し、knife prepareの段階で、ドメイン名に対して実行すれば、下記のように準備されるはずです。
{chef-root}/nodes/ubuntu01.rkszdev.net.json
{chef-root}/nodes/ubuntu02.rkszdev.net.json
このようにすれば、「ubuntuサーバに実行するのか」などファイル名だけで情報を 送ることが出来ます。非常にメリットが大きいです。
Nginx/Apacheのバックエンド記述に活用する
名前の設定でドメイン名という概念を利用します。
たとえば、rickynewsをNginxでL7ロードバランスするとします。 Upstream記述をしますが、そこでドメイン名も活用出来ます。
upstream www.rickynews.com {
server 54.178.158.137;
server 54.178.158.138;
}
ちなみにupstreamの所はGitのリポジトリ名にする戦略もあると思います。 以前は私は上記ポリシーを適応していました。 全体ポリシー統一が出来れば問題なさそうです。
ローカルSSH接続管理 (~/ssh/config)
Mac等でSSH接続を管理する場合、~/.ssh/configに更新していくのは定番だと思います。
ここでもHost名としてドメイン名の形式で記述をします。
HOST bitbucket.com
IdentityFile ~/.ssh/credentials/rksz-production-key.pem
HOST *.rksz-dev.net
IdentityFile ~/.ssh/credentials/rksz-test-key.pem
HOST centos*.rksz-dev.net
User centos
HOST ubuntu*.rksz-dev.net
User ubuntu
ドメイン名ドリブンです。ssh configではワイルドカード記述も利用出来るため、 インスタンスごとのユーザ切り替えで積極的に活用します。
上記のようにsshconfigを設定すれば、 下記でスムーズにインスタンスにアクセスすることが出来るようになります。
$ ssh ubuntu01.rksz-dev.net
ポイントとしては、IPアドレスを書かなくてもいいところは書かないことです。 DNSの名前解決に委ねたほうが、比較的トラブルは起きにくいです。
Peco連携
SSH接続をドメイン名ドリブンにすることでPecoと連携がスムーズになります。
sshpeco () {
peco_query=$@
target=$(grep -iE "^host[[:space:]]+[^*]" ~/.ssh/config|grep -v "*"|peco --query="$peco_query"|awk "{print \$2}")
if [ ! -z $target ]
then
env TERM=xterm ssh $target
fi
}
bashrc等に上記を仕込んでおけば、かなりFuzzyにリモートサーバへアクセス可能になります。
$ sshpeco git rksz
// ssh git.rkzs-dev.net が発動し、アクセスが出来るようになります
プライベートIPアドレスや、DNSに対するAdmin権限が無い方は、 手元のssh configさえ記載しておけばひとまず恩恵はさずかれます。
HOST ubuntu01.rksz-dev.local
HostName 192.168.33.104
User vagrant
IdentityFile ~/.ssh/credentials/insecure_private_key