AWSのEC2のTagにName: host名
のTagを設定しているとする。このTagをもとに起動しているEC2についてhostsファイルを生成したい。
PrivateIP host名
PrivateIP host名
PrivateIP host名
...
awscliのaws ec2 describe-instances
のワンライナーだけで実現できる。
$ aws ec2 describe-instances --filters "Name=instance-state-name, Values=running" --query "Reservations[*].Instances[0].[PrivateIpAddress, (Tags[?Key=='Name'].Value)[0]]" --output text
10.1.22.167 api0001
10.1.40.155 api0002
10.1.7.231 api0003
コマンドが長いので見やすさのため適宜改行を挟む。
aws ec2 describe-instances \
--filters "Name=instance-state-name, Values=running" \
--query "Reservations[*].Instances[0].[PrivateIpAddress, (Tags[?Key=='Name'].Value)[0]]" \
--output text
--filters
で起動中のものに限定している--query
でPrivateIPとTag名がNameのものを出力するようにしている--query
での一番のポイントはTags[?Key=='Name'].Value
の部分。?Key=='Name'
でKeyがName
のものだけを抜き出せる。--output text
で出力結果が配列かつダブルクォーテーションで文字列がくくられてしまう問題を解決している--output text
がないと出力が以下のようになる。[ [ "10.1.22.167", "api0001" ], [ "10.1.40.155", "api0002" ], [ "10.1.7.231", "api0003" ] ]