ottijp blog

az-deployment-denoiseで子リソースをフィルタする方法

  • 2024-12-07

これはInfocom Advent Calendar 2024 7日目の記事です.

数ヶ月前にaz-deployment-denoiseというOSSを公開しました. このツールはAzureのIaCツールであるARMやBicepをデプロイするときに使うaz deployment group what-if(既存リソースとの差分を表示するコマンド)の偽陽性をフィルタするツールです.

cf. ottijp/az-deployment-denoise

cf. az deployment group what-if の偽陽性(ノイズ)を無視するツール | ottijp blog

先日はじめて他人からのイシューをもらいました. どうやら子リソースがうまくフィルタできないとのことでした.

cf. How to de-noise child resources? · Issue #12 · ottijp/az-deployment-denoise

解決方法についてはイシューに書いた通りなのですが,簡単に解説します.

az-deployment-denoiseにおけるリソースIDの解釈

az-deployment-denoiseは,入力であるaz deployment group what-ifの出力に現れるリソースIDが,次のフォーマットであるとしてパースしています.

/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}

通常の(子リソースの存在しない)リソースの場合,次のようになります.

リソースID: /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/sample-rg/providers/Microsoft.Storage/storageAccounts/sample-storage-account

item value
subscriptionId 00000000-0000-0000-0000-000000000000
resourceGroupName sample-rg
resourceProviderNamespace Microsoft.Storage
resourceType storageAcccounts
resourceName sample-storage-account

子リソースが存在するリソースの場合も同じルールでパースするため,次のようになります.

リソースID: /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/sample-rg/providers/Microsoft.MachineLearningServices/workspaces/sample-workspace/computes/sample-compute

item value
subscriptionId 00000000-0000-0000-0000-000000000000
resourceGroupName sample-rg
resourceProviderNamespace Microsoft.MachineLearningServices
resourceType workspaces
resourceName sample-workspace/computes/sample-compute

子リソースが存在するリソースのフィルタ方法

上述の通り,子リソースが存在するリソースの場合は,resourceNameに小リソースが含まれるようになります. そこで,例えば次にようにすることで対象のリソースをフィルタすることが可能です.

{
  "providerNamespace": "Microsoft.MachineLearningServices",
  "resourceType": "workspaces",
  "resourceNameRegex": ".+/computes/.+"
}

実はresourceNameだけは正規表現によるマッチングをサポートしているので,これを使うことで子リソースがあろうと孫リソースがあろうと,フィルタパターンを定義できるようになっているのです(すごい!)


ottijp
都内でアプリケーションエンジニアをしています
© 2024, ottijp