最近AWS Management ConsoleからEC2インスタンスを起動するよりも、APIから起動するほうが慣れたら手軽なことがわかりました。
そこでawscliを使うようになりました。ただ、このコマンド、JSONを出力するのですが出力がとても長いのです。
そこで出力されたJSONからほしい情報だけを抽出するのによくjqというsedやgrepに似たストリームエディタ的なコマンドを使うらしいということを知りました。
そのインストール方法と簡単な使い方について。
(2017-12-21 追記)
最近では AWS CLI でも標準で出力フィルタをかけることができるようになっているので、そちらを使うのが筋のようです。
それ以外の REST Web API を叩く場合に使うと良いでしょう。 KONG とか。
インストール
ポータブルCで書かれているから他のライブラリ、モジュールに依存していないのでバイナリ一個落としてくればいいそうです。
こちらのほうが簡単でいいですね。
ディストリビューションのパッケージでインストールする
たぶん、というか今はこれが一番カンタンにインストールできますし、メンテが容易です。
yum なり、 apt-get(apt) なり brew なり好きなもの使って入れてください。
バイナリのまま
CentOS 6.4
公式サイトからダウンロードします。
curl -o /usr/bin/jq http://stedolan.github.io/jq/download/linux64/jq
chmod +x /usr/bin/jq
which jq
動作確認します。テスト用のJSONを流し込んで整形させてみます。色付けもしてくれます。
echo '{"attr_a": ["1", "2", "3"]}' | jq '.'
{
"attr_a": [
"1",
"2",
"3"
]
}
すばらしいですね。
Mac OS X
Homebrewで一発インストールです。
brew install jq
Windows
動作確認していませんが、Windows上でもjqは使えるようです。(Download jq)
http://stedolan.github.io/jq/download/win64/jq.exe
http://stedolan.github.io/jq/download/win32/jq.exe
対応するバイナリをダウンロードしてパスが通っているところにおいて実行するのでしょうか。
ビルドする方法
最初はビルドしてインストールするのがデフォルトなのかと思ったのですが、
こっちはすぐにビルドしたい奇特な人向けの方法のようです。
参考のサイトではそのままmakeできているのですが、今はやり方が少し変わっているようです。
クローンした時点ではMakefileがないので、Autotools(autoconf + automake)をインストールしないとconfigure, Makefileを生成できません。当然ですが、そのままビルドしようとするとMakefile自体が存在しないのでエラーになります。
[root@localhost jq]# make
make: *** ターゲットが指定されておらず, makefile も見つかりません. 中止.
Amazon Linux, CentOSにインストール
CentOSの場合はデフォルトではsudoを使わないことに注意します。CentOSの場合はrootユーザーになってください。
sudo yum -y install git gcc make flex bison rake automake libtool
git clone https://github.com/stedolan/jq.git
cd jq/
autoreconf -i
./configure --prefix=/usr
make
sudo make install
使ってみる
たとえば、以下の様なJSONがあったとします。AWSのリージョン情報です。
regions.json
として保存します。
{
"Regions": [
{
"Endpoint": "ec2.eu-west-1.amazonaws.com",
"RegionName": "eu-west-1"
},
{
"Endpoint": "ec2.sa-east-1.amazonaws.com",
"RegionName": "sa-east-1"
},
{
"Endpoint": "ec2.us-east-1.amazonaws.com",
"RegionName": "us-east-1"
},
{
"Endpoint": "ec2.ap-northeast-1.amazonaws.com",
"RegionName": "ap-northeast-1"
},
{
"Endpoint": "ec2.us-west-2.amazonaws.com",
"RegionName": "us-west-2"
},
{
"Endpoint": "ec2.us-west-1.amazonaws.com",
"RegionName": "us-west-1"
},
{
"Endpoint": "ec2.ap-southeast-1.amazonaws.com",
"RegionName": "ap-southeast-1"
},
{
"Endpoint": "ec2.ap-southeast-2.amazonaws.com",
"RegionName": "ap-southeast-2"
}
]
}
まずはこのJSONファイルを整形させてみます。実行するプラットフォームはどこでも大丈夫だと思います。
cat regions.json | jq '.'
ちゃんと色分けされ、インデントも調整されて出力されます。
これだけでもすごいのですが、まだ jq の本来の目的には到達していません。
これのRegionNameの部分がほしいときは以下のようにします。
$ cat regions.json | jq '.Regions [] .RegionName'
"eu-west-1"
"sa-east-1"
"us-east-1"
"ap-northeast-1"
"us-west-2"
"us-west-1"
"ap-southeast-1"
"ap-southeast-2"
ほしいところだけが綺麗にとってこれました。
参考文献
- AWS Command Line Tool Python版 | Developers.IO
- jq
- stedolan/jq
- 軽量JSONパーサー『jq』のドキュメント:『jq Manual』をざっくり日本語訳してみました | Developers.IO
- jq コマンドが強力すぎてヤバい件 | CUBE SUGAR STORAGE
投稿者紹介
-
私たちは、テクノロジに魅せられた個性あふれるメンバーによって構成された茨城県日立市に本社を構えるベンチャー企業です。
”テクノロジを通して「驚き」と「感動」を創造し、人々の「夢」と「笑顔」を支えます。” の経営理念をモットーに明るい未来を描き、ワクワクする企画提案を続けて参ります。
最近のエントリ
- レポート2019.10.28ユニキャストレストランを開催しました🍳
- レポート2019.08.29社内研修ワークショップ~マシュマロ・チャレンジ~
- レポート2019.08.06Computex/InnoVEX 出展者・通訳として参加してきました。
- レポート2018.06.12Computex 2018 レポート
2件のコメント