/ / Azure ARM JSON шаблон - додайте VM до Vault Services Vault в різні групи ресурсів - json, azure

Шаблон Azure ARM JSON - додайте VM до Vault Services Vault в різні групи ресурсів - json, azure

Я намагаюся додати функціональність, щоб додати 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

Я "спробував гуглінг, але поки що я не зміг знайти відповідь на це, чи це можливо?

Дякую

Відповіді:

1 для відповіді № 1

Я знайшов відповідь на це, якщо це кориснобудь-хто інший. Як уже згадувалося, сховище служб відновлення використовуватиме ту саму групу ресурсів, що визначена для шаблону. Щоб мати можливість визначити інший шаблон для RSV, це потрібно зробити за допомогою вкладеного шаблону.

Я використовував наступний вкладений шаблон длязамініть ресурс служб відновлення в моєму початковому дописі, група ресурсів, необхідна для сховища служб відновлення, визначається "resourceGroup": "[параметри (" 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": {}
}
}

0 для відповіді № 2

Ось JSON я використовую для досягнення цього - він масштабуєпри використанні copyIndex () ... як включено до ресурсу нижче. Я адаптував це з власного шаблону JSON Microsoft на порталі Azure, оскільки вони покращили розгортання VM, щоб включити можливість резервного копіювання під час розгортання.

Я, як правило, надаю масив імен VM та Iназивайте інші ресурси з цих імен за допомогою циклів копіювання. Технічно вони "пов’язані з дітьми 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."
}
},
},

0 для відповіді № 3

Якщо ви збираєтеся використовувати цей вкладений шаблонпереконайтеся, що ви додали VM, який ви передбачили в першому шаблоні як залежний від нього. Таким чином, коли він запускає додаткове розгортання, VM вже є.