【AWS】EC2サーバに固定IPなしで独自ドメインでアクセスする方法

  • AWS技術情報
  • 2014-01-30

2014年初投稿のonagataniです。こんにちわ。
※一部コードを修正したのでもし使用されている方がいましたら最新版にアップデートして下さい。

awslogo.gif

さて、皆さん知っての通りEC2ではグローバルIPアドレスが再起動の度に変更されてしまいます。 ドメインを当てて運用する場合にはElasticIPを使用するかELBを使用するのでほとんどの場合は問題ありませんが AWSではElasticIPは原則1アカウントで5つ迄ですし、ELBも利用量が発生してしまいます。 そこでDDNS的にRoute53のAレコードを現在EC2に設定されているPublicIPに自動で設定するスクリプトを作成しました。 テスト環境など停止起動を激しく行う場合に便利かと思います(ELBを使うとせっかく停止して安く済んでも意味がないですからね)。
※ググって見たところ意外とこういった事を便利に行うスクリプトが無いように見えたんですが、githubにRuby版のスクリプトが上がっていました。とはいえPerl版があってもよさそうなので紹介させて下さい><

準備

  • 予めRoute53に該当ホスト名のAレコードを登録して下さい
  • IAMでRoute53フルアクセス可能なユーザを作成しAWS_ACCESS_KEY、AWS_SECRET_KEYをメモして下さい

スクリプトのインストール

Route53を操作するスクリプトをインストールします

Perlモジュールのインストール

yumのepelリポジトリを使用可能にしてから実施して下さい。こちらの記事のようにシステム標準とは別にPerlを導入している場合はcpanmだけでモジュールをインストールして下さい

# yum install perl-Mouse 
# curl -L http://cpanmin.us | perl - Net::Amazon::Route53 LWP::Protocol::https::Socket Regexp::Assemble

ソースの取得

githubからroute53ddnsのソースを落として設置します

# wget 'https://raw.github.com/skyarc/p5-route53ddns/master/route53ddns'
# chmod 755 route53ddns
# mv route53ddns /usr/local/bin/

サーバ再起動時に実行されるように設定

# vim /etc/rc.local
以下を最後に追記
# /usr/local/bin/route53ddns --id=Access Key ID --key=Secret Access Key --zone=example.com --host=hoge.example.com --host=fuga.example.com

route53ddnsの使用方法

引数

id Route53へのアクセス権のあるユーザのAccess Key ID。環境変数AWS_ACCESS_KEYが設定されている場合は入力不要です
key Route53へのアクセス権のあるユーザのSecret Access Key。環境変数AWS_SECRET_KEYが設定されている場合は入力不要です
zone Route53に登録してあるゾーン名
host DDNSを行うFQDN名。複数指定が可能です

以上で再起動する毎にRoute53のAレコードが現在のEC2のPublicIPになります。