AWS EC2 でインスタンスを作った後は動的DNSを使用すると楽チンだよ

Amazon EC2インスタンスAmazon Linux)を作成して使用するには、インスタンスの作成の流れの中で公開鍵を作って、SSHでログインすることになります。

ただ、これがまた少し面倒で、EC2 Dashboardインスタンスをスタートした後に、都度割り当てられるPublic DNS名をインスタンスのDescriptionを開いて探しにいって、値をコピーして、ターミナルのコマンドに貼付けるってことをやる必要があります。

そこで、EC2のヘルプドキュメントには「面倒だから動的DNSサービスを使ったらいいよ」ってことが書いてあります。そのドキュメントの内容をざっとなめたので、中身は同じだけど短くまとめてかつ素人が素人に説明する感じで補足いれたのでぜひ参考にしてください。

概要

ここでは、インスタンスを作るのと公開鍵の所は省略します。EC2のこちらのドキュメントを読めばできると思います。

今回問題にしている、SSHでログインする方法はこんな感じになります。

ssh -i /<path>/<key_pair>.cer ec2-user@<public_DNS_name>
<path>    : 鍵を保存しているフルパス
<key_pair> : ダウンロードした鍵のファイル名
ec2-user   : AmazonLinuxの場合はデフォルトのユーザー名がec2-user
<public_DNS_name> : ec2+パブリックIPアドレス+リージョン
例)ec2-12-34-56-78.us-west-2.compute.amazonaws.com

上記のように都度割り振られるIPアドレス込みのDNS Nameになっているので、毎回値が異なってしまい、冒頭のように面倒なことになります。

一方で、そのコンピュータの所在地を表すIPアドレスは数字の羅列で分かり辛いので、一般的にインターネットを使う場合は、もう少し分かりやすい「名前」や「名称」のようなものを使用します。その「名称」と「IPアドレス」の組み合わせを登録しておいて変換する仕組みがDNSです。

変換の処理を行うDNSサーバーがどこにあるか(どれを使うか)は人それぞれのネット環境によって異なりますが、No-Ip.comのような無料で提供されているDNSサービスもたくさんあります。
No-Ip.com自体は、独自のドメインを無料もしくは有償で取得できますよ、というのがそもそものサービスで、DNSサーバへIPアドレスを更新するためのクライアントも提供してくれてます。)

そして、Amazon Linuxでは「例えばNo-Ip.comなんかを使えばいいよ!」ということがドキュメントに書いてあります。(今回の話題)

つまり、No-Ip.comにユーザ登録して「名称」に相当するドメイン名を事前に登録しておき、インスタンスが起動された際に、割り当てられたIPアドレスをNo-Ip.comのDNSサーバーのドメイン名に対して自動的に紐づけておく。それによって、ターミナルからSSHログインする際に、No-Ip.comで登録した動的ではない固定的なドメイン名を使用しても、適切なIPアドレスに変換(名前解決)され、EC2のインスタンスにログインする事ができるようになりますよー、ということを言ってます。

LinuxインスタンスにDynamic Update Clientをインストールする

No-Ip.comにもubuntu向けのDUCインストールドキュメントがあるので、こちらをご参照ください。基本的にはそれと同じ事が書いてあるのですが、今回は前述のEC2のドキュメントについて簡単に説明していきます。

1. No-IpのDUCがEPELにあるので、まずはyumでEPELを使えるようにする

$ sudo yum-config-manager --enable epel
EPEL(Extra Packages for Enterprise Linux)とは
Fedora Projectで開発されたRed Hatディストリビューションで使用できるアドオンプログラムのリポジトリです

2. yumでNo-IpのDUC(noip)をインストール

$ sudo yum install -y noip
-y : インストール中のすべての問いにYesで進めるオプションです

3. noipの設定ファイルを作成

$ sudo noip2 -C
No-Ipのログインメールアドレスやパスワード、その他いくつかの質問に応える必要がありますが、詳しくは前述のNo-Ip.comのドキュメントに書いてあります

インストールしたDUC(noip)のサービスを起動する

4. noipサービスを有効にする

$ sudo chkconfig noip on
これによってインスタンス起動時にnoipが開始して、前述のDNSサーバにIPアドレスを更新する処理が走ってくれます

5. 今いまは動いていないので、ひとまずnoipを開始する

$ sudo service noip start
Starting noip2:                                  [  OK  ]
となりサービスが開始され、すぐに更新処理が走ります。(更新までには少し時間がかかります)

ということで、今後ログインする際には以下のようにすればOKです。
(一度上記の状態からExitで抜けてからどうぞ)

ssh -i /<path>/<key_pair>.cer ec2-user@<name>.noip.me
<name>.noip.me :ここはNo-Ip.comでの登録内容によります

以上です!

= 追記 =

インスタンスを作り直したり、いろいろやってるとエラーになることがあります。

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
00:**:**:**:・・・:**:**.
Please contact your system administrator.
Add correct host key in /Users/*****/.ssh/known_hosts to get rid of this message.
Offending RSA key in /Users/******/.ssh/known_hosts:8
RSA host key for *****.noip.me has changed and you have requested strict checking.
Host key verification failed.

known_hostsファイルにいくつかsshの情報が書いてあるので、そのうちの、上記で言うとNo.8のブロックを削除するとうまくいきます。
では!