2012年10月1日月曜日

自分が"Auto Scaling"で起動したEC2かどうかの確認

スズキです。

"Auto Scaling"から起動されたEC2は、下記のように" aws:autoscaling:groupName"タグが
付与されます。


なので、このタグの存在をチェックすれば、自分が"Auto Scaling"から起動されたEC2かどうか
確認できるはずです。

ということで、下記でインストールしたEC2のコマンドラインツールでチェックしてみます。
EC2のコマンドラインツールのインストールと起動時にホスト名をNameタグの値とする方法
タグは下記で確認することができます。
# ec2-describe-tags
TAG  instance  i-da1fdcd9     aws:autoscaling:groupName  vpc-ag-2
TAG  instance  i-965bb495     Name  OpwnVPN
TAG  instance  i-cde3f7cd     Name  Win
TAG  instance  i-da1fdcd9     Name  VPC-AS
TAG  image     ami-04289f05   Name  CDP
TAG  snapshot  snap-f5db769e  Name  suz-lab_ebs_centos-core-x86_64-6.0.0

特定のインスタンスのみを取得するには"--filter"オプションを使います。
# ec2-describe-tags --filter resource-id=i-da1fdcd9
TAG  instance  i-da1fdcd9  aws:autoscaling:groupName  vpc-ag-2
TAG  instance  i-da1fdcd9  Name  VPC-AS
"--filter"オプションの指定のしかたは、下記で詳しく説明されています。
DescribeTags - Amazon Elastic Compute Cloud

これを"aws:autoscaling:groupName"で"grep"して、
# ec2-describe-tags --filter resource-id=i-da1fdcd9 \
> | grep aws:autoscaling:groupName
TAG  instance  i-da1fdcd9  aws:autoscaling:groupName  vpc-ag-2
"wc"で行数を取得すれば、"1"なら"Auto Scaling"から起動、"0"なら普通に起動、
# ec2-describe-tags --filter resource-id=i-da1fdcd9 \
> | grep aws:autoscaling:groupName \
> | wc -l
1
ということになります。

最後にシェルスクリプト化です。
#!/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 EC2_URL=https://ec2.ap-northeast-1.amazonaws.com
export AWS_ACCESS_KEY=XXXXXXXX
export AWS_SECRET_KEY=YYYYYYYY

# インスタンスIDの取得
INSTANCE_ID=`curl -s http://169.254.169.254/latest/meta-data/instance-id`

# "aws:autoscaling:groupName"タグの存在チェック
ec2-describe-tags --filter resource-id=${INSTANCE_ID} \
| grep aws:autoscaling:groupName \
| wc -l

# 正常終了
exit 0
自分のインスタンスIDはメタデータから取得しています。

そろそろ、この手のスクリプトは"github"で管理したい...
--------
http://www.suz-lab.com

0 コメント: