[AWS] AWC CLI 1.2 の queryオプションを試してみた

2013.10.18

はじめに

本日 AWS Command Line Interface (以下AWS CLI)のバージョン1.2.0がリリースされました。気になるアップデートを列挙しますと

  • Amazon Elastic Transcoderの音声サポートの対応 (こちらで説明しています)
  • --query で検索ができるようになった
  • バンドルインストーラ (pythonがあればpipなしでもインストール可能)

でしょうか。ちょうど、RDSのサポートしているデータベースのバージョンを調べて欲しいというリクエストがありましたので新しいAWS CLIでどのように出来るか?というのを調べた結果を書いてゆきます。

AWS CLI 1.1までの方法

欲しい情報はDBエンジン(mysql,sql server,oracle)とそのバージョン情報となります。
こんな形で出力が可能です。

$ aws rds describe-db-engine-versions --output table  
------------------------------------------------------------------------------
|                          DescribeDBEngineVersions                          |
+----------------------------------------------------------------------------+
||                             DBEngineVersions                             ||
|+--------------------------------------+-----------------------------------+|
||  DBEngineDescription                 |  MySQL Community Edition          ||
||  DBEngineVersionDescription          |  MySQL 5.1.50                     ||
||  DBParameterGroupFamily              |  mysql5.1                         ||
||  Engine                              |  mysql                            ||
||  EngineVersion                       |  5.1.50                           ||
|+--------------------------------------+-----------------------------------+|
以下省略...

ここから、データを抜きだすのはちょっと大変そうです。

1.2での方法

--query オプションを付けることで結果の抽出が可能です。JMESPath(ジェームズパスというらしいです) というbotoのライブラリを利用しているようです。jqに似た感じの構文となります。構文はこちらになります

では、データベースとバージョンを抜きだしてみましょう

$ aws rds describe-db-engine-versions --output table --query 'DBEngineVersions[*].[Engine,EngineVersion]'

---------------------------------------
|      DescribeDBEngineVersions       |
+----------------+--------------------+
|  mysql         |  5.1.50            |
|  mysql         |  5.1.57            |
|  mysql         |  5.1.61            |
|  mysql         |  5.1.62            |
|  mysql         |  5.1.63            |
|  mysql         |  5.1.69            |
|  mysql         |  5.1.71            |
|  mysql         |  5.5.12            |
|  mysql         |  5.5.20            |
|  mysql         |  5.5.23            |
以下省略...

ずいぶんすっきりしましたね。構文的にはjqに似ているのですが微妙に異なる感じです。今回の用途程度でしたら、それほど違いはないと感じました。

jqでの方法

jqをつかった場合ものせます。

$ aws rds describe-db-engine-versions | jq -c '.DBEngineVersions[] | [(.Engine) , (.EngineVersion)]' 
["mysql","5.1.50"]
["mysql","5.1.57"]
["mysql","5.1.61"]
["mysql","5.1.62"]
["mysql","5.1.63"]
["mysql","5.1.69"]
["mysql","5.1.71"]
["mysql","5.5.12"]
["mysql","5.5.20"]
["mysql","5.5.23"]
以下省略...

シンプルですね。ちなみにjqのクエリを書くのはしんやさんのエントリーがとても便利でした。

まとめ

AWS CLI 1.2の新機能 --queryオプションについて簡単に説明しました。

--outputで表形式やJSONにも出来る点はawsコマンドのほうが便利でした。
jqは標準では入っていないので、、、とも書こうとおもいましたがawsコマンドもAmazon Linuxのデフォルトでは1.1ですので変わりはないですね。検索の構文がどちらが使い易いか? アウトプットに何を求めるか? というのが1.2とつかうか、jqを利用するかどうかのポイントになるとおもいます。