0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Azure Policy でリソースグループ内のリソースに自動で同じタグを付与する

Posted at

背景と目的

Azure で作成するリソースをテナント、サブスクリプション、リソースグループをグルーピングする単位として組織やチーム、プロジェクトや本番開発環境ごとに割り当てて使用されているケースがほとんどでは無いかと思います。タグは、テナント、サブスクリプション、リソースグループをまたがって何かしらをグルーピングしたい時に使用するものですが、マイクロソフトのタグ関連のドキュメンのサンプルにも CostCenter というキーワードが出てくるように、このリソースはどこどこ組織やどこどこチームのコストとして集計したい場合が多いように感じます。もちろん、高度に自動化した組織やチームであれば、タグで自動化処理のグルーピング単位を管理して使っていたりと別の用途も考えられます。

今回はリソースグループ単位でチームを分けているケースにおいて、基本的にはリソースグループに付けられている CostCenter タグと同一の値をリソースグループ内のリソースに付与するものの、ある特定のリソースだけ別のチームにコストを負担してもらうため CostCenter タグに違う値を設定する、というのを試してみます。

前提条件

コマンドの実施環境は、Azure Cloud Shell + Azure CLI です。

bash
$ az version
{
  "azure-cli": "2.33.0",
  "azure-cli-core": "2.33.0",
  "azure-cli-telemetry": "1.0.6",
  "extensions": {
    "ai-examples": "0.2.5",
    "ssh": "1.0.0"
  }
}

検証用のリソースグループを作成

bash
# 環境変数をセットします
region=japaneast
prefix=mnrtagtest

# リソースグループをタグ付きで作成します
az group create \
  --name ${prefix}-rg \
  --location $region \
  --tags CostCenter=MyTeam

リソースグループのタグを自動でリソースに付与する Azure Policy を作成

bash
# CostCenter タグを自動追加する設定を作成します
az policy assignment create \
  --name ${prefix}-rg-tag-costcenter \
  --scope $(az group show \
    --name ${prefix}-rg \
    --query id \
    --output tsv) \
  --policy $(az policy definition list \
    --query "[?displayName=='Append a tag and its value from the resource group'].name" \
    --output tsv) \
  --params '{"tagName": {"value": "CostCenter"}}'

リソースを作成してタグが自動追加されているか確認

bash
# 仮想ネットワークをタグなしで作成します
az network vnet create \
  --resource-group ${prefix}-rg \
  --name ${prefix}-vnet

# リソースグループ内のタグを確認します
az resource list \
  --resource-group ${prefix}-rg \
  --query "[].{Name:name, CostCenter:tags.CostCenter}" \
  --output table 

Name             CostCenter
---------------  ------------
mnrtagtest-vnet  MyTeam

リソースを作成してタグに任意の値が設定されているか確認

bash
# 仮想ネットワークをタグ付きで作成します
az network vnet create \
  --resource-group ${prefix}-rg \
  --name ${prefix}-vnet-otherteam \
  --tags CostCenter=OtherTeam

# リソースグループ内のタグを確認します
az resource list \
  --resource-group ${prefix}-rg \
  --query "[].{Name:name, CostCenter:tags.CostCenter}" \
  --output table 

Name                       CostCenter
-------------------------  ------------
mnrtagtest-vnet            MyTeam
mnrtagtest-vnet-otherteam  OtherTeam

参考

bash
# リソースグループを削除します
az group delete \
  --name ${prefix}-rg

下記は、参考サイトです。

https://docs.microsoft.com/ja-jp/azure/azure-resource-manager/management/tag-resources?tabs=json#azure-cli

https://docs.microsoft.com/ja-jp/azure/governance/policy/tutorials/govern-tags

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?