全力で怠けたい

怠けるために全力を尽くしたいブログ。

特定の EC2 インスタンスの情報を AWS CLI で取得する方法のメモ。

特定の EC2 インスタンスの情報を AWS CLI で取得することがちょいちょいあるのでコマンドをメモしておく。

特定の EC2 インスタンスの情報を AWS CLI で取得する

特定の EC2 インスタンスの情報を AWS CLI で取得することがちょいちょいある。

多くの場合は EC2 インスタンスはたくさんあると思うので特定の EC2 インスタンスの情報を取得するには EC2 インスタンスの属性で絞り込むけど、自分はたいがいは EC2 インスタンスにタグを付けてタグで EC2 インスタンスを絞り込んでる。

そのへんをメモしていく。

EC2 インスタンスをタグで特定する

MyFavoriteInstance みたいなタグを付けてる EC2 インスタンスはこんな感じのコマンドで取得してる。

$ aws ec2 describe-instances | \
    jq -r '.Reservations[].Instances[]' | \
    jq -r 'select(.Tags[].Value | contains("MyFavoriteInstance"))'

タグの絞り込みは jq を使ってて複数のフィルターを指定するときは jq コマンド自体をパイプで接続して取得してるけど、そのへんは jq のフィルターでパイプを使って jq -r '.Reservations[].Instances[] | select(.Tags[].Value | contains("MyFavoriteInstance"))' みたいに書けるので jq コマンド自体をパイプで接続しなくてもいいのだけど、紙面の都合上 jq の複数のフィルターを指定するときは jq コマンド自体をパイプで接続するやり方で書いていく。

タグ以外の属性も使って絞り込む

CFn とかで EC2 インスタンスを作ってると EC2 インスタンスが置換することがある。

EC2 インスタンスが置換するとしばらくの間は同じタグを持ってる EC2 インスタンスが複数存在したりするのでタグ以外の属性を使って絞りこむようにしてる。 たとえば MyFavoriteInstance みたいなタグを付けてる EC2 インスタンスのパブリック IP アドレスはこんな感じのコマンドで取得するけど、EC2 インスタンスが置換して MyFavoriteInstance タグが複数の EC2 インスタンスに付いてるときは古い EC2 インスタンスのパブリック IP アドレスも取得しちゃう。

$ aws ec2 describe-instances | \
    jq -r '.Reservations[].Instances[]' | \
    jq -r 'select(.Tags[].Value | contains("MyFavoriteInstance"))' | \
    jq -r '.PublicIpAddress'

null
<EC2 インスタンスのパブリック IP アドレス>

古い EC2 インスタンスのパブリック IP アドレスは通常解放しているので null が取得するけどこれは取得したい情報ではないので jq で select(.PublicIpAddress != null) みたいにして置換後の新しい EC2 インスタンスのパブリック IP だけ取得してる。

$ aws ec2 describe-instances | \
    jq -r '.Reservations[].Instances[]' | \
    jq -r 'select(.Tags[].Value | contains("MyFavoriteInstance"))' | \
    jq -r 'select(.PublicIpAddress != null)' | \
    jq -r '.PublicIpAddress'

<EC2 インスタンスのパブリック IP アドレス>