hiroohiのメモ

はてななのでITやスタートアップ周りの話(ほとんどが自分への備忘録だけど)を書いています。

EC2インスタンス起動時にEIPを自動的に設定する方法

提携先との連携等、固定IPアドレスでの通信が必要になるケースはそこそこあると思います。
AWSでオートスケール設定とかして可用性上げとくのはいいのですが、そのときにこれが課題となります。

ということで、http://dogmap.jp/2012/12/20/aws-advent-calendar-2012-day-20/ を参考にしつつ、
Amazon Linuxで起動時に自動的にEIPをassociate出来るようにしてみました。

用意するもの

  • EIPにassociate出来る権限を持ったIAMのpublic key/secret key

やりかた

1)Amazon Linuxのspot instanceを起動する。
2)EIPを取得する(なければ)
3)ec2-userでssh
3)/etc/init.d/の下に以下のスクリプトを適当な名前(例としてautoeip)で作成

#!/bin/sh
# chkconfig: 2345 99 10
# description: auto associate EIP

. /etc/init.d/functions

export JAVA_HOME=/usr/lib/jvm/jre
export EC2_HOME=/opt/aws/apitools/ec2

INSTANCE_ID=`/usr/bin/curl -s http://169.254.169.254/latest/meta-data/instance-id`
EIP=xxx.xxx.xxx.xxx #2)で取得したEIPアドレス
REGION=ap-northeast-1 #リージョン指定はここで

/opt/aws/bin/ec2-associate-address -O (IAM pubkey) -W (IAM seckey) -i ${INSTANCE_ID} ${EIP} --region ${REGION} > /dev/null

exit 0;

4)sudo chmodで/etc/init.d/autoeipに実行権限をつける
5)以下のコマンドで起動時に実行されるようにしておく

% sudo chkconfig --add autoeip
% sudo chkconfig autoeip on

6)インスタンスをstopし、startしてEIPが自動的にassociateされる事を確認
7)このインスタンスからAMIを作る
8)インスタンスをterminate

作成したAMIをオートスケール設定しておけば、たとえ使用中のインスタンスがハングしたり突然落ちたりしても大丈夫ですね。