AWS Configの高度なクエリのサンプルSQLで使えそうな物を調べてみた
こんにちは、臼田です。
先日AWS Configで高度なクエリを発行する機能が追加されました。概要や使い方は下記をご参照ください。
この機能により、普段データが確認しづらいAWS Configの活用が捗ります。
リリースと合わせてサンプルSQLが提供されていたので、どのようなものがあるのか調べてみました。どんな事ができるの?って雰囲気が知りたい方向けに主要なものを抜粋していきます。
サンプルSQLを抜粋
個人的に面白いと感じたり、有用そうだと思ったものを抜粋していきます。
SecurityGroupの関連リソース取得
List all resources that are related to security group "sg-12345"
というサンプルSQLでは指定したIDのSecurityGroupが紐付いているリソースの一覧が表示されます。
クエリは下記の内容です。
SELECT resourceId, resourceName, resourceType, relationships WHERE relationships.resourceId = 'sg-12345'
WHERE句のsg-idを任意のものに変更して実行すると確認できます。実際の結果は下記のようになります。
ここで私が役に立つと思ったのは複数のリソースタイプにまたがってリスト化できるところです。
例えばSecurityGroupを削除しようと思ったとき、関連付けしているリソースがないかを確認しますが、だいたいEC2とかだけ確認して他は忘れがちです。
上記クエリ結果で見れるようにENIやLaunchConfigなど、関連するものを一覧で取得できるので、確認漏れを防ぐことが可能です。
ちなみに、このクエリ実はSecurityGroup以外のリソースIDでも同じようにクエリできるので、環境が複雑なときに削除前にこれを実行するのは有用だと思います。
指定期間に作成されたIAM Userの取得
List all IAM users created between date "2018-12-01T00:00" and date "2019-02-28T00:00
"
というサンプルSQLでは指定した期間に作成されたIAM Userの一覧が取得できます。
クエリは下記の内容です。
SELECT resourceName, resourceId, resourceType, resourceCreationTime WHERE resourceType = 'AWS::IAM::User' AND resourceCreationTime BETWEEN '2018-12-01T00:00' AND '2019-02-28T00:00'
これは文字通りの機能であんまり必要性を感じないかもしれませんが、resourceType = 'AWS::IAM::User' AND
を削除することにより期間中に作成された各種リソース一覧を取得できます。
これも従来だとCloudTrailを頑張ってコンソール上で探していたり、Athenaで確認しました。前者は様々なCloudTrailの管理画面で複数リソースタイプを跨いでフィルターしたりすることができず、Athenaでは準備に時間がかかったり、クエリ範囲によっては結構な料金がかかりました。
AWS Configの高度なクエリ機能は追加料金無しで利用できるため、より簡単に安くなった形です。
EC2のインスタンスタイプ毎のカウント
Count EC2 instances, group by instance type
というサンプルSQLではインスタンスタイプ毎の台数の一覧が取得できます。
クエリは下記の内容です。
SELECT configuration.instanceType, COUNT(*) WHERE resourceType = 'AWS::EC2::Instance' GROUP BY configuration.instanceType
これは単純にCOUNTで様々な集計を取ることができるのが有用です。EC2ではインスタンスタイプ以外にAMI ID、VPC、Subnet毎に出せたりします。
他にも集計関数としてはAVG
, MAX
, MIN
, SUM
が使えるとのことで夢が広がりますね。
まとめ
AWS Configの高度なクエリ機能についてくるサンプルSQLを抜粋してみました。なんとなくどんなことができるかはわかったかなーと思います。
すっごい地味ですけど、地味に嬉しい感じですね。
今までマネジメントコンソールで確認しづらかった複数のリソースに跨った情報取得などにはいいと思いますので、是非活用してみてはいかがでしょうか?