AWS Config の高度なクエリを使って AWS Organizations 配下の EC2 インスタンスを棚卸ししてみた

2023.10.06

社内勉強会で 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 の設計項目のスキーマ情報が公開されています。

aws-config-resource-schema/config/properties/resource-types at master · awslabs/aws-config-resource-schema


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で指定している出力項目は冒頭でも紹介したスキーマ情報から確認できます。

aws-config-resource-schema/config/properties/resource-types/AWS::EC2::Instance.properties.json at master · awslabs/aws-config-resource-schema


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 形式でエクスポートすることもできます。

以上、どなたかのご参考になれば幸いです。