はじめに
本記事はこちらの続きとなります
既にやりたいこと自体は実現できているのですが、すでにリソースにタグを設定していた場合にどのような挙動になるのか気になったので調べてみました
まず一つは、リソースグループでは利用されていない、tagZが設定されているケース。こちらを本記事で便宜上TypeZとします。
もう一つは、リソースグループで設定しているtag1に別の値が設定されているケースです。こちらを本記事で便宜上Type99とします。
実験用スクリプト
検証をシンプルにするために、繰り返し処理を減らしたスクリプトを用意しました。
# 1. Get-AzResourceGroupでリソースグループのタグ情報を取得する $resourceGroup = Get-AzResourceGroup -Name demo1 # 2. Get-AzResourceでリソースグループ内のリソースを取得する $resources = Get-AzResource -ResourceGroupName demo1 # 3. New-AzTagまたはUpdate-AzTagでリソースが所属しているリソースグループに設定されているタグをリソース自身に付与する foreach($resource in $resources){ New-AzTag -ResourceId $resource.Id -Tag $resourceGroup.Tags }
New-AzTagの挙動
New-AzTag & TypeZ
この場合、もともと設定されていたTagZは消えてしまい、リソースグループで設定されているタグのみが残りました。
New-AzTag & Type99
こちらも同様の結果です。
New-AzTag 結論
New-AzTagの場合、リソースにどのような形でタグが設定されていようとも、リソースグループに設定されているタグだけにリセットする、と考えて良さそうです。
Update-AzTagの挙動
Update-AzTagの場合、オプションとしてMerge、Replace、Deleteがあります。
New-AzTagは完全に置き換えてしまったので、ここは元のタグを残してくれそうなMergeに絞って検証してみたいと思います。
Update-AzTag Merge & TypeZ
予想通り、この場合は元のタグに加えて、リソースグループのタグが設定される、という挙動でした。
Update-AzTag Merge & Type99
一方こちらはTag1に別の値が設定されているのですが、Mergeオプションだとどういう挙動になるか読めませんね。やってみましょう。
もしかしてエラーになるかな、とも思ったのですが、エラーにはならず、同じタグで値が異なる場合はリソースグループの値で上書きされる、という結果になりました。
Update-AzTag Merge 結論
よって、Update-AzTag でMergeオプションを使った場合は、リソースグループで使っていないタグは保持、同じタグの場合はリソースグループの値で上書き、という結果になりました。
Update-AzTag Replaceの挙動
念のためやってみたのですが、やはりNew-AzTagと同じ挙動でした
まとめ
- リソースグループのタグ設定だけにしたい場合はNew-AzTagかUpdate-AzTagのReplaceオプション
- リソースのタグをなるべく残したいならUpdate-AzTagのMergeオプション
- リソースとリソースグループで同じタグ・別の値の場合にはリソースグループの値で上書き
このようになりました。
おわりに
おおむね予想はついていたのですが実際に動作確認してすっきりしました。
どちらのコマンドで実装するかはケースバイケースになるかと思いますが、そもそもこういったタグの管理を行う場合、リソース管理者にはタグを操作させない(リソースに設定されているタグの考慮は不要)という形になるかもしれませんね。
舟越 匠(日本ビジネスシステムズ株式会社)
人材開発部に所属。社内向けの技術研修をしつつ、JBS Tech Blog編集長を兼任。2024年8月からキーマンズネットでPower Automateの連載を開始。好きなサービスはPower AutomateやLogic Apps。好きなアーティストはZABADAKとSound Horizon。
担当記事一覧