コマンドラインツール使ってVPCでAuto ScalingAuto 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やメタデータから取得する情報等を変える必要があります。

コマンドラインツールを使ったスクリプトが溜まってきました。

こちらの記事はなかの人(suz-lab)監修のもと掲載しています。
元記事は、こちら