🧐
awscli --queryオプション vs jqコマンド
記事の概要
intro
cloudshellでawsリソースの情報を抜いて、出力されたjsonを整形する際
- awscliに元々ある
--query
オプション -
jq
コマンド
の2通りがパッと思い浮かぶと思います。
どちらも同じ結果を得ることは可能なのですが、比較してみようと思います。
比較
CloudFrontのディストリビューションID一覧を表示する という簡単なシチュエーションで
比較をしてみようと思います。
実行環境はCloudShell、awscliバージョンは2.8.3
です。
--query の場合
ID取得コマンドの例
aws cloudfront list-distributions --query 'DistributionList.Items[].Id[]'
--query のメリット
実行結果が長すきる場合、勝手にページャービューになってくれる。
パイプでless
コマンドに渡したのと同じ状態になってくれます。
※これはawscli v2に限った話です。
--query のデメリット
最初の行と最後の行にカッコが入ってしまう。
これを回避するために --output text
を付けると、今度は改行が失われる。
jq の場合
ID取得コマンドの例
aws cloudfront list-distributions | jq -r ".DistributionList.Items[].Id"
jq のメリット
length
が使えるので配列の数を数えるのが楽。
個数カウント (jq)
aws cloudfront list-distributions | jq '.DistributionList.Items | length'
これを--query
でやろうとすると
jq
でクォーテーションを取ってからwc
コマンドなどに渡す必要があり、長くなります。
個数カウント (--query)
aws cloudfront list-distributions --query 'DistributionList.Items[].Id[]' | jq -r "" | awk 'END{print NR}'
※jq -r の部分はもちろんlengthでも良いですが、length思いつく人なら最初からjq単体でやってそう。
jq のデメリット
サーバによってはjqが入っていない
持ってくりゃいいだろと言われればそこまでですが...
強いて挙げられるようなデメリットは見当たりませんでした。
実行速度の差はどうか
少しqueryのが速そう。
jq版
real 0m37.906s
user 0m15.163s
sys 0m0.483s
query版
real 0m34.660s
user 0m7.826s
sys 0m0.184s
outro
jq
に軸足を置きつつ、実行コマンドの例をコピペ改変するときのために
--query
も覚えておいて、適宜使い分けるのが良さそうですね。
Discussion