AWS CLI の出力を複数条件でフィルタリングしてAmazon Aurora MySQL v1がないか調べてみた

2023.02.20

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

こんにちは、オペレーション部のさかもとです。 MySQL5.6互換のAmazon Aurora MySQL v1が2023年2月末にEOLを迎えます。 すでにご対応されている方が多いかと思いますが、全部アップデートが済んでいるがもう一度確認されたい心配性な方はいらっしゃいますでしょうか。私です。

MySQL5.6互換のAmazon Aurora MySQL の利用状況をAWS CLIで確認することがありました。 今回、フィルターの絞り込み、クエリの絞り込み両方を利用して、欲しい情報を絞り込みましたので紹介します。

AWS CLIの出力をフィルタリングする方法について

AWS CLIの出力を何もフィルタリングせずに出力してしまうと、大量の情報が出て見にくいことがあります。 AWS CLIにはフィルターとクエリの二種類のフィルタリング機能がありこれらを用いて欲しい情報を絞り込みます。

詳細については以下をご確認いただければと思います。

https://dev.classmethod.jp/articles/aws-cli-filter-and-query-howto/

クエリを利用して絞り込む

以下のようなAmazon Aurora DB クラスターが存在する環境で検証します。

% aws rds describe-db-clusters \
 --query 'DBClusters[].{Engine:Engine, DBName:DBClusterIdentifier, VER:EngineVersion}' --output table
----------------------------------------------------------------
|                      DescribeDBClusters                      |
+------------+---------------------+---------------------------+
|   DBName   |       Engine        |            VER            |
+------------+---------------------+---------------------------+
|  database-1|  aurora-mysql       |  5.7.mysql_aurora.2.07.1  |
|  database-2|  aurora-postgresql  |  11.9                     |
+------------+---------------------+---------------------------+

クエリーを用いて、フィルター条件のエンジンバージョン指定部分で 5.6.mysql_aurora.1.23.4 以下と指定すれば期待通りに絞り込める(出力が何もない状態になる)と思いましたが、そうはいかず。以下の情報が出力されました。

% aws rds describe-db-clusters \
 --query 'DBClusters[?EngineVersion<=`5.6.mysql_aurora.1.23.4`].{Engine:Engine, DBName:DBClusterIdentifier, VER:EngineVersion}' --output table
---------------------------------------------
|            DescribeDBClusters             |
+-------------+---------------------+-------+
|   DBName    |       Engine        |  VER  |
+-------------+---------------------+-------+
|  database-2 |  aurora-postgresql  |  11.9 |
+-------------+---------------------+-------+

RDSのエンジンバージョンを出力するコマンドで同じバージョンのフィルタ条件で出力すると以下の通りになり、 エンジンバージョンの指定だけでは、複数のRDSのエンジンがある場合は絞り込めないことがわかりました。

% aws rds describe-db-engine-versions \
--query 'DBEngineVersions[?EngineVersion<=`5.6.mysql_aurora.1.23.4`].{Engine:Engine,EngineVersion:EngineVersion}' \
--output table

----------------------------------------------------------------
|                   DescribeDBEngineVersions                   |
+-----------------------+--------------------------------------+
|        Engine         |            EngineVersion             |
+-----------------------+--------------------------------------+
|  docdb                |  3.6.0                               |
|  docdb                |  4.0.0                               |
|  custom-sqlserver-ee  |  15.00.4073.23.v1                    |
|  custom-sqlserver-ee  |  15.00.4249.2.v1                     |
|  custom-sqlserver-ee  |  15.00.4261.1.v1                     |
|  custom-sqlserver-se  |  15.00.4073.23.v1                    |
|  custom-sqlserver-se  |  15.00.4249.2.v1                     |
|  custom-sqlserver-se  |  15.00.4261.1.v1                     |
|  custom-sqlserver-web |  15.00.4073.23.v1                    |
|  custom-sqlserver-web |  15.00.4249.2.v1                     |
|  custom-sqlserver-web |  15.00.4261.1.v1                     |
|  neptune              |  1.1.0.0                             |
|  neptune              |  1.1.1.0                             |
|  neptune              |  1.2.0.0                             |
|  neptune              |  1.2.0.1                             |
|  neptune              |  1.2.0.2                             |
|  aurora-postgresql    |  10.21                               |
|  aurora-postgresql    |  11.9                                |

~ 省略 ~

クエリとフィルターを両方の絞り込み利用して、複数条件の絞り込みを実現

クエリーのみで複数条件の絞り込みを資料と思いましたが、同じ階層だと条件を複数指定できないようなので、フィルター機能を用いて、 DBエンジンを以下のようにAuroraのみに絞り込んで、出力しました。

出力がないので、バージョンが5.6 のAuroraを利用していないことがわかります。

% aws rds describe-db-clusters \
 --filters  "Name=engine,Values=aurora-mysql" \
 --query 'DBClusters[?EngineVersion<=`5.6.mysql_aurora.1.23.4`].{Engine:Engine, DBName:DBClusterIdentifier, VER:EngineVersion}' --output table

まとめ

フィルターとクエリーの絞り込み両方を利用すれば、ちょっと複雑な条件の絞り込みをして、出力することを知り便利だと思いました。 上記コマンドで出力が出てしまう方はEOLを向かえるAmazon Aurora MySQL v1なのでぜひアップデートをご検討ください!