前書き
AutoScalingなどでサーバーを動的に増減させているときは、インスタンスにsshでログインしたいたびにIPを調べる必要があり、その都度、Webコンソールに入るってIPを調べるのは煩わしく感じていたので書きました。
ワンライナー
そんなときにaws-cliを利用し、以下のようなワンライナーを作成しました。
※ 検索対象のタグの値
という部分をPrivateIPを調べたいインスタンスのNameタグの内容に置き換えてください。
aws ec2 describe-instances --filter "Name=tag-key,Values=Name" "Name=tag-value,Values=検索対象のNameタグの値" --query 'Reservations[].Instances[?State.Name==`running`].PrivateIpAddress[]'
これでIPを取得できます!
[
"172.30.13.xx",
"172.30.14.xx",
"172.30.16.xx"
]
ちょっと発展したシェル
一応外部からprofileやNameタグの値を指定できるようにシェルも書きました。
get-ec2-ipaddresses.sh
#!/bin/bash
NAME=$1
PROFILE=$2
OTHER=$3
aws ec2 describe-instances --filter "Name=tag-key,Values=Name" "Name=tag-value,Values=$NAME" --query 'Reservations[].Instances[?State.Name==`running`].PrivateIpAddress[]' --profile $2 $3
実行方法
Profileが develop
で Nameタグの内容が test
から始まるインスタンスを取得したいとき。
./get-ec2-ipaddresses.sh test* develop
まとめ
aws コマンドの --query
部分で指定している
.Instances[?State.Name==`running`]
は、とても便利で、インスタンスの状態が起動中のもの取得するというような記述です。
私も今日おしえてもらったので、これからどんどん使っていきたいです。
よいCLIライフを。