簡體   English   中英

Azure ARM JSON 模板 - 將 VM 添加到不同資源組中的恢復服務保管庫

[英]Azure ARM JSON template - Add VM to Recovery Services Vault in different Resource Group

我正在嘗試添加功能以將 VM 添加到恢復服務保管庫到我用於部署的現有 Azure ARM JSON 模板。

我使用了以下 GitHub 模板中的代碼,如果恢復服務保管庫與 VM 位於同一資源組中,但如果它位於不同的資源組中,則此方法有效。

https://github.com/Azure/azure-quickstart-templates/tree/master/101-recovery-services-backup-vms

代碼如下:

{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
    "existingVirtualMachinesResourceGroup": {
        "type": "string",
        "metadata": {
            "description": "Resource group where the virtual machines are located. This can be different than resource group of the vault. "
        }
    },
    "existingVirtualMachines": {
        "type": "array",
        "metadata": {
            "description": "Array of Azure virtual machines. e.g. [\"vm1\",\"vm2\",\"vm3\"]"
        }
    },
    "existingRecoveryServicesVault": {
        "type": "string",
        "metadata": {
            "description": "Recovery services vault name where the VMs will be backed up to. "
        }
    },
    "existingBackupPolicy": {
        "type": "string",
        "defaultValue": "DefaultPolicy",
        "metadata": {
            "description": "Backup policy to be used to backup VMs. Backup POlicy defines the schedule of the backup and how long to retain backup copies. By default every vault comes with a 'DefaultPolicy' which canbe used here."
        }
    }
},
"variables": {
    "backupFabric": "Azure",
    "v2VmType": "Microsoft.Compute/virtualMachines",
    "v2VmContainer": "iaasvmcontainer;iaasvmcontainerv2;",
    "v2Vm": "vm;iaasvmcontainerv2;"
},
"resources": [
    {
        "name": "[concat(parameters('existingRecoveryServicesVault'), '/', variables('backupFabric'), '/', variables('v2VmContainer'), concat(parameters('existingVirtualMachinesResourceGroup'),';',parameters('existingVirtualMachines')[copyIndex()]), '/', variables('v2Vm'), concat(parameters('existingVirtualMachinesResourceGroup'),';',parameters('existingVirtualMachines')[copyIndex()]))]",
        "apiVersion": "2016-06-01",
        "location": "[resourceGroup().location]",
        "type": "Microsoft.RecoveryServices/vaults/backupFabrics/protectionContainers/protectedItems",
        "copy": {
            "name": "v2VmsCopy",
            "count": "[length(parameters('existingVirtualMachines'))]"
        },
        "properties": {
            "protectedItemType": "[variables('v2VmType')]",
            "policyId": "[resourceId('Microsoft.RecoveryServices/vaults/backupPolicies',parameters('existingRecoveryServicesVault'),parameters('existingBackupPolicy') )]",
            "sourceResourceId": "[resourceId(subscription().subscriptionId,parameters('existingVirtualMachinesResourceGroup'),'Microsoft.Compute/virtualMachines',parameters('existingVirtualMachines')[copyIndex()])]"
        }
    }
]

}

沒有用於定義恢復服務保管庫資源組的變量或參數。

我還查看了以下 GitHub 模板,該模板還將 VM 添加到恢復服務保管庫,但這似乎無法使用不同的資源組。

https://github.com/Azure/azure-quickstart-templates/tree/master/201-recovery-services-backup-classic-resource-manager-vms

我試過谷歌搜索,但到目前為止我還沒有找到答案,所以有可能嗎?

謝謝

如果它對其他人有用,我已經找到了答案。 如前所述,恢復服務保管庫將使用為模板定義的相同資源組。 為了能夠為 RSV 定義不同的模板,這需要使用嵌套模板來完成。

我已使用以下嵌套模板來替換原始帖子中的恢復服務資源,恢復服務庫所需的資源組由“resourceGroup”定義:“[parameters('nestedTemplateRecoveryServicesResourceGroup')]”,

{
"apiVersion": "2017-05-10",
        "name": "nestedTemplateRecoveryServices",
        "type": "Microsoft.Resources/deployments",
        "resourceGroup": "[parameters('nestedTemplateRecoveryServicesResourceGroup')]",
        "dependsOn": ["[concat('Microsoft.Compute/virtualMachines/', parameters('vmName'))]"],
        "properties": {
            "mode": "Incremental",
            "template": {
                "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
                "contentVersion": "1.0.0.0",
                "parameters": {},
                "variables": {},
                "resources": [
                        {
                        "name": "[concat(parameters('existingRecoveryServicesVault'), '/', variables('backupFabric'), '/', variables('v2VmContainer'), concat(parameters('existingVirtualMachinesResourceGroup'),';',parameters('existingVirtualMachines')), '/', variables('v2Vm'), concat(parameters('existingVirtualMachinesResourceGroup'),';',parameters('existingVirtualMachines')))]",
                        "apiVersion": "2016-06-01",
                        "location": "[resourceGroup().location]",
                        "type": "Microsoft.RecoveryServices/vaults/backupFabrics/protectionContainers/protectedItems",
                        "properties": {
                            "protectedItemType": "[variables('v2VmType')]",
                            "policyId": "[resourceId('Microsoft.RecoveryServices/vaults/backupPolicies',parameters('existingRecoveryServicesVault'),parameters('existingBackupPolicy') )]",
                            "sourceResourceId": "[resourceId(subscription().subscriptionId,parameters('existingVirtualMachinesResourceGroup'),'Microsoft.Compute/virtualMachines',parameters('existingVirtualMachines'))]"
                            }
                        }
                    ]
                },
               "parameters": {},
               "outputs": {}
        }
}

這是我用來實現這一點的 JSON - 它在使用 copyIndex() 時會擴展......如下面的資源中包含的那樣。 我已經根據 Azure 門戶上的 Microsoft 自己的 JSON 模板對此進行了修改,因為他們改進了 VM 部署以包括在部署期間進行備份的選項。

我通常提供一組 VM 名稱,並使用復制循環從這些名稱中命名其他資源。 從技術上講,它們在構建時與 VM 相關或子級,因此使用 VM 名稱作為關聯資源名稱的基礎似乎最適用。 我使用 copyIndex() 來推送在該循環中迭代的 VM 的名稱(索引),這意味着所有子資源和嵌套模板也可以使用這些參數。

無論如何,這是資源(嵌套模板,你必須這樣做)。 相關變量和參數如下。

{
  "apiVersion": "2017-05-10",
  "name": "[concat(parameters('virtualMachineNames')[copyIndex()], '-' , 'BackupIntent')]",
  "type": "Microsoft.Resources/deployments",
  "resourceGroup": "[parameters('DestinationRSVResourceGroup')]",
  "copy": {
    "name": "AzureBackupLoop",
    "count": "[length(parameters('virtualMachineNames'))]"
  },
  "dependsOn": [
    "NameOfPreviousLoop"
  ],
  "properties": {
    "mode": "Incremental",
    "template": {
      "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
      "contentVersion": "1.0.0.0",
      "resources": [
        {
          "name": "[concat(parameters('DestinationRecoveryServicesVault'), '/', 'Azure', '/', variables('v2Vm'), resourceGroup().name, ';', parameters('virtualMachineNames')[copyIndex()])]",
          "apiVersion": "2017-07-01",
          "type": "Microsoft.RecoveryServices/vaults/backupFabrics/backupProtectionIntent",
          "properties": {
            "friendlyName": "[concat(parameters('virtualMachineNames')[copyIndex()], 'BackupIntent')]",
            "protectionIntentItemType": "AzureResourceItem",
            "policyId": "[resourceId(parameters('DestinationRSVResourceGroup'), 'Microsoft.RecoveryServices/vaults/backupPolicies', parameters('DestinationRecoveryServicesVault'), parameters('existingBackupPolicy'))]",
            "sourceResourceId": "[resourceId(resourceGroup().name, 'Microsoft.Compute/virtualMachines', parameters('virtualMachineNames')[copyIndex()])]"
          }
        }
      ]
    }
  }
}

此模板中的變量部分如下所示:

  "variables": {
    "v2Vm": "vm;iaasvmcontainerv2;",
  },

最后是參數(與此資源相關):

"parameters": {
    "DestinationRecoveryServicesVault": {
      "type": "string",
      "metadata": {
        "description": "Name of the recovery services vault that the VM is to be backed up in to."
      }
    },
    "existingBackupPolicy": {
      "type": "string",
      "metadata": {
        "description": "Name of the backup policy that the VM will use."
      }
    },
    "DestinationRSVResourceGroup": {
      "type": "string",
      "metadata": {
        "description": "Resource group of the RSV."
      }
    }
    "virtualMachineNames": {
      "type": "array",
      "metadata": {
        "description": "An array of names for the VMs."
      }
    },
  },

如果您要使用該嵌套模板,請確保將您在第一個模板中配置的 VM 添加為 DependsOn。 這樣,當它運行增量部署時,VM 已經存在。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM