az-deployment-denoiseで子リソースをフィルタする方法
これは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だけは正規表現によるマッチングをサポートしているので,これを使うことで子リソースがあろうと孫リソースがあろうと,フィルタパターンを定義できるようになっているのです(すごい!)