AWS Config の高度なクエリを使って AWS Organizations 配下の EC2 インスタンスを棚卸ししてみた
社内勉強会で AWS Config の高度なクエリの使い方を学んだため、習熟も兼ねて AWS Organizations 配下のアカウントにおける EC2 インスタンスを棚卸ししてみました。
高度なクエリについては次のブログでも紹介されています。
高度なクエリを使って EC2 インスタンスを棚卸し
AWS Organizations 配下のアカウントにおいて、下表の EC2 インスタンスが存在している環境で試します。
アカウント ID | EC2 インスタンス(Name タグの値) | インスタンスタイプ | インスタンスの状態 |
---|---|---|---|
012xxxxxxxxx | test-instance-01 | t2.micro | 実行中 |
012xxxxxxxxx | test-instance-02 | t2.micro | 停止済み |
236xxxxxxxxx | demo-instance-01 | t2.nano | 実行中 |
AWS Config アグリゲータで集約しているアカウントから高度なクエリを用いて、EC2 インスタンスを検索してみます。EC2 関連のクエリは AWS で用意されているものも多く、一から検討しなくてもある程度は検索できそうです。
自身でクエリを検討するときは次のリポジトリに Config の設計項目のスキーマ情報が公開されています。
EC2 インスタンス一覧を出力
出力を特定の項目に絞って EC2 インスタンス一覧を出力してみます。
SELECT accountId, awsRegion, resourceId, configuration.instanceType, tags.tag, resourceCreationTime WHERE resourceType = 'AWS::EC2::Instance' ORDER BY accountId;
全てのタグを出力するようにしており、3 行目のtags.tag
には下記が出力されています。
[ "Env=Dev", "Name=demo-instance-01" ]
また、SELECT
で指定している出力項目は冒頭でも紹介したスキーマ情報から確認できます。
EC2 インスタンスをカウント
インスタンスタイプ別に集計したい場合は用意されているクエリ「Count EC2 Instances」を利用できます。
SELECT configuration.instanceType, COUNT(*) WHERE resourceType = 'AWS::EC2::Instance' GROUP BY configuration.instanceType
アカウント別にアカウントしたい場合は次のクエリでカウントできます。
SELECT accountId, COUNT(*) WHERE resourceType = 'AWS::EC2::Instance' GROUP BY accountId
起動しているインスタンスをカウントする場合です。
SELECT accountId, COUNT(*) WHERE resourceType = 'AWS::EC2::Instance' AND configuration.state.name = 'running' GROUP BY accountId
停止しているインスタンスをカウントする場合です。
SELECT accountId, COUNT(*) WHERE resourceType = 'AWS::EC2::Instance' AND configuration.state.name = 'stopped' GROUP BY accountId
以上で、EC2 インスタンスの検索のお試しは終わりです。
さいごに
AWS Config の高度なクエリを用いて AWS Organizations 配下のアカウントにおける EC2 インスタンスの情報を検索してみました。本番環境の場合は稼働している EC2 インスタンスの確認などに利用でき、検証環境ならインスタンスの削除し忘れの確認などに利用できそうです。検索結果は JSON や CSV 形式でエクスポートすることもできます。
以上、どなたかのご参考になれば幸いです。