Mencadangkan mesin virtual di Azure dengan templat ARM
Azure Backup mencadangkan komputer dan aplikasi lokal, dan Azure VM. Artikel ini memperlihatkan kepada Anda cara mencadangkan Azure VM dengan templat Azure Resource Manager (templat ARM) dan Azure PowerShell. Mulai cepat ini berfokus pada proses penyebaran templat ARM untuk membuat vault Layanan Pemulihan. Untuk informasi selengkapnya tentang pengembangan templat ARM, lihat dokumentasi Azure Resource Manager dan referensi templat.
Templat Azure Resource Manager adalah file JavaScript Object Notation (JSON) yang menentukan infrastruktur dan konfigurasi untuk proyek Anda. Template tersebut menggunakan sintaksis deklaratif. Anda menjelaskan penyebaran yang Dimaksudkan tanpa menulis urutan perintah pemrograman untuk membuat penyebaran.
Vault Layanan Pemulihan adalah kontainer logis yang menyimpan data cadangan untuk sumber daya yang dilindungi, seperti Azure VM. Ketika pekerjaan pencadangan berjalan, titik pemulihan dibuat di dalam vault Layanan Pemulihan. Kemudian Anda dapat menggunakan salah satu titik pemulihan ini untuk memulihkan data ke titik waktu tertentu. Atau, Anda dapat mencadangkan VM menggunakan Azure PowerShell, Azure CLI, atau di portal Microsoft Azure.
Jika lingkungan Anda telah memenuhi prasyarat dan Anda terbiasa menggunakan templat ARM, pilih tombol Sebarkan ke Azure. Templat akan terbuka di portal Microsoft Azure.
Meninjau templat
Templat yang digunakan di mulai cepat ini berasal dari Templat Mulai Cepat Azure. Templat ini memungkinkan Anda untuk menyebarkan VM Windows sederhana dan vault Layanan Pemulihan yang dikonfigurasi dengan DefaultPolicy untuk Perlindungan.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"metadata": {
"_generator": {
"name": "bicep",
"version": "0.5.6.12127",
"templateHash": "12431143174203400392"
}
},
"parameters": {
"projectName": {
"type": "string",
"maxLength": 8,
"metadata": {
"description": "Specifies a name for generating resource names."
}
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]",
"metadata": {
"description": "Specifies the location for all resources."
}
},
"adminUsername": {
"type": "string",
"metadata": {
"description": "Specifies the administrator username for the Virtual Machine."
}
},
"adminPassword": {
"type": "secureString",
"metadata": {
"description": "Specifies the administrator password for the Virtual Machine."
}
},
"dnsLabelPrefix": {
"type": "string",
"metadata": {
"description": "Specifies the unique DNS Name for the Public IP used to access the Virtual Machine."
}
},
"vmSize": {
"type": "string",
"defaultValue": "Standard_A2",
"metadata": {
"description": "Virtual machine size."
}
},
"windowsOSVersion": {
"type": "string",
"defaultValue": "2016-Datacenter",
"allowedValues": [
"2008-R2-SP1",
"2012-Datacenter",
"2012-R2-Datacenter",
"2016-Nano-Server",
"2016-Datacenter-with-Containers",
"2016-Datacenter",
"2019-Datacenter",
"2019-Datacenter-Core",
"2019-Datacenter-Core-smalldisk",
"2019-Datacenter-Core-with-Containers",
"2019-Datacenter-Core-with-Containers-smalldisk",
"2019-Datacenter-smalldisk",
"2019-Datacenter-with-Containers",
"2019-Datacenter-with-Containers-smalldisk"
],
"metadata": {
"description": "Specifies the Windows version for the VM. This will pick a fully patched image of this given Windows version."
}
}
},
"variables": {
"storageAccountName": "[format('{0}store', parameters('projectName'))]",
"networkInterfaceName": "[format('{0}-nic', parameters('projectName'))]",
"vNetAddressPrefix": "10.0.0.0/16",
"vNetSubnetName": "default",
"vNetSubnetAddressPrefix": "10.0.0.0/24",
"publicIPAddressName": "[format('{0}-ip', parameters('projectName'))]",
"vmName": "[format('{0}-vm', parameters('projectName'))]",
"vNetName": "[format('{0}-vnet', parameters('projectName'))]",
"vaultName": "[format('{0}-vault', parameters('projectName'))]",
"backupFabric": "Azure",
"backupPolicyName": "DefaultPolicy",
"protectionContainer": "[format('iaasvmcontainer;iaasvmcontainerv2;{0};{1}', resourceGroup().name, variables('vmName'))]",
"protectedItem": "[format('vm;iaasvmcontainerv2;{0};{1}', resourceGroup().name, variables('vmName'))]",
"networkSecurityGroupName": "default-NSG"
},
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2021-08-01",
"name": "[variables('storageAccountName')]",
"location": "[parameters('location')]",
"sku": {
"name": "Standard_LRS"
},
"kind": "Storage",
"properties": {}
},
{
"type": "Microsoft.Network/publicIPAddresses",
"apiVersion": "2021-05-01",
"name": "[variables('publicIPAddressName')]",
"location": "[parameters('location')]",
"properties": {
"publicIPAllocationMethod": "Dynamic",
"dnsSettings": {
"domainNameLabel": "[parameters('dnsLabelPrefix')]"
}
}
},
{
"type": "Microsoft.Network/networkSecurityGroups",
"apiVersion": "2021-05-01",
"name": "[variables('networkSecurityGroupName')]",
"location": "[parameters('location')]",
"properties": {
"securityRules": [
{
"name": "default-allow-3389",
"properties": {
"priority": 1000,
"access": "Allow",
"direction": "Inbound",
"destinationPortRange": "3389",
"protocol": "Tcp",
"sourceAddressPrefix": "*",
"sourcePortRange": "*",
"destinationAddressPrefix": "*"
}
}
]
}
},
{
"type": "Microsoft.Network/virtualNetworks",
"apiVersion": "2021-05-01",
"name": "[variables('vNetName')]",
"location": "[parameters('location')]",
"properties": {
"addressSpace": {
"addressPrefixes": [
"[variables('vNetAddressPrefix')]"
]
},
"subnets": [
{
"name": "[variables('vNetSubnetName')]",
"properties": {
"addressPrefix": "[variables('vNetSubnetAddressPrefix')]",
"networkSecurityGroup": {
"id": "[resourceId('Microsoft.Network/networkSecurityGroups', variables('networkSecurityGroupName'))]"
}
}
}
]
},
"dependsOn": [
"[resourceId('Microsoft.Network/networkSecurityGroups', variables('networkSecurityGroupName'))]"
]
},
{
"type": "Microsoft.Network/networkInterfaces",
"apiVersion": "2021-05-01",
"name": "[variables('networkInterfaceName')]",
"location": "[parameters('location')]",
"properties": {
"ipConfigurations": [
{
"name": "ipconfig1",
"properties": {
"privateIPAllocationMethod": "Dynamic",
"publicIPAddress": {
"id": "[resourceId('Microsoft.Network/publicIPAddresses', variables('publicIPAddressName'))]"
},
"subnet": {
"id": "[format('{0}/subnets/{1}', resourceId('Microsoft.Network/virtualNetworks', variables('vNetName')), variables('vNetSubnetName'))]"
}
}
}
]
},
"dependsOn": [
"[resourceId('Microsoft.Network/publicIPAddresses', variables('publicIPAddressName'))]",
"[resourceId('Microsoft.Network/virtualNetworks', variables('vNetName'))]"
]
},
{
"type": "Microsoft.Compute/virtualMachines",
"apiVersion": "2021-11-01",
"name": "[variables('vmName')]",
"location": "[parameters('location')]",
"properties": {
"hardwareProfile": {
"vmSize": "[parameters('vmSize')]"
},
"osProfile": {
"computerName": "[variables('vmName')]",
"adminUsername": "[parameters('adminUsername')]",
"adminPassword": "[parameters('adminPassword')]"
},
"storageProfile": {
"imageReference": {
"publisher": "MicrosoftWindowsServer",
"offer": "WindowsServer",
"sku": "[parameters('windowsOSVersion')]",
"version": "latest"
},
"osDisk": {
"createOption": "FromImage"
},
"dataDisks": [
{
"diskSizeGB": 1023,
"lun": 0,
"createOption": "Empty"
}
]
},
"networkProfile": {
"networkInterfaces": [
{
"id": "[resourceId('Microsoft.Network/networkInterfaces', variables('networkInterfaceName'))]"
}
]
},
"diagnosticsProfile": {
"bootDiagnostics": {
"enabled": true,
"storageUri": "[reference(resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName'))).primaryEndpoints.blob]"
}
}
},
"dependsOn": [
"[resourceId('Microsoft.Network/networkInterfaces', variables('networkInterfaceName'))]",
"[resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName'))]"
]
},
{
"type": "Microsoft.RecoveryServices/vaults",
"apiVersion": "2022-01-01",
"name": "[variables('vaultName')]",
"location": "[parameters('location')]",
"sku": {
"name": "RS0",
"tier": "Standard"
},
"properties": {}
},
{
"type": "Microsoft.RecoveryServices/vaults/backupFabrics/protectionContainers/protectedItems",
"apiVersion": "2022-01-01",
"name": "[format('{0}/{1}/{2}/{3}', variables('vaultName'), variables('backupFabric'), variables('protectionContainer'), variables('protectedItem'))]",
"properties": {
"protectedItemType": "Microsoft.Compute/virtualMachines",
"policyId": "[format('{0}/backupPolicies/{1}', resourceId('Microsoft.RecoveryServices/vaults', variables('vaultName')), variables('backupPolicyName'))]",
"sourceResourceId": "[resourceId('Microsoft.Compute/virtualMachines', variables('vmName'))]"
},
"dependsOn": [
"[resourceId('Microsoft.RecoveryServices/vaults', variables('vaultName'))]",
"[resourceId('Microsoft.Compute/virtualMachines', variables('vmName'))]"
]
}
]
}
Sumber daya yang ditentukan di dalam templat meliputi:
- Microsoft.Storage/storageAccounts
- Microsoft.Network/publicIPAddresses
- Microsoft.Network/networkSecurityGroups
- Microsoft.Network/virtualNetworks
- Microsoft.Network/networkInterfaces
- Microsoft.Compute/virtualMachines
- Microsoft.RecoveryServices/vaults
- Microsoft.RecoveryServices/vaults/backupFabrics/protectionContainers/protectedItems
Menyebarkan templat
Untuk menerapkan templat, pilih Cobalah untuk membuka Azure Cloud Shell, lalu tempelkan skrip PowerShell berikut ke dalam jendela shell. Untuk menempelkan kode, klik kanan jendela shell lalu pilih Tempel.
$projectName = Read-Host -Prompt "Enter a project name (limited to eight characters) that is used to generate Azure resource names"
$location = Read-Host -Prompt "Enter the location (for example, centralus)"
$adminUsername = Read-Host -Prompt "Enter the administrator username for the virtual machine"
$adminPassword = Read-Host -Prompt "Enter the administrator password for the virtual machine" -AsSecureString
$dnsPrefix = Read-Host -Prompt "Enter the unique DNS Name for the Public IP used to access the virtual machine"
$resourceGroupName = "${projectName}rg"
$templateUri = "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.recoveryservices/recovery-services-create-vm-and-configure-backup/azuredeploy.json"
New-AzResourceGroup -Name $resourceGroupName -Location $location
New-AzResourceGroupDeployment -ResourceGroupName $resourceGroupName -TemplateUri $templateUri -projectName $projectName -adminUsername $adminUsername -adminPassword $adminPassword -dnsLabelPrefix $dnsPrefix
Azure PowerShell digunakan untuk menyebarkan templat ARM dalam mulai cepat ini. Portal Azure, Azure CLI, dan REST API juga dapat digunakan untuk menyebarkan templat.
Memvalidasi penyebaran
Memulai pekerjaan cadangan
Templat akan membuat mesin virtual dan mengaktifkan pencadangan pada mesin virtual. Setelah Anda menyebarkan templat, Anda perlu memulai pekerjaan cadangan. Untuk informasi selengkapnya, lihat Memulai pekerjaan cadangan.
Memantau pekerjaan pencadangan
Untuk memantau pekerjaan cadangan, lihat Memantau pekerjaan cadangan.
Membersihkan sumber daya
Jika Anda tidak perlu lagi mencadangkan VM, Anda dapat membersihkannya.
- Jika Anda ingin mencoba memulihkan VM, lewati pembersihan.
- Jika Anda menggunakan VM yang ada, Anda dapat melewati cmdlet Remove-AzResourceGroup akhir untuk meninggalkan grup sumber daya dan VM di tempatnya.
Nonaktifkan perlindungan, hapus titik pemulihan dan vault. Kemudian hapus grup sumber daya dan sumber daya VM terkait, sebagai berikut:
Disable-AzRecoveryServicesBackupProtection -Item $item -RemoveRecoveryPoints
$vault = Get-AzRecoveryServicesVault -Name "myRecoveryServicesVault"
Remove-AzRecoveryServicesVault -Vault $vault
Remove-AzResourceGroup -Name "myResourceGroup"
Langkah berikutnya
Dalam mulai cepat ini, Anda membuat brankas Layanan Pemulihan, mengaktifkan perlindungan pada VM, dan membuat titik pemulihan awal.
- Pelajari cara mencadangkan VM di portal Microsoft Azure.
- Pelajari cara memulihkan VM dengan cepat
- Pelajari cara membuat templat ARM.