KAKEHASHI Tech Blog

カケハシのEngineer Teamによるブログです。

サンプル付き!AWSリソースをかんたんに検索するならAWS ConfigのAdvanced Queryで

AWSで使ってみたいサービスといえば?
もちろんGround Station 🛰️ですが、AWSのサービスで過小評価されているものを一つ選ぶとしたら、AWS ConfigのAdvanced Queryが候補に挙がります。

AWSリソースを設定から検索するなら、クエリで検索できるAdvanced Queryが便利です。

ユースケース: バージョンが古いLambda Runtimeを特定する

画面上でサンプルクエリが提供されています。便利!

image

サンプルをNode.js 12以下を検索するクエリに加工してみました。前方一致が利用可能です。

SELECT
  accountID,
  resourceId,
  configuration.runtime,
  configuration.lastModified,
  configuration.description
WHERE
  resourceType = 'AWS::Lambda::Function'
  AND configuration.runtime LIKE 'nodejs%'
  AND configuration.runtime <= 'nodejs12.x'
  ORDER BY accountID

前方一致のみといえばDynamoDBが思い起こされます。

ユースケース: 冗長化されていないNAT Gatewayに当たりをつける

SELECT
  accountId,
  configuration.vpcId,
  COUNT(*)
WHERE
  resourceType = 'AWS::EC2::NatGateway'
GROUP BY(accountId, configuration.vpcId)

Countが1のものは冗長化されていません。今後Having句が利用できるようになると1のものが特定できて便利ですね。

ユースケース: CloudFrontでHTTP/3に対応してないものを探す

作成したクエリを保存することもできます。

image

SELECT
  accountId,
  configuration.aliasICPRecordals,
  configuration.distributionConfig.cacheBehaviors.items,
  tags,
  configuration.distributionConfig.httpVersion,
  configuration
WHERE
  resourceType = 'AWS::CloudFront::Distribution'
  AND configuration.distributionConfig.httpVersion != 'http2and3'
order by
  accountId

AWS Config Advanced Queryを使うメリット

実質準備無しで使える

AWS推奨のセキュリティ設定では、AWSアカウントに対してAWS Configを設定することになっています。もしまだ設定してないようなら設定しましょう!

クロスアカウント検索ができる

開発〜本番アカウントにまたがって検索できます。もちろん、全プロダクト、全チームの情報も一括で取得できます

他の方法との比較

AWSリソースに対してクエリを発行できるOSSやSaaSは多く存在します。しかし、どれもセットアップの手間や通信関係のコストが生じます。

AWSサービスならResource ExplorerやTag Editorも候補にあがりますが、設定から逆引きするものではありません。

IaCツールはコード上で横断して検索する前提になっていません。変数や関数を駆使しているとなおさらです。現在の「状態」を確認するなら今動いているAWSリソースに対して調査する必要があります。

スキーマと制限

検索できるものの一覧はGitHub上にあります。

その他クエリの制限はマニュアルを参照ください。

最後に

ユースケースは無限大なので、どんどん使って事例を公開しましょう。そうすればますます便利になります。

文責: 高木

カケハシではアドベントカレンダーもやっています。そちらもぜひ確認してみてください。