Azure Resource Managerのデプロイモードの動作を確認してみた

前回の記事ではAzure Resource Managerのデプロイモードについてご紹介しました。

blog.jbs.co.jp

本記事では実際に完全モード、増分モードでデプロイした場合の動作を確認してみようと思います。

事前準備

今回はリソースと、リソースプロパティ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ですが、場合に応じてデプロイモードを使い分けていきたいです。

執筆担当者プロフィール
近藤 結梨香

近藤 結梨香(日本ビジネスシステムズ株式会社)

業務では主にAzureに携わっています。映画好きで良く映画館に籠っています。

担当記事一覧