Elastic IPを自動で割り振りたい
AWSはインスタンスを起動する度にPublic IPが変わってしまい、非常にウザいので、Elastic IPを使って固定IPを割り振ることにした。Elastic IPはインスタンスのInstance IDと紐付くことになるため、Amazon EBSと同じく、インスタンスを起動するタイミング、shutdownするタイミングで紐付きを解除することにした。
参考:[TechDay] 第7回 Amazon Elastic Compute Cloud (Amazon EC2) : Elastic IP
http://builder.japan.zdnet.com/member/u502383/blog/2008/11/08/entry_27017766/
1、固定IP取得
AWS Management Consoleとかで固定IPをallocateする。
2、スクリプト準備
/rootに.ec2envを作成。自分とこの環境に合わせて適宜修正。
(2014/10/12追記)
EC2_PRIVATE_KEY、EC2_CERT環境変数を使ったAWS CLIツールアクセスはできなくなるので、IAM Roleを活用しましょう。
参考:Private key authentication has been deprecated from the CLI.
export JAVA_HOME=/usr/local/jre1.6.0_13
export EC2_HOME=/usr/local/ec2-api-tools-1.3-34128/
export PATH=$PATH:$EC2_HOME/bin:$JAVA_HOME/bin
export EC2_PRIVATE_KEY=/root/pk-<自分とこのファイル名>.pem
export EC2_CERT=/root/cert-<自分とこのファイル名>.pem
/etc/init.dにaws_elastic_ipを作成。
#! /bin/sh
#
ELASTIC_IP_ADDRESS=自分とこのelastic IP
. /root/.ec2env
EC2_INSTANCE_ID=`ec2din | grep running | gawk '{print $2}'`
# Carry out specific functions when asked to by the system
case "$1" in
start)
echo "Assigning Elastic IP Address."
ec2-associate-address $ELASTIC_IP_ADDRESS -i $EC2_INSTANCE_ID >/dev/null 2>&1
;;
stop)
echo "Deassigning Elastic IP Address."
ec2-disassociate-address $ELASTIC_IP_ADDRESS >/dev/null 2>&1
;;
esac
exit 0
chmodしておく。
3、起動スクリプト配置
rc4.dとかにリンクはっておく。
ln -s ../init.d/aws_elastic_ip K98aws_elastic_ip
ln -s ../init.d/aws_elastic_ip S98aws_elastic_ip
4、インスタンス落として、またlaunchしてテスト
elastic IPのステータス見ると、Instance IDとの紐付き消えてる。
起動メッセージを見ると
[ OK ]
Starting aws_elastic_ip: Assigning Elastic IP Address.
[ OK ]
Starting HAL daemon: [ OK ]
elastic IPのステータス見ると、新しいInstance IDと紐付いてる。