ElasticBeanstalk の EC2 内で、environment-name を取得するコマンド
.sh
aws ec2 describe-instances \
--region `curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone | sed -e 's/.$//'` \
--instance-id `/usr/bin/curl -s http://169.254.169.254/latest/meta-data/instance-id` \
--query 'Reservations[0].Instances[0].Tags[?Key==`elasticbeanstalk:environment-name`].Value' \
| ruby -r json -e 'puts JSON.parse(STDIN.read)[0]'
前提条件
ElasticBeanstalk が生成する EC2 の IAM role で、ec2:DescribeInstances の実行が許可されていること
具体的にはこんなポリシーを書けばOK
.json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:DescribeInstances"
],
"Resource": "*"
}
]
}
コマンド解説
--region `curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone | sed -e 's/.$//`'
- region で絞り込む option
-
curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone | sed -e 's/.$//で、自身の region を取得-
インスタンスのメタデータの
placement/availability-zoneでavailability-zoneを取得
-availability-zoneの末尾の英語を取れば、region が取れる
-
インスタンスのメタデータの
--instance-ids `/usr/bin/curl -s http://169.254.169.254/latest/meta-data/instance-id`
- instance-id で絞り込む option
-
インスタンスのメタデータの
placement/instance-idでinstance-idを取得
--query 'Reservations[0].Instances[0].Tags[?Key==`elasticbeanstalk:environment-name`].Value'
-
describe-instancesに渡す検索クエリ - 今回必要なのは、Tagの
elasticbeanstalk:environment-nameの値だけなので、それだけ返すように絞り込んでいる
ruby -r json -e 'puts JSON.parse(STDIN.read)[0]'
- クエリの戻り値が以下のような配列なので、バースして値だけ取得している
.jsob
[
"elasticbeanstalk:environment-name-value"
]