コマンドラインツール使ってVPCでAuto ScalingとAuto Scaling Groupのタグの変更はas-create-or-update-tagsを使うの記事で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
下記コマンドが実行できれば、準備完了です。
# 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やメタデータから取得する情報等を変える必要があります。
コマンドラインツールを使ったスクリプトが溜まってきました。