前回の記事ではAzure Resource Managerのデプロイモードについてご紹介しました。
本記事では実際に完全モード、増分モードでデプロイした場合の動作を確認してみようと思います。
事前準備
今回はリソースと、リソースプロパティ2つの観点での動作確認を行います。
まず、リソースグループ内にVnetとストレージアカウントを作成しました。
また、Vnet内にはサブネット2つを作成しています。
このリソースグループに対して完全モードまたは増分モードでデプロイするための、ARM Templateを用意しました。
以下のテンプレートではVnet1つに対してサブネット1つを定義しています。
{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "VnetName": { "defaultValue": "vnet-xxxxxxxx", "type": "string" }, "VnetAddress": { "defaultValue": "xxx.xxx.xxx.xxx/xx", "type": "string" }, "SubnetName_1": { "defaultValue": "subnet-a", "type": "string" }, "SubnetName_1_Address": { "defaultValue": "xxx.xxx.xxx.xxx/xx", "type": "string" } }, "variables": {}, "resources": [ { "type": "Microsoft.Network/virtualNetworks", "apiVersion": "2023-05-01", "name": "[parameters('VnetName')]", "location": "japaneast", "properties": { "addressSpace": { "addressPrefixes": [ "[parameters('VnetAddress')]" ] }, "encryption": { "enabled": false, "enforcement": "AllowUnencrypted" }, "subnets": [ { "name": "[parameters('SubnetName_1')]", "id": "[resourceId('Microsoft.Network/virtualNetworks/subnets', parameters('VnetName'), parameters('SubnetName_1'))]", "properties": { "addressPrefixes": [ "[parameters('SubnetName_1_Address')]" ], "delegations": [], "privateEndpointNetworkPolicies": "Disabled", "privateLinkServiceNetworkPolicies": "Enabled" }, "type": "Microsoft.Network/virtualNetworks/subnets" } ], "virtualNetworkPeerings": [], "enableDdosProtection": false } } ] }
今回はAzure CLIでデプロイしていきます。 Azure CLIの場合、デプロイモードの指定は--modeで指定します。 完全モードはComplete、増分モードはIncrementalを指定します。
az deployment group create --mode <デプロイモード名> --name ExampleDeployment --resource-group <リソースグループ名> --template-file <テンプレートファイル名>
完全モードの場合
ARM Templateを増分モードでデプロイしたときの動きを確認していきます。 デプロイコマンドは以下の通りです。
az deployment group create --mode Complete --name ExampleDeployment --resource-group <リソースグループ名> --template-file <テンプレートファイル名>
リソース
完全モードでデプロイした場合、ARM Templateに記載のないストレージアカウントは削除される想定です。
デプロイ完了後にAzureポータルを確認すると、想定通り ARM Templateに記載のないストレージアカウントが削除されていました。
リソースプロパティ
続いて、subnetsプロパティ内に記載していなかったsubnet-bがどうなるか確認してみます。 Azureポータルでデプロイ後のリソースを確認すると、subnet-bは削除されていました。
公式ドキュメントには、完全モードでデプロイした場合のリソースプロパティの動作については記載がありませんでしたが、 完全モードで再デプロイした場合もプロパティは再適用されるようです。
増分モードの場合
次は増分モードでの動作を確認していきます。
ストレージアカウントが削除されてしまったので、新しく作り直しました。先ほどと同様、リソースグループの中に仮想ネットワークとストレージアカウントが一つずつある状態です。
また、subnet-bも新しく作り直しました。
以下のコマンドを実行して、増分モードでのデプロイを実行します。
az deployment group create --mode Incremental --name ExampleDeployment --resource-group <リソースグループ名> --template-file <テンプレートファイル名>
リソース
増分モードでデプロイした場合はARM Templateに記載のないストレージアカウントは削除されず、そのままリソースグループに残る想定です。
デプロイ後のリソースグループを確認してみると、 ARM Templateに記載のなかったストレージアカウントは削除されず、残っていました。
リソースプロパティ
最後に、増分モードでデプロイした場合のリソースプロパティの動きを確認してみます。
前回の記事で記載した通り、再デプロイ時は全てのプロパティが再適用されるため、 subnetsプロパティ内に記載されていないsubnet-bは削除される想定です。
それでは、以下のコマンドでデプロイしていきます。
az deployment group create --mode Incremental --name ExampleDeployment --resource-group <リソースグループ名> --template-file <テンプレートファイル名>
デプロイ後にAzureポータルからサブネットを見てみると、 subnetsプロパティから削除したsubnet-bは削除されており、想定通りの動きとなりました。
まとめ
今回は2つのデプロイモードの動きを確認してみました。
普段なんとなく利用していたARM Templateですが、場合に応じてデプロイモードを使い分けていきたいです。