Übung: Konvertieren und Migrieren von Ressourcen
Wichtig
Sie benötigen für diese Übung ein eigenes Azure-Abonnement. Außerdem fallen möglicherweise Gebühren für Sie an. Wenn Sie noch kein Azure-Abonnement besitzen, können Sie ein kostenloses Konto erstellen, bevor Sie beginnen.
Ihr Spielzeugunternehmen hat einen Konkurrenten aufgekauft, der einen beliebten Spielzeug-LKW herstellt. Die Spielzeuge stellen eine Verbindung mit einer in Azure gehosteten VM her, um Firmwareupdates zu erhalten. Alle Ressourcen für den virtuellen Computer wurden manuell mithilfe des Azure-Portals erstellt. In dieser Lerneinheit beginnen Sie mit dem Migrieren der Ressourcen zu einer Bicep-Datei.
Während des Prozesses führen Sie die folgenden Aufgaben aus:
- Stellen Sie einen neuen virtuellen Computer über das Azure-Portal bereit.
- Exportieren Sie die Ressourcen des virtuellen Computers in eine JSON-Vorlage.
- Dekompilieren Sie die JSON-Vorlage in Bicep.
- Erstellen Sie eine neue Bicep-Datei, und verschieben Sie die Ressourcen aus der dekompilierten Vorlage.
In dieser Übung wird die Bicep-Erweiterung für Visual Studio Code verwendet. Sie müssen diese Erweiterung in Visual Studio Code installieren.
Erstellen eines virtuellen Computers mit dem Azure-Portal
Stellen Sie zunächst einen virtuellen Computer mithilfe des Azure-Portals bereit, um die Situation im Beispielszenario zu simulieren.
Melden Sie sich beim Azure-Portal an.
Wählen Sie auf der Azure-Startseite unter Azure-Dienste die Option Ressource erstellen aus:
Azure Marketplace wird im Bereich Ressource erstellen angezeigt.
Wählen Sie unter Ubuntu Server 20.04 LTS die Option Erstellen aus:
Wichtig
Wenn Ubuntu Server 20.04 LTS nicht angezeigt wird, wechseln Sie direkt zu Ubuntu Server 20.04 LTS im Azure Marketplace.
Füllen Sie auf der Registerkarte Grundlagen die folgenden Felder für jede Einstellung aus. Verwenden Sie für alle anderen Einstellungen die Standardwerte.
Einstellung Wert Projektdetails Resource group Wählen Sie Neu erstellen aus, und geben Sie ToyTruck ein. Instanzendetails Name des virtuellen Computers ToyTruckServer Region (USA) USA, Westen 3 Verfügbarkeitsoptionen Keine Infrastrukturredundanz erforderlich Abbildung Ubuntu Server 20.04 LTS – x64 Gen2 Größe Standard_D2s_v3 Administratorkonto Authentifizierungsart Kennwort Username toytruckadmin Kennwort Geben Sie ein Kennwort ein. Regeln für eingehende Ports Öffentliche Eingangsports Keine Stellen Sie auf der Registerkarte Verwaltung sicher, dass Automatisches Herunterfahren aktivieren nicht ausgewählt ist.
Klicken Sie auf Überprüfen + erstellen. Azure überprüft Ihre Einstellungen. Abhängig von den Imageanforderungen müssen Sie möglicherweise weitere Informationen eingeben oder auswählen.
Wählen Sie Erstellen aus, um die VM bereitzustellen und zu erstellen.
Das Azure-Portal zeigt die Bereitstellung an, während sie ausgeführt wird.
Wählen Sie nach Abschluss der Bereitstellung den Namen der Ressourcengruppe aus, um diese zu öffnen:
Die Ressourcengruppe enthält jetzt den virtuellen Computer und seine Abhängigkeiten.
Exportieren der Ressourcengruppeninhalte in eine JSON-Vorlage
Wählen Sie im Menü links unter Automation die Option Vorlage exportieren aus:
Eine JSON-Vorlage wird generiert. Es kann ein oder zwei Minuten dauern, bis der Prozess abgeschlossen ist.
Wählen Sie die Schaltfläche Herunterladen aus:
Die JSON-Vorlage und die Parameterdatei werden als ZIP-Datei auf Ihren Computer heruntergeladen.
Entzippen Sie die Datei in einen Ordner, auf den Sie problemlos zugreifen können, z. B. auf Ihren Desktop.
Öffnen Sie Visual Studio Code.
Vorbereiten der lokalen Umgebung
Wählen Sie im Menü Terminal die Option New Terminal (Neues Terminal) aus. Das Terminalfenster wird in der Regel in der unteren Hälfte des Bildschirms geöffnet.
Wenn die auf der rechten Seite des Terminalfensters angezeigte Shell bash ist, ist die richtige Shell geöffnet, und Sie können mit dem nächsten Abschnitt fortfahren.
Wenn eine andere Shell als bash angezeigt wird, wählen Sie die Shell-Dropdownliste und dann Azure Cloud Shell (Bash) aus.
Wählen Sie in der Liste der Terminalshells bash aus.
Wechseln Sie im Terminal zu dem Verzeichnis, in dem Sie Ihre Vorlage gespeichert haben. Wenn Sie Ihre Vorlage beispielsweise im Ordner templates gespeichert haben, können Sie den folgenden Befehl verwenden:
cd templates
Installieren von Bicep
Vergewissern Sie sich mit dem folgenden Befehl, dass Sie die aktuelle Version von Bicep verwenden:
az bicep install && az bicep upgrade
Wählen Sie im Menü Terminal die Option New Terminal (Neues Terminal) aus. Das Terminalfenster wird in der Regel in der unteren Hälfte des Bildschirms geöffnet.
Wenn die auf der rechten Seite des Terminalfensters angezeigte Shell powershell oder pwsh ist, ist die richtige Shell geöffnet, und Sie können mit dem nächsten Abschnitt fortfahren.
Wenn eine andere Shell als powershell oder pwsh angezeigt wird, wählen Sie die Shell-Dropdownliste und dann PowerShell aus.
Wählen Sie in der Liste der Terminalshells powershell oder pwsh aus.
Wechseln Sie im Terminal zu dem Verzeichnis, in dem Sie Ihre Vorlage gespeichert haben. Wenn Sie Ihre Vorlage beispielsweise im Ordner templates gespeichert haben, können Sie den folgenden Befehl verwenden:
Set-Location -Path templates
Installieren der Bicep CLI
Installieren Sie die Bicep-CLI, um Bicep über Azure PowerShell zu verwenden.
Dekompilieren der JSON-Vorlage in Bicep
Führen Sie den Befehl decompile
aus, um eine Bicep-Datei aus der Vorlage zu erstellen:
az bicep decompile --file template.json
Der Dekompilierungsvorgang generiert eine Warnung ähnlich der folgenden:
WARNING: Decompilation is a best-effort process, as there is no guaranteed mapping from ARM JSON
to Bicep.
You might need to fix warnings and errors in the generated bicep file(s), or decompilation might fail
entirely if an accurate conversion is not possible.
If you would like to report any issues or inaccurate conversions,
please see https://github.com/Azure/bicep/issues.
Führen Sie den Befehl decompile
aus, um eine Bicep-Datei aus der Vorlage zu erstellen:
bicep decompile template.json
Der Dekompilierungsvorgang generiert eine Warnung ähnlich der folgenden:
WARNING: Decompilation is a best-effort process, as there is no guaranteed mapping from ARM JSON
to Bicep.
You might need to fix warnings and errors in the generated bicep file(s), or decompilation might fail
entirely if an accurate conversion is not possible.
If you would like to report any issues or inaccurate conversions,
please see https://github.com/Azure/bicep/issues.
Untersuchen der dekompilierten Bicep-Datei
Öffnen Sie die Datei template.bicep in Visual Studio Code, und lesen Sie sie durch. Beachten Sie, dass es sich um eine gültige Bicep-Datei handelt, die aber einige Probleme aufweist, z. B.:
- Die symbolischen Namen, die Parametern und Ressourcen gegeben werden, enthalten Unterstriche und sind nicht leicht verständlich.
- Die
location
-Eigenschaft ist in allen Ressourcendefinitionen hartcodiert. - Die Vorlage enthält hartcodierte Werte, die entweder Parameter sein oder automatisch von Azure festgelegt werden sollen.
Sie beheben diese Probleme im weiteren Verlauf dieses Moduls.
Erstellen einer neuen Bicep-Datei
Erstellen Sie in Visual Studio Code eine neue Datei mit dem Namen main.bicep.
Speichern Sie die leere Datei, damit Visual Studio Code die Bicep-Tools lädt.
Sie können entweder Datei>Speichern unter auswählen oder STRG+S unter Windows (⌘+S unter macOS) drücken.
Teilen Sie den Editor so, dass Sie beide Dateien gleichzeitig sehen können (die Datei template.bicep im linken Bereich und die Datei main.bicep im rechten Bereich).
- Wählen Sie die Registerkarte main.bicep aus.
- Wählen Sie Ansicht>Editorlayout>Rechts teilen aus, um die Registerkarte main.bicep im rechten Bereich zu öffnen.
- Schließen Sie die Registerkarte main.bicep im linken Bereich.
Kopieren der einzelnen Elemente in die neue Bicep-Datei
Kopieren Sie die Ressource namens
networkSecurityGroups_ToyTruckServer_nsg_name_resource
aus der Datei template.bicep in die Datei main.bicep.Beachten Sie beim Kopieren, dass die
securityRules
Eigenschaft leer ist. Später in diesem Modul werden Sie die Datei umgestalten, um redundante Eigenschaften zu entfernen.Visual Studio Code gibt einen Fehler an, weil der
networkSecurityGroups_ToyTruckServer_nsg_name
-Parameter fehlt:Kopieren Sie den Parameter in die Datei main.bicep.
Wiederholen Sie den Vorgang mit den folgenden Ressourcen und ihren zugehörigen Parametern:
publicIPAddresses_ToyTruckServer_ip_name_resource
virtualMachines_ToyTruckServer_name_resource
virtualNetworks_ToyTruck_vnet_name_resource
virtualNetworks_ToyTruck_vnet_name_default
networkInterfaces_toytruckserver890_name_resource
Hinweis
Die Namen der Ressourcen in Ihrer Bereitstellung können sich von den hier aufgeführten Ressourcen unterscheiden. Suchen Sie nach Ressourcen mit Namen, die diesen hier ähnlich sind.
Überprüfen Sie beim Kopieren der einzelnen Ressourcen deren Eigenschaften. Später in diesem Modul aktualisieren Sie die Eigenschaften und die Konfiguration jeder Ressource, um bewährte Methoden von Bicep zu befolgen.
Tipp
Wenn Sie Ihre eigenen Vorlagen konvertieren oder exportieren, können Sie die Ressourcen aktualisieren, um beim Kopieren bewährte Methoden zu befolgen. In diesem Modul werden die Ressourcen separat aktualisiert, um die einzelnen Phasen des Migrationsprozesses zu verdeutlichen.
Überprüfen auf fehlende Ressourcen
Öffnen Sie im Azure-Portal die Ressourcengruppe ToyTruck.
Überprüfen Sie die Liste der Ressourcen, und vergleichen Sie sie mit der Liste der Ressourcen in Ihrer Bicep-Datei. Beachten Sie, dass die Ressourcengruppe eine Ressource Disk enthält, die in Ihrer Bicep-Datei nicht als
resource
definiert ist:Wenn Sie mit virtuellen Computern in Bicep arbeiten, müssen Sie die verwaltete Datenträgerressource nicht explizit definieren. Stattdessen definieren Sie Eigenschaften des virtuellen Computers, und Azure erstellt den verwalteten Datenträger automatisch für Sie. In diesem Beispiel müssen Sie sich keine Sorgen machen, dass die Datenträgerressource nicht in der Bicep-Datei definiert ist.
Überprüfen der Vorlage
Am Ende der Migrationsphase sollte die Datei main.bicep in etwa wie folgt aussehen:
param virtualNetworks_ToyTruck_vnet_name string = 'ToyTruck-vnet'
param virtualMachines_ToyTruckServer_name string = 'ToyTruckServer'
param networkInterfaces_toytruckserver154_name string = 'toytruckserver154'
param publicIPAddresses_ToyTruckServer_ip_name string = 'ToyTruckServer-ip'
param networkSecurityGroups_ToyTruckServer_nsg_name string = 'ToyTruckServer-nsg'
resource networkSecurityGroups_ToyTruckServer_nsg_name_resource 'Microsoft.Network/networkSecurityGroups@2022-05-01' = {
name: networkSecurityGroups_ToyTruckServer_nsg_name
location: 'westus3'
properties: {
securityRules: []
}
}
resource publicIPAddresses_ToyTruckServer_ip_name_resource 'Microsoft.Network/publicIPAddresses@2022-05-01' = {
name: publicIPAddresses_ToyTruckServer_ip_name
location: 'westus3'
sku: {
name: 'Standard'
tier: 'Regional'
}
properties: {
ipAddress: '1.2.3.4'
publicIPAddressVersion: 'IPv4'
publicIPAllocationMethod: 'Static'
idleTimeoutInMinutes: 4
ipTags: []
}
}
resource virtualMachines_ToyTruckServer_name_resource 'Microsoft.Compute/virtualMachines@2022-08-01' = {
name: virtualMachines_ToyTruckServer_name
location: 'westus3'
properties: {
hardwareProfile: {
vmSize: 'Standard_D2s_v3'
}
storageProfile: {
imageReference: {
publisher: 'canonical'
offer: '0001-com-ubuntu-server-focal'
sku: '20_04-lts-gen2'
version: 'latest'
}
osDisk: {
osType: 'Linux'
name: '${virtualMachines_ToyTruckServer_name}_disk1_23e6a144c4ea4049b3e2be24b78a9e81'
createOption: 'FromImage'
caching: 'ReadWrite'
managedDisk: {
storageAccountType: 'Premium_LRS'
id: resourceId('Microsoft.Compute/disks', '${virtualMachines_ToyTruckServer_name}_disk1_23e6a144c4ea4049b3e2be24b78a9e81')
}
deleteOption: 'Delete'
diskSizeGB: 30
}
dataDisks: []
}
osProfile: {
computerName: virtualMachines_ToyTruckServer_name
adminUsername: 'toytruckadmin'
linuxConfiguration: {
disablePasswordAuthentication: false
provisionVMAgent: true
patchSettings: {
patchMode: 'ImageDefault'
assessmentMode: 'ImageDefault'
}
enableVMAgentPlatformUpdates: false
}
secrets: []
allowExtensionOperations: true
requireGuestProvisionSignal: true
}
networkProfile: {
networkInterfaces: [
{
id: networkInterfaces_toytruckserver154_name_resource.id
properties: {
deleteOption: 'Detach'
}
}
]
}
diagnosticsProfile: {
bootDiagnostics: {
enabled: true
}
}
}
}
resource virtualNetworks_ToyTruck_vnet_name_resource 'Microsoft.Network/virtualNetworks@2022-05-01' = {
name: virtualNetworks_ToyTruck_vnet_name
location: 'westus3'
properties: {
addressSpace: {
addressPrefixes: [
'10.0.0.0/16'
]
}
subnets: [
{
name: 'default'
id: virtualNetworks_ToyTruck_vnet_name_default.id
properties: {
addressPrefix: '10.0.0.0/24'
delegations: []
privateEndpointNetworkPolicies: 'Disabled'
privateLinkServiceNetworkPolicies: 'Enabled'
}
type: 'Microsoft.Network/virtualNetworks/subnets'
}
]
virtualNetworkPeerings: []
enableDdosProtection: false
}
}
resource virtualNetworks_ToyTruck_vnet_name_default 'Microsoft.Network/virtualNetworks/subnets@2022-05-01' = {
name: '${virtualNetworks_ToyTruck_vnet_name}/default'
properties: {
addressPrefix: '10.0.0.0/24'
delegations: []
privateEndpointNetworkPolicies: 'Disabled'
privateLinkServiceNetworkPolicies: 'Enabled'
}
dependsOn: [
virtualNetworks_ToyTruck_vnet_name_resource
]
}
resource networkInterfaces_toytruckserver154_name_resource 'Microsoft.Network/networkInterfaces@2022-05-01' = {
name: networkInterfaces_toytruckserver154_name
location: 'westus3'
kind: 'Regular'
properties: {
ipConfigurations: [
{
name: 'ipconfig1'
id: '${networkInterfaces_toytruckserver154_name_resource.id}/ipConfigurations/ipconfig1'
etag: 'W/"6a38849d-bd59-4eae-856e-4909f7ac1fac"'
type: 'Microsoft.Network/networkInterfaces/ipConfigurations'
properties: {
provisioningState: 'Succeeded'
privateIPAddress: '10.0.0.4'
privateIPAllocationMethod: 'Dynamic'
publicIPAddress: {
name: 'ToyTruckServer-ip'
id: publicIPAddresses_ToyTruckServer_ip_name_resource.id
properties: {
provisioningState: 'Succeeded'
resourceGuid: '07079685-0980-4ddf-acc3-3c8797c94b9a'
publicIPAddressVersion: 'IPv4'
publicIPAllocationMethod: 'Dynamic'
idleTimeoutInMinutes: 4
ipTags: []
ipConfiguration: {
id: '${networkInterfaces_toytruckserver154_name_resource.id}/ipConfigurations/ipconfig1'
}
deleteOption: 'Detach'
}
type: 'Microsoft.Network/publicIPAddresses'
sku: {
name: 'Basic'
tier: 'Regional'
}
}
subnet: {
id: virtualNetworks_ToyTruck_vnet_name_default.id
}
primary: true
privateIPAddressVersion: 'IPv4'
}
}
]
dnsSettings: {
dnsServers: []
}
enableAcceleratedNetworking: true
enableIPForwarding: false
disableTcpStateTracking: false
networkSecurityGroup: {
id: networkSecurityGroups_ToyTruckServer_nsg_name_resource.id
}
nicType: 'Standard'
}
}
Hinweis
Einige Dinge können sich in Ihrer Vorlage unterscheiden, darunter einige symbolische Namen, API-Versionen und die IP-Adressen. Das ist in Ordnung. Sie lösen einige dieser Diskrepanzen später im Modul auf.
Sie haben eine erste Bicep-Datei erstellt, die Ihre Ressourcen darstellt. Die Bicep-Datei ist nicht gut strukturiert und entspricht nicht bewährten Methoden. In der nächsten Lerneinheit erfahren Sie, wie Sie die Qualität der migrierten Vorlage verbessern.
Tipp
Wenn Sie ein Versionskontrollsystem wie Git verwenden, wäre dies ein guter Zeitpunkt, um Ihre Arbeit zu committen.
Nachdem Sie die Datei main.bicep überprüft haben, schließen Sie die Datei template.bicep.