AWS CLI jq を使ってJSONを見やすくする
- 2019.10.15
- AWS

目次
はじめに
前回、AWS CLIをはじめたのですが、操作や表示など若干見にくい部分があるので、あれこれ格闘中です。
まずは、AWS CLIの長いコマンドを全て打つのが非常に面倒だったため、タブキーによる補完を有効にしました。
こちらはaws_complete へのパスは通っていたので、そのまま次のコマンドを流すだけで有効になりました。
complete -C '/usr/local/aws/bin/aws_completer' aws
これで入力は少し楽になったのですが、大量に吐かれるJSONを見るのが結構大変です。
今回はこのJSONを見やすく加工するための jq について実際にさわってみたいと思います。
jqのインストール
私の場合はMacOS Mojaveでやっていますので、次のコマンドでインストールできます。
brew install jq
jqを使ってみる
subnet一覧の表示
$ aws ec2 describe-subnets | jq .
これで subnet 一覧の表示はできますが、jq を使ったところで特に代わり映えはありません。括弧のフォントが太くなったり、キー名の色が変わったりとその程度です。
subnet一覧の特定の項目のみ表示
$ aws ec2 describe-subnets | jq '.Subnets[] | {AvailabilityZone: .AvailabilityZone, CidrBlock: .CidrBlock}'
これで特定の項目のみ絞り込むことができます。今回は AvailabilityZoneとCidrBlockのみ表示しました。次のような表示になります。
{
"AvailabilityZone": "ap-northeast-1c",
"CidrBlock": "192.168.1.0/24"
}
{
"AvailabilityZone": "ap-northeast-1a",
"CidrBlock": "172.31.48.0/20"
}
〜(以下省略)〜
Subnet一覧をCidrBlockで絞り込み
$ aws ec2 describe-subnets | jq '.Subnets[] | select(.CidrBlock == "192.168.1.0/24")'
これで一つのCidrBlockで絞り込むことができます。ですが、ワイルドカードで指定したいこともあると思います。そんなときは次の方法で指定します。
Subnet一覧をCidrBlockのワイルドカード指定で絞り込み
$ aws ec2 describe-subnets | jq '.Subnets[] | select(.CidrBlock | test("192.168.*"))'
とりあえず、この程度でことは足りそうです。いまのところ。
CLIのオプションを使って指定
AWS CLIのオプションにも同等な機能がありました。
$ aws ec2 describe-subnets --filters "Name=cidr-block,Values=192.168.*" --query "Subnets[*].[AvailabilityZone,CidrBlock]"
どっちが簡単なんだろう。テーブル形式で表示できたりもするので、CLIオプションをそのまま使った方が良いのか迷うところですね。
$ aws ec2 describe-subnets --filters "Name=cidr-block,Values=192.168.*" --query "Subnets[*].{AvailabilityZone:AvailabilityZone,CidrBlock:CidrBlock}" --output table
こんな風にもできますし。
----------------------------------------
| DescribeSubnets |
+-------------------+------------------+
| AvailabilityZone | CidrBlock |
+-------------------+------------------+
| ap-northeast-1c | 192.168.1.0/24 |
| ap-northeast-1a | 192.168.0.0/24 |
+-------------------+------------------+
-
前の記事
AWS CLIでVPCの構築からEC2の構築まで 2019.10.11
-
次の記事
AWS CLI Ailas を使って入力を簡単にする 2019.10.17