元々私、オンプレの環境でエンジニアとして育ったこともあり、 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