AWS-Cliを利用し、任意のNameタグのインスタンスのPrivateIPを取得するワンライナー


前書き

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ライフを。