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と紐付いてる。

 

関連記事