Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Backup di Azure consente di eseguire il backup della macchina virtuale di Azure usando più opzioni, ad esempio portale di Azure, PowerShell, interfaccia della riga di comando, Azure Resource Manager, Bicep e così via. Questo articolo descrive come eseguire il backup di una macchina virtuale di Azure con un file Bicep di Azure e Azure PowerShell. Questa guida introduttiva è incentrata sul processo di distribuzione di un file Bicep per creare una cassetta dei Servizi di ripristino. Per altre informazioni sullo sviluppo di file Bicep, vedere la documentazione di Bicep e le informazioni di riferimento sul modello.
Bicep è un linguaggio che consente di distribuire in modo dichiarativo le risorse di Azure. È possibile usare Bicep al posto di JSON per sviluppare modelli di Azure Resource Manager (modelli di ARM). La sintassi Bicep riduce la complessità e migliora l'esperienza di sviluppo. Bicep è un'astrazione trasparente su JSON del modello ARM che fornisce tutte le funzionalità del modello JSON. Durante la distribuzione, l'interfaccia della riga di comando di Bicep converte un file Bicep in un file JSON del modello di Resource Manager. Un file Bicep indica le risorse di Azure e le proprietà delle risorse, senza scrivere una sequenza di comandi di programmazione per creare risorse.
I tipi di risorse, le versioni api e le proprietà validi in un modello di Resource Manager sono validi anche in un file Bicep.
Prerequisiti
Per configurare l'ambiente per lo sviluppo Bicep, vedere Installare gli strumenti Bicep.
Annotazioni
Installare il modulo Azure PowerShell più recente e l'interfaccia della riga di comando di Bicep come descritto in dettaglio nell'articolo.
Rivedere il modello
Il modello usato di seguito proviene dai modelli di avvio rapido di Azure. Questo modello consente di distribuire una semplice macchina virtuale Windows e l'insieme di credenziali di Servizi di ripristino configurato con DefaultPolicy for Protection.
@description('Specifies a name for generating resource names.')
@maxLength(8)
param projectName string
@description('Specifies the location for all resources.')
param location string = resourceGroup().location
@description('Specifies the administrator username for the Virtual Machine.')
param adminUsername string
@description('Specifies the administrator password for the Virtual Machine.')
@secure()
param adminPassword string
@description('Specifies the unique DNS Name for the Public IP used to access the Virtual Machine.')
param dnsLabelPrefix string
@description('Virtual machine size.')
param vmSize string = 'Standard_A2'
@description('Specifies the Windows version for the VM. This will pick a fully patched image of this given Windows version.')
@allowed([
'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'
])
param windowsOSVersion string = '2016-Datacenter'
var storageAccountName = '${projectName}store'
var networkInterfaceName = '${projectName}-nic'
var vNetAddressPrefix = '10.0.0.0/16'
var vNetSubnetName = 'default'
var vNetSubnetAddressPrefix = '10.0.0.0/24'
var publicIPAddressName = '${projectName}-ip'
var vmName = '${projectName}-vm'
var vNetName = '${projectName}-vnet'
var vaultName = '${projectName}-vault'
var backupFabric = 'Azure'
var backupPolicyName = 'DefaultPolicy'
var protectionContainer = 'iaasvmcontainer;iaasvmcontainerv2;${resourceGroup().name};${vmName}'
var protectedItem = 'vm;iaasvmcontainerv2;${resourceGroup().name};${vmName}'
var networkSecurityGroupName = 'default-NSG'
resource storageAccount 'Microsoft.Storage/storageAccounts@2021-06-01' = {
name: storageAccountName
location: location
sku: {
name: 'Standard_LRS'
}
kind: 'Storage'
properties: {}
}
resource publicIPAddress 'Microsoft.Network/publicIPAddresses@2020-06-01' = {
name: publicIPAddressName
location: location
properties: {
publicIPAllocationMethod: 'Dynamic'
dnsSettings: {
domainNameLabel: dnsLabelPrefix
}
}
}
resource networkSecurityGroup 'Microsoft.Network/networkSecurityGroups@2020-06-01' = {
name: networkSecurityGroupName
location: location
properties: {
securityRules: [
{
name: 'default-allow-3389'
properties: {
priority: 1000
access: 'Allow'
direction: 'Inbound'
destinationPortRange: '3389'
protocol: 'Tcp'
sourceAddressPrefix: '*'
sourcePortRange: '*'
destinationAddressPrefix: '*'
}
}
]
}
}
resource vNet 'Microsoft.Network/virtualNetworks@2020-06-01' = {
name: vNetName
location: location
properties: {
addressSpace: {
addressPrefixes: [
vNetAddressPrefix
]
}
subnets: [
{
name: vNetSubnetName
properties: {
addressPrefix: vNetSubnetAddressPrefix
networkSecurityGroup: {
id: networkSecurityGroup.id
}
}
}
]
}
}
resource networkInterface 'Microsoft.Network/networkInterfaces@2020-06-01' = {
name: networkInterfaceName
location: location
properties: {
ipConfigurations: [
{
name: 'ipconfig1'
properties: {
privateIPAllocationMethod: 'Dynamic'
publicIPAddress: {
id: publicIPAddress.id
}
subnet: {
id: '${vNet.id}/subnets/${vNetSubnetName}'
}
}
}
]
}
}
resource virtualMachine 'Microsoft.Compute/virtualMachines@2020-06-01' = {
name: vmName
location: location
properties: {
hardwareProfile: {
vmSize: vmSize
}
osProfile: {
computerName: vmName
adminUsername: adminUsername
adminPassword: adminPassword
}
storageProfile: {
imageReference: {
publisher: 'MicrosoftWindowsServer'
offer: 'WindowsServer'
sku: windowsOSVersion
version: 'latest'
}
osDisk: {
createOption: 'FromImage'
}
dataDisks: [
{
diskSizeGB: 1023
lun: 0
createOption: 'Empty'
}
]
}
networkProfile: {
networkInterfaces: [
{
id: networkInterface.id
}
]
}
diagnosticsProfile: {
bootDiagnostics: {
enabled: true
storageUri: storageAccount.properties.primaryEndpoints.blob
}
}
}
}
resource recoveryServicesVault 'Microsoft.RecoveryServices/vaults@2020-02-02' = {
name: vaultName
location: location
sku: {
name: 'RS0'
tier: 'Standard'
}
properties: {}
}
resource vaultName_backupFabric_protectionContainer_protectedItem 'Microsoft.RecoveryServices/vaults/backupFabrics/protectionContainers/protectedItems@2020-02-02' = {
name: '${vaultName}/${backupFabric}/${protectionContainer}/${protectedItem}'
properties: {
protectedItemType: 'Microsoft.Compute/virtualMachines'
policyId: '${recoveryServicesVault.id}/backupPolicies/${backupPolicyName}'
sourceResourceId: virtualMachine.id
}
}
Le risorse definite nel modello precedente sono:
- 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
Implementare il modello
Per distribuire il modello, selezionare Prova per aprire Azure Cloud Shell e quindi incollare lo script di PowerShell seguente nella finestra della shell. Per incollare il codice, fare clic con il pulsante destro del mouse nella finestra della shell e quindi selezionare Incolla.
$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/main.bicep"
New-AzResourceGroup -Name $resourceGroupName -Location $location
New-AzResourceGroupDeployment -ResourceGroupName $resourceGroupName -TemplateUri $templateUri -projectName $projectName -adminUsername $adminUsername -adminPassword $adminPassword -dnsLabelPrefix $dnsPrefix
Convalidare la distribuzione
Avviare un processo di backup
Il modello crea una macchina virtuale e abilita il backup nella macchina virtuale. Dopo aver distribuito il modello, è necessario avviare un processo di backup. Per altre informazioni, vedere Avviare un processo di backup.
Monitorare il processo di backup
Per monitorare il processo di backup, vedere Monitorare il processo di backup.
Pulire le risorse
- Se non è più necessario eseguire il backup della VM, è possibile eseguire la pulizia.
- Per provare a ripristinare la macchina virtuale, ignorare il processo di pulizia.
- Se è stata usata una macchina virtuale esistente, è possibile ignorare il cmdlet Remove-AzResourceGroup finale per mantenere il gruppo di risorse e la macchina virtuale.
Segui questi passaggi:
Disabilitare la protezione, rimuovere i punti di ripristino e l'insieme di credenziali.
Eliminare il gruppo di risorse e le risorse vm associate, come indicato di seguito:
Disable-AzRecoveryServicesBackupProtection -Item $item -RemoveRecoveryPoints $vault = Get-AzRecoveryServicesVault -Name "myRecoveryServicesVault" Remove-AzRecoveryServicesVault -Vault $vault Remove-AzResourceGroup -Name "myResourceGroup"
Passaggi successivi
In questa guida introduttiva è stato creato un insieme di credenziali di Servizi di ripristino, è stata abilitata la protezione per una VM ed è stato creato il punto di ripristino iniziale.
- Informazioni su come eseguire il backup delle VM nel portale di Azure.
- Informazioni su come ripristinare rapidamente una VM
- Informazioni su come creare file Bicep.
- Informazioni su come decompilare i modelli di Azure Resource Manager (modelli arm) in file Bicep.
- Informazioni su come ripristinare una macchina virtuale di Azure usando l'API REST.