Sichern einer virtuellen Maschine in Azure mit einer Bicep-Vorlage
Mit Azure Backup können Sie Ihre Azure-VM mit mehreren Optionen sichern - z. B. über das Azure-Portal, PowerShell, CLI, Azure Resource Manager, Bicep und so weiter. Dieser Artikel beschreibt, wie eine Azure-VM mit einer Azure Bicep-Vorlage und Azure PowerShell gesichert werden kann. Dieser Schnellstart konzentriert sich auf den Prozess der Bereitstellung einer Bicep-Vorlage zur Erstellung eines Recovery Services-Depots. Weitere Informationen zur Entwicklung von Bicep-Vorlagen finden Sie in der Bicep-Dokumentation und in der Vorlagenreferenz.
Bicep ist eine Sprache für die deklarative Bereitstellung von Azure-Ressourcen. Sie können Bicep anstelle von JSON verwenden, um Azure Resource Manager-Vorlagen (ARM-Vorlagen) zu erstellen. Die Bicep-Syntax reduziert die Komplexität und verbessert die Entwicklungserfahrung. Bicep ist eine transparente Abstraktion über die ARM-Vorlage JSON, die alle JSON-Vorlagenfunktionen bietet. Während der Bereitstellung konvertiert die Bicep CLI eine Bicep-Datei in eine ARM-Vorlage JSON. In einer Bicep-Datei werden die Azure-Ressourcen und Ressourceneigenschaften angegeben, ohne dass eine Folge von Programmierbefehlen zur Erstellung von Ressourcen geschrieben werden muss.
Ressourcentypen, API-Versionen und Eigenschaften, die in einer ARM-Vorlage gültig sind, sind auch in einer Bicep-Datei gültig.
Voraussetzungen
Informationen zum Einrichten Ihrer Umgebung für die Bicep-Entwicklung finden Sie unter Installieren von Bicep-Tools.
Hinweis
Installieren Sie das neueste Azure PowerShell-Modul und die Bicep CLI wie im Artikel beschrieben.
Überprüfen der Vorlage
Die unten verwendete Vorlage stammt aus Azure Schnellstartvorlagen. Mit dieser Vorlage können Sie einen einfachen Windows VM- und Recovery Services-Datenspeicher bereitstellen, der mit DefaultPolicy für Protection konfiguriert ist.
@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
}
}
Die in der obigen Vorlage definierten Ressourcen sind:
- 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
Bereitstellen der Vorlage
Um die Vorlage bereitzustellen, wählen Sie Versuchen, um die Azure Cloud Shell zu öffnen, und fügen Sie dann das folgende PowerShell-Skript in das Shell-Fenster ein. Klicken Sie zum Einfügen des Codes mit der rechten Maustaste auf das Shell-Fenster, und wählen Sie Einfügen aus.
$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
Überprüfen der Bereitstellung
Starten eines Sicherungsauftrags
Die Vorlage erstellt eine VM und aktiviert die Sicherung auf der VM. Nachdem Sie die Vorlage bereitgestellt haben, müssen Sie einen Sicherungsauftrag starten. Weitere Informationen finden Sie unter Starten eines Sicherungsauftrags.
Überwachen des Sicherungsauftrags
Informationen zum Überwachen des Sicherungsauftrags finden Sie unter Überwachen des Sicherungsauftrags.
Bereinigen von Ressourcen
- Wenn der virtuelle Computer nicht mehr gesichert werden muss, können Sie ihn bereinigen.
- Um die Wiederherstellung der VM zu testen, überspringen Sie den Bereinigungsprozess.
- Wenn Sie eine vorhandene VM verwendet haben, können Sie das abschließende Cmdlet Remove-AzResourceGroup überspringen, um die Ressourcengruppe und VM zu behalten.
Führen Sie die folgenden Schritte aus:
Deaktivieren Sie den Schutz, und entfernen Sie die Wiederherstellungspunkte und den Tresor.
Löschen Sie die Ressourcengruppe und die zugehörigen VM-Ressourcen wie folgt:
Disable-AzRecoveryServicesBackupProtection -Item $item -RemoveRecoveryPoints $vault = Get-AzRecoveryServicesVault -Name "myRecoveryServicesVault" Remove-AzRecoveryServicesVault -Vault $vault Remove-AzResourceGroup -Name "myResourceGroup"
Nächste Schritte
In dieser Schnellstartanleitung haben Sie einen Recovery Services-Tresor erstellt, den Schutz für einen virtuellen Computer aktiviert und den ersten Wiederherstellungspunkt erstellt.
- Erfahren Sie, wie Sie im Azure-Portal VMs sichern.
- Erfahren Sie, wie Sie einen virtuellen Computer schnell wiederherstellen.
- Lernen Sie, wie man Bizeps-Schablonen erstellt.
- Lernen Sie, wie Sie Azure Resource Manager-Vorlagen (ARM-Vorlagen) in Bicep-Dateien dekompilieren können.
- Erfahren Sie, wie Sie eine Azure-VM mithilfe der REST-API wiederherstellen.