EC2 上でSubversion+Redmine の環境を構築しましたが、 インスタンスを停止して、再起動するとElastic IP の割り当てが解除されてしまいます。
そこで、インスタンスの起動時に自動的にElastic IP を割り当てるようにします。
OSはUbuntu12.04LTS 64bit版です(BitNami Redmineスタック)。
なお、EC2のコマンドラインツールについては、AWS のドキュメントやこちらの記事を参考にしてください。また、本記事のもとになっているSubversion+Redmine の環境については、こちらを参考にしてください。
Elastic IPを起動時に割り当て
ネットを調べると、似たようなことを既にやられていた方がいました。
基本的にはやってることは同じです。ec2に接続する際に環境変数と鍵を/etc/ec2に置くように変更しています。Elastic IP の自動割当て用に作成したスクリプトを、/etc/init.d/auto_elastic_ip として保存しておきます。
#!/bin/sh ### BEGIN INIT INFO # Provides: auto_elastic_ip # Required-Start: # Required-Stop: # Should-Stop: # Default-Start: 2 # Default-Stop: # Short-Description: Assign Elastic IP automatically. # Description: Assign Elastic IP automatically. ### END INIT INFO # # based on http://d.hatena.ne.jp/techmedia-think/20090625/1245923190 # modified by Junichi MORI, 2012/12/7 # IP address was assigned from AWS manageent Console on Web Browser ELASTIC_IP_ADDRESS=xxx.xxx.xxx.xxx # environment variable seup EC2_ENV=/etc/ec2/bash_ec2env if [ ! -f $EC2_ENV ] then echo "error: ec2 environmental variable definition file is missing." exit -1 fi . $EC2_ENV # get instance id EC2_INSTANCE_ID=`curl -s http://169.254.169.254/latest/meta-data/instance-id` # Carry out specific functions when asked to by the system case "$1" in start) echo "Assigning Elastic IP Address. IP=$ELASTIC_IP_ADDRESS INSTANCE=$EC2_INSTANCE_ID" ec2-associate-address $ELASTIC_IP_ADDRESS -i $EC2_INSTANCE_ID >/dev/null 2>&1 ;; stop) echo "Deassigning Elastic IP Address. IP=$ELASTIC_IP_ADDRESS INSTANCE=$EC2_INSTANCE_ID" ec2-disassociate-address $ELASTIC_IP_ADDRESS >/dev/null 2>&1 ;; esac
環境変数などは、こちらの記事に書いたように、/etc/ec2に置いたファイルで定義しています。
インスタンスの起動時にこれを実行するために、/etc/rc2.d にシンボリックリンクを張ります(Ubuntuはランレベル2で起動します)。シンボリックリンクを自分で貼ってもよいのですが、update-rc.d というコマンドを使えば、ランレベルに応じて自動的にリンクを張ってくれるそうです。
bitnami@ip-10-132-25-214:/etc/init.d$ sudo update-rc.d auto_elastic_ip start 98 2 . Adding system startup for /etc/init.d/auto_elastic_ip ... /etc/rc2.d/S98auto_elastic_ip -> ../init.d/auto_elastic_ip bitnami@ip-10-132-25-214:/etc/init.d$
なお、上記のスクリプトに
### BEGIN INIT INFO ・・・・・ ### END INIT INFO
とあるのは、update-rc.d コマンドで扱うために必要だったためです(他のinit.d 配下のスクリプトをまねました)。自分でリンクを張るなら不要です。
一度、インスタンスを停止して、Elastic IP の割り当てが解除されていることを確認してから、インスタンスを立ち上げます。AWSコンソールでインスタンスを確認して、Elastic IP が割り当てられていればOKです。
また、AWSコンソールで起動したインスタンス上で右クリックをして、Get System Log でログを見ると、
Assigning Elastic IP Address. IP=xxx.xxx.xxx.xxx INSTANCE=i-xxxxxxxx
とメッセージがでています。
(参考:メタデータについて)