あなたが現在見ているのは AWS CLI –query パラメーターによる部分一致条件

AWS CLI –query パラメーターによる部分一致条件

AWS CLI でのコマンド出力結果は、--query パラメーターによってフィルタリングできます。このたび、プロパティ値の「完全一致」「部分一致」「前方一致」「後方一致」で抽出する方法を調べたので、メモしておきます。

–query パラメータについての超概要

--query パラメーターは、コマンドの出力に対して様々なフィルタリングを行うために利用できます。たとえば次のようなことができます:

  • 特定の ID を持っているオブジェクトのみ抽出して出力
  • 必要なプロパティのみ出力

なお、--query パラメーターによるフィルタリングは、クライアントサイドで実行されます。

詳しくは、AWS 公式ドキュメントにまとめられています。

「完全一致」「部分一致」「前方一致」「後方一致」で抽出する

CloudWatch のロググループを、ロググループ名で抽出してみます。

特に条件を指定しない場合:

aws logs describe-log-groups --query "logGroups[].logGroupName"
[
    "/aaa/cli/test/111",
    "/bbb/cli/test/222",
    "/test/aaa/cli/test/111/test",
    "/test/bbb/cli/test/222/test"
]

完全一致

単に等号で比較します。

aws logs describe-log-groups --query "logGroups[?logGroupName=='/aaa/cli/test/111'].logGroupName"
[
    "/aaa/cli/test/111"
]

部分一致

contains 関数を使用します。

aws logs describe-log-groups --query "logGroups[?contains(logGroupName, '/aaa')].logGroupName"
[
    "/aaa/cli/test/111",
    "/test/aaa/cli/test/111/test"
]

前方一致

starts_with 関数を使用します。

aws logs describe-log-groups --query "logGroups[?starts_with(logGroupName, '/aaa')].logGroupName"
[
    "/aaa/cli/test/111"
]

後方一致

ends_with 関数を使用します。

aws logs describe-log-groups --query "logGroups[?ends_with(logGroupName, '/111')].logGroupName"
[
    "/aaa/cli/test/111"
]

–query パラメーターは JMESPath 構文で書く

contains 関数を使用する例は、結構さまざまな Web サイトで見つかったのですが、前方一致と後方一致は意外と触れられていなかったので、まとめました。

--query パラメーターの記述には JMESPath 構文を使用するので、何かやりたいことがある場合は JMESPath のリファレンスを参照すると良いと思います。

kpdn

お寿司とゲームと動物が好きな、フリーランスのエンジニアです。フロントエンドからインフラまで日々奮闘中です。最近は物忘れがどんどんがひどくなってきました。

コメントを残す