Oefening: resources converteren en migreren
Belangrijk
U hebt uw eigen Azure-abonnement nodig om deze oefening te kunnen uitvoeren. Dit kan kosten met zich meebrengen. Als u nog geen Azure-abonnement hebt, maakt u een gratis account voordat u begint.
Uw speelgoedbedrijf heeft een concurrent overgenomen die een populaire speelgoedwagen heeft gemaakt. Het speelgoed maakt verbinding met een virtuele machine die wordt gehost in Azure om firmware-updates te ontvangen. Alle resources voor de virtuele machine zijn handmatig gemaakt met behulp van Azure Portal. In deze les begint u met het migreren van de resources naar een Bicep-bestand.
Tijdens het proces voert u de volgende taken uit:
- Implementeer een nieuwe virtuele machine met behulp van Azure Portal.
- Exporteer de resources van de virtuele machine naar een JSON-sjabloon.
- Decompileren van de JSON-sjabloon naar Bicep.
- Maak een nieuw Bicep-bestand en verplaats de resources van de gedecompileerde sjabloon.
In deze oefening wordt de Bicep-extensie voor Visual Studio Code gebruikt. Zorg ervoor dat u deze extensie installeert in Visual Studio Code.
Een virtuele machine maken met behulp van Azure Portal
Als u de situatie in het voorbeeldscenario wilt simuleren, implementeert u eerst een virtuele machine met behulp van Azure Portal.
Meld u aan bij het Azure-portaal.
Selecteer op de startpagina van Azure onder Azure-services de optie Een resource maken:
Azure Marketplace wordt weergegeven in het deelvenster Een resource maken.
Selecteer Onder Ubuntu Server 20.04 LTS de optie Maken:
Belangrijk
Als u Ubuntu Server 20.04 LTS niet ziet, gaat u rechtstreeks naar Ubuntu Server 20.04 LTS in Azure Marketplace.
Voer op het tabblad Basisinformatie de volgende waarden in voor elke instelling. Gebruik de standaardinstellingen voor alle andere instellingen.
Instelling Weergegeven als Projectdetails Resourcegroep Selecteer Nieuwe maken en voer ToyTruck in Exemplaardetails Virtual machine name ToyTruckServer Regio (VS) VS - west 3 Beschikbaarheidsopties Er is geen redundantie van de infrastructuur vereist Afbeelding Ubuntu Server 20.04 LTS - x64 Gen2 Tekengrootte Standard_D2s_v3 Beheerdersaccount Authentication type Wachtwoord Username toytruckadmin Wachtwoord Voer een wachtwoord in Regels voor binnenkomende poort Openbare poorten voor inkomend verkeer Geen Controleer op het tabblad Beheer of Automatisch afsluiten inschakelen niet is geselecteerd.
Selecteer Controleren + maken. Azure valideert uw instellingen. Mogelijk moet u meer informatie invoeren of selecteren, afhankelijk van de vereisten voor de installatiekopieën.
Selecteer Maken om de virtuele machine te implementeren en te maken.
In Azure Portal wordt de implementatie weergegeven terwijl deze wordt uitgevoerd.
Wanneer de implementatie is voltooid, selecteert u de naam van de resourcegroep om de resourcegroep te openen:
De resourcegroep bevat nu de virtuele machine en de bijbehorende afhankelijkheden:
De inhoud van de resourcegroep exporteren naar een JSON-sjabloon
Selecteer in het linkermenu onder Automation de optie Sjabloon Exporteren:
Er wordt een JSON-sjabloon gegenereerd. Het kan een paar minuten duren voordat het proces is voltooid.
Selecteer de knop Downloaden :
De JSON-sjabloon en het parameterbestand worden als een .zip-bestand naar uw computer gedownload.
Pak het bestand uit in een map waartoe u eenvoudig toegang hebt, zoals uw bureaublad.
Open Visual Studio Code.
Uw lokale omgeving voorbereiden
Selecteer Nieuwe terminal in het menu Terminal. Het terminalvenster wordt meestal geopend in de onderste helft van het scherm.
Als in het terminalvenster bash aan de rechterkant wordt weergegeven, betekent dit dat de juiste shell al is geopend. Als u ook een bash-shellpictogram aan de rechterkant ziet, kunt u deze selecteren om de shell te starten.
Als een andere shell dan bash wordt weergegeven, selecteert u de vervolgkeuzepijl van de shell en selecteert u Vervolgens Git Bash.
Ga in de terminal naar de map waarin u de sjabloon hebt opgeslagen. Als u de sjabloon bijvoorbeeld hebt opgeslagen in de map sjablonen , kunt u deze opdracht gebruiken:
cd templates
Bicep installeren
Voer de volgende opdracht uit om te controleren of u de nieuwste versie van Bicep hebt:
az bicep install && az bicep upgrade
Selecteer Nieuwe terminal in het menu Terminal. Het terminalvenster wordt meestal geopend in de onderste helft van het scherm.
Als in het terminalvenster pwsh of powershell aan de rechterkant wordt weergegeven, betekent dit dat de juiste shell al is geopend. Als u aan de rechterkant een PowerShell-shellpictogram ziet, kunt u deze optie selecteren om de shell te starten.
Als een andere shell dan pwsh of powershell wordt weergegeven, selecteert u de vervolgkeuzepijl van de shell en selecteert u Vervolgens PowerShell.
Ga in de terminal naar de map waarin u de sjabloon hebt opgeslagen. Als u uw sjabloon bijvoorbeeld hebt opgeslagen in de map sjablonen , kunt u deze opdracht gebruiken:
Set-Location -Path templates
Bicep CLI installeren
Als u Bicep wilt gebruiken vanuit Azure PowerShell, installeert u de Bicep CLI.
De JSON-sjabloon decompileren naar Bicep
Gebruik de decompile
opdracht om een Bicep-bestand te maken op basis van de sjabloon:
az bicep decompile --file template.json
De decompile-bewerking genereert een waarschuwing die vergelijkbaar is met deze:
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.
Gebruik de decompile
opdracht om een Bicep-bestand te maken op basis van de sjabloon:
bicep decompile template.json
De decompile-bewerking genereert een waarschuwing die vergelijkbaar is met deze:
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.
Het ontcompileerde Bicep-bestand inspecteren
Open het bestand template.bicep in Visual Studio Code en lees het door. U ziet dat het een geldig Bicep-bestand is, maar er zijn enkele problemen, waaronder:
- De symbolische namen die aan parameters en resources worden gegeven, bevatten onderstrepingstekens en zijn niet gemakkelijk te begrijpen.
- De
location
eigenschap is vastgelegd in alle resourcedefinities. - De sjabloon bevat vastgelegde waarden die parameters moeten zijn of automatisch moeten worden ingesteld door Azure.
U lost deze problemen in de rest van deze module op.
Een nieuw Bicep-bestand maken
Maak in Visual Studio Code een nieuw bestand met de naam main.bicep.
Sla het lege bestand op zodat Visual Studio Code de Bicep-hulpprogramma's laadt.
U kunt Bestand> selecteren of Ctrl+S selecteren in Windows (⌘+S in macOS).
Splits de editor zodat u beide bestanden tegelijk kunt zien (het bestand template.bicep in het linkerdeelvenster en het bestand main.bicep in het rechterdeelvenster).
- Selecteer het tabblad main.bicep .
- Selecteer Indeling>splitsen rechts om het tabblad main.bicep in het rechterdeelvenster te openen.
- Sluit het tabblad main.bicep in het linkerdeelvenster.
Kopieer elk element naar uw nieuwe Bicep-bestand
Kopieer de resource met de naam
networkSecurityGroups_ToyTruckServer_nsg_name_resource
van het bestand template.bicep naar het bestand main.bicep .Wanneer u deze kopieert, moet u er rekening mee houden dat de
securityRules
eigenschap leeg is. Verderop in deze module herstructureer u het bestand om redundante eigenschappen te verwijderen.Visual Studio Code geeft een fout aan omdat de
networkSecurityGroups_ToyTruckServer_nsg_name
parameter ontbreekt:Kopieer de parameter naar het bestand main.bicep .
Herhaal het proces met de volgende resources en de bijbehorende parameters:
publicIPAddresses_ToyTruckServer_ip_name_resource
virtualMachines_ToyTruckServer_name_resource
virtualNetworks_ToyTruck_vnet_name_resource
virtualNetworks_ToyTruck_vnet_name_default
networkInterfaces_toytruckserver890_name_resource
Notitie
De namen van de resources in uw implementatie kunnen afwijken van de resources die hier worden vermeld. Zoek de resources met namen die zich dicht bij deze namen bevinden.
Wanneer u elke resource kopieert, inspecteert u de eigenschappen ervan. Verderop in deze module werkt u de eigenschappen en configuratie van elke resource bij om te voldoen aan de best practices van Bicep.
Tip
Wanneer u uw eigen sjablonen converteert of exporteert, kunt u de resources bijwerken om de aanbevolen procedures te volgen terwijl u ze kopieert. In deze module werken we de resources afzonderlijk bij om het gemakkelijker te maken om elke fase van het migratieproces te begrijpen.
Controleren op ontbrekende resources
Open in Azure Portal de ToyTruck-resourcegroep .
Bekijk de lijst met resources en vergelijk deze met de lijst met resources in uw Bicep-bestand. U ziet dat de resourcegroep een schijfresource bevat die niet is gedefinieerd als een
resource
in uw Bicep-bestand:Wanneer u met virtuele machines in Bicep werkt, hoeft u de beheerde schijfresource niet expliciet te definiëren. In plaats daarvan definieert u de eigenschappen van de virtuele machine en maakt Azure automatisch de beheerde schijf voor u. In dit voorbeeld hoeft u zich geen zorgen te maken dat de schijfresource niet is gedefinieerd in het Bicep-bestand.
Uw sjabloon controleren
Aan het einde van de migratiefase moet het bestand main.bicep er ongeveer als volgt uitzien:
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@2024-05-01' = {
name: networkSecurityGroups_ToyTruckServer_nsg_name
location: 'westus3'
properties: {
securityRules: []
}
}
resource publicIPAddresses_ToyTruckServer_ip_name_resource 'Microsoft.Network/publicIPAddresses@2024-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@2024-07-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@2024-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@2024-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@2024-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'
}
}
Notitie
Een paar dingen kunnen verschillen in uw sjabloon, waaronder enkele symbolische namen, API-versies en de IP-adressen. Dat is niet erg. Later in de module lost u enkele van deze verschillen op.
U hebt een eerste Bicep-bestand gemaakt om uw resources weer te geven. Het Bicep-bestand is niet goed gestructureerd en volgt geen aanbevolen procedures. In de volgende les leert u hoe u de kwaliteit van de gemigreerde sjabloon kunt verbeteren.
Tip
Als u een versiebeheersysteem zoals Git gebruikt, is dit een goed moment om uw werk door te voeren.
Nadat u het bestand main.bicep hebt gecontroleerd, sluit u het bestand template.bicep .