2012年9月27日木曜日

EC2のコマンドラインツールのインストールと起動時にホスト名をNameタグの値とする方法

スズキです。

下記で"Auto Scaling"でEC2を自動起動するときに、
EC2のNameタグもつけるように設定していましたが、
この場合、すべてのEC2で同じ値のタグになってしまいます。

EC2ごとに違う値にしたいときは、やはり起動時にAPIを用いて設定するしかありません。

ということで、設定するスクリプトを作成してみました。

まずは、EC2のコマンドラインツールのインストールです。
# cd /opt/
# curl -OL http://s3.amazonaws.com/ec2-downloads/ec2-api-tools.zip
# unzip ec2-api-tools.zip
# ln -s ec2-api-tools-1.6.3.1 ec2-api-tools
# rm -f ec2-api-tools.zip

コマンドラインツールが使えるように環境変数の設定です。
# export JAVA_HOME=/usr/lib/jvm/jre
# export EC2_HOME=/opt/ec2-api-tools
# export PATH=$PATH:$EC2_HOME/bin 
# export AWS_ACCESS_KEY=XXXXXXXX
# export AWS_SECRET_KEY=YYYYYYYY
# export EC2_URL=https://ec2.ap-northeast-1.amazonaws.com

下記コマンドが実行できれば、準備OKです。
# ec2-version 
1.6.3.1 2012-08-15

次にタグの設定ですが、EC2関係のコマンドが多すぎて探すのが大変だったので、
下記のようにして、対象のコマンド(ec2-create-tags)をみつけました。
# ls -1 $EC2_HOME/bin/ | grep -v cmd | grep tag
ec2-create-tags
ec2-delete-tags
ec2-describe-tags
ec2addtag
ec2deltag
ec2dtag
ec2tag

タグは下記のように実行してつけることができます。
# ec2-create-tags i-905bb493 \
> --tag Name=Suzuki
TAG instance i-905bb493 Name Suzuki

最後にスクリプト化です。(仕様は下記です)
  • メタデータから自分のインスタンスIDを取得してNameタグを設定する。
  • 設定するNameタグはEC2_PREFIXとIPアドレス(メタデータから)をつなげたもの
  • ついでに同じ値でホスト名も設定する
#!/bin/sh

# エラー発生時にNGと終了ステータスコードを出力
set -e
trap 'echo NG:$?' ERR

# コマンドラインツールを利用する環境変数を指定(環境に応じて!)
export JAVA_HOME=/usr/lib/jvm/jre
export EC2_HOME=/opt/ec2-api-tools
export PATH=$PATH:$EC2_HOME/bin
export AWS_ACCESS_KEY=XXXXXXXX
export AWS_SECRET_KEY=YYYYYYYY
export EC2_URL=https://ec2.ap-northeast-1.amazonaws.com

# "EC2"の情報を指定(環境に応じて!)
EC2_PREFIX="suzuki"

# メタ情報の取得(名前決定で必要なものを取得!)
INSTANCE_ID=`curl -s http://169.254.169.254/latest/meta-data/instance-id`
echo "INSTANCE ID: " $INSTANCE_ID
LOCAL_IPV4=`curl -s http://169.254.169.254/latest/meta-data/local-ipv4`
echo "LOCAL IPV4: " $LOCAL_IPV4

# 名前の設定(仕様に応じて!)
NAME=${EC2_PREFIX}-${LOCAL_IPV4}
echo "NAME: " ${NAME}

# ホスト名とNameタグの設定
hostname ${NAME}
ec2-create-tags ${INSTANCE_ID} --tag Name=${NAME}

# 正常終了
echo OK:0
exit 0
"rc.local"などで実行すれば、該当する値が起動時にホスト名とNameタグに設定されます。
ネーミングルールに従い、EC2_PREFIXやメタデータから取得する情報などを
変える必要があります。

コマンドラインツールを使ったスクリプトがたまってきた...
--------
http://www.suz-lab.com

0 コメント: