AWSで使ってみたいサービスといえば?
もちろんGround Station 🛰️ですが、AWSのサービスで過小評価されているものを一つ選ぶとしたら、AWS ConfigのAdvanced Queryが候補に挙がります。
AWSリソースを設定から検索するなら、クエリで検索できるAdvanced Queryが便利です。
ユースケース: バージョンが古いLambda Runtimeを特定する
画面上でサンプルクエリが提供されています。便利!
サンプルを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に対応してないものを探す
作成したクエリを保存することもできます。
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上にあります。
その他クエリの制限はマニュアルを参照ください。
最後に
ユースケースは無限大なので、どんどん使って事例を公開しましょう。そうすればますます便利になります。
文責: 高木
カケハシではアドベントカレンダーもやっています。そちらもぜひ確認してみてください。