Cvičení – převod a migrace prostředků
Důležité
K provedení tohoto cvičení potřebujete vlastní předplatné Azure a mohou se vám účtovat poplatky. Pokud ještě nemáte předplatné Azure, vytvořte si bezplatný účet, než začnete.
Vaše toy společnost získala konkurenta, který vytvořil populární toy truck. Hračky se připojují k virtuálnímu počítači hostovaným v Azure, aby dostávaly aktualizace firmwaru. Všechny prostředky pro virtuální počítač byly vytvořeny ručně pomocí webu Azure Portal. V této lekci zahájíte proces migrace prostředků do souboru Bicep.
Během tohoto procesu provedete následující úlohy:
- Nasaďte nový virtuální počítač pomocí webu Azure Portal.
- Exportujte prostředky virtuálního počítače do šablony JSON.
- Dekompilujte šablonu JSON do Bicep.
- Vytvořte nový soubor Bicep a přesuňte prostředky z dekompilované šablony.
V tomto cvičení se používá rozšíření Bicep pro Visual Studio Code. Nezapomeňte toto rozšíření do Visual Studio Codu nainstalovat.
Vytvoření virtuálního počítače pomocí webu Azure Portal
K simulaci situace v ukázkovém scénáři nejprve nasadíte virtuální počítač pomocí webu Azure Portal.
Přihlaste se k portálu Azure.
Na domovské stránce Azure v části Služby Azure vyberte Vytvořit prostředek:
Azure Marketplace se zobrazí v podokně Vytvořit prostředek .
V části Ubuntu Server 20.04 LTS vyberte Vytvořit:
Důležité
Pokud ubuntu Server 20.04 LTS nevidíte, přejděte přímo na Ubuntu Server 20.04 LTS na Azure Marketplace.
Na kartě Základy zadejte pro každé nastavení následující hodnoty. Pro všechna ostatní nastavení použijte výchozí hodnoty.
Nastavení Hodnota Podrobnosti projektu Skupina prostředků Vyberte Vytvořit nový a zadejte ToyTruck. Podrobnosti o instanci Virtual machine name ToyTruckServer Oblast (USA) USA – západ 3 Možnosti dostupnosti Není potřeba žádná redundance infrastruktury. Image Ubuntu Server 20.04 LTS – x64 Gen2 Velikost Standard_D2s_v3 Účet správce Authentication type Heslo Username toytruckadmin Heslo Zadejte heslo. Pravidla portů pro příchozí spojení Veřejné příchozí porty Nic Na kartě Správa se ujistěte, že není zaškrtnuté políčko Povolit automatické vypnutí.
Vyberte Zkontrolovat a vytvořit. Azure ověří vaše nastavení. V závislosti na požadavcích na image možná budete muset zadat nebo vybrat další informace.
Vyberte Vytvořit , abyste nasadíte a vytvořili virtuální počítač.
Na webu Azure Portal se během probíhajícího nasazení zobrazuje.
Po dokončení nasazení otevřete skupinu prostředků výběrem názvu skupiny prostředků:
Skupina prostředků teď obsahuje virtuální počítač a jeho závislosti:
Export obsahu skupiny prostředků do šablony JSON
V nabídce vlevo v části Automatizace vyberte Exportovat šablonu:
Vygeneruje se šablona JSON. Dokončení procesu může trvat minutu nebo dvě.
Vyberte tlačítko Stáhnout:
Šablona JSON a soubor parametrů se stáhnou do počítače jako soubor .zip .
Rozbalte soubor do složky, ke které máte snadný přístup, jako je plocha.
Otevřete Visual Studio Code.
Příprava místního prostředí
V nabídce Terminal (Terminál) vyberte New Terminal (Nový terminál). Okno terminálu se obvykle otevře v dolní polovině obrazovky.
Pokud se v okně terminálu zobrazí bash na pravé straně, znamená to, že správné prostředí je už otevřené. Pokud se na pravé straně zobrazí ikona prostředí Bash, můžete ho vybrat a spustit prostředí.
Pokud se zobrazí jiné prostředí než Bash, vyberte šipku rozevíracího seznamu prostředí a pak vyberte Git Bash.
V terminálu přejděte do adresáře, do kterého jste šablonu uložili. Pokud jste například šablonu uložili do složky templates , můžete použít tento příkaz:
cd templates
Instalace Bicep
Spuštěním následujícího příkazu se ujistěte, že máte nejnovější verzi Bicep:
az bicep install && az bicep upgrade
V nabídce Terminal (Terminál) vyberte New Terminal (Nový terminál). Okno terminálu se obvykle otevře v dolní polovině obrazovky.
Pokud se v okně terminálu na pravé straně zobrazí pwsh nebo PowerShell , znamená to, že správné prostředí je už otevřené. Pokud se na pravé straně zobrazí ikona prostředí PowerShell, můžete ho vybrat a spustit prostředí.
Pokud se zobrazí jiné prostředí než pwsh nebo PowerShell, vyberte šipku rozevíracího seznamu prostředí a pak vyberte PowerShell.
V terminálu přejděte do adresáře, do kterého jste šablonu uložili. Pokud jste například šablonu uložili do složky templates , můžete použít tento příkaz:
Set-Location -Path templates
Instalace rozhraní příkazového řádku Bicep
Pokud chcete použít Bicep z Azure PowerShellu, nainstalujte rozhraní příkazového řádku Bicep.
Dekompilujte šablonu JSON do Bicep.
decompile
Pomocí příkazu vytvořte ze šablony soubor Bicep:
az bicep decompile --file template.json
Operace dekompilu generuje upozornění podobné tomuto:
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.
decompile
Pomocí příkazu vytvořte ze šablony soubor Bicep:
bicep decompile template.json
Operace dekompilu generuje upozornění podobné tomuto:
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.
Kontrola dekompilovaného souboru Bicep
Otevřete soubor template.bicep v editoru Visual Studio Code a přečtěte si ho. Všimněte si, že se jedná o platný soubor Bicep, ale má několik problémů, mezi které patří:
- Symbolické názvy, které jsou dány parametrům a prostředkům, obsahují podtržítka a nejsou snadno pochopitelné.
- Vlastnost
location
je pevně zakódovaná ve všech definicích prostředků. - Šablona obsahuje pevně zakódované hodnoty, které by měly být parametry nebo automaticky nastavené v Azure.
Tyto problémy vyřešíte ve zbytku tohoto modulu.
Vytvoření nového souboru Bicep
V editoru Visual Studio Code vytvořte nový soubor s názvem main.bicep.
Uložte prázdný soubor tak, aby Visual Studio Code načítal nástroje Bicep.
Můžete vybrat možnost >Uložit soubor jako nebo vybrat Kombinaci kláves Ctrl+S ve Windows (⌘+S v macOS).
Rozdělte editor tak, abyste viděli oba soubory současně ( soubor template.bicep v levém podokně a soubor main.bicep v pravém podokně).
- Vyberte kartu main.bicep.
- Výběrem možnosti Zobrazit>rozložení editoru>Rozdělit vpravo otevřete kartu main.bicep v pravém podokně.
- Zavřete kartu main.bicep v levém podokně.
Zkopírování každého prvku do nového souboru Bicep
Zkopírujte prostředek pojmenovaný ze souboru template.bicep do
networkSecurityGroups_ToyTruckServer_nsg_name_resource
.Při kopírování si všimněte, že
securityRules
vlastnost je prázdná. Později v tomto modulu refaktorujete soubor tak, aby odebral redundantní vlastnosti.Visual Studio Code označuje chybu, protože
networkSecurityGroups_ToyTruckServer_nsg_name
parametr chybí:Zkopírujte parametr do souboru main.bicep .
Opakujte proces s následujícími prostředky a jejich přidruženými parametry:
publicIPAddresses_ToyTruckServer_ip_name_resource
virtualMachines_ToyTruckServer_name_resource
virtualNetworks_ToyTruck_vnet_name_resource
virtualNetworks_ToyTruck_vnet_name_default
networkInterfaces_toytruckserver890_name_resource
Poznámka:
Názvy prostředků ve vašem nasazení se můžou lišit od zde uvedených prostředků. Vyhledejte prostředky, které mají názvy, které jsou blízko těmto názvům.
Při kopírování jednotlivých prostředků zkontrolujte její vlastnosti. Později v tomto modulu aktualizujete vlastnosti a konfiguraci jednotlivých prostředků tak, aby odpovídaly osvědčeným postupům Bicep.
Tip
Při převodu nebo exportu vlastních šablon můžete aktualizovat prostředky tak, aby při kopírování dodržovaly osvědčené postupy. V tomto modulu aktualizujeme prostředky samostatně, abychom usnadnili pochopení jednotlivých fází procesu migrace.
Kontrola chybějících prostředků
Na webu Azure Portal otevřete skupinu prostředků ToyTruck .
Prohlédněte si seznam prostředků a porovnejte ho se seznamem prostředků v souboru Bicep. Všimněte si, že skupina prostředků obsahuje prostředek disku , který není definovaný jako
resource
v souboru Bicep:Při práci s virtuálními počítači v Bicep nemusíte explicitně definovat prostředek spravovaného disku. Místo toho definujete vlastnosti virtuálního počítače a Azure automaticky vytvoří spravovaný disk. V tomto příkladu se nemusíte zabývat tím, že prostředek disku není definován v souboru Bicep.
Ověření šablony
Na konci fáze migrace by měl soubor main.bicep vypadat podobně jako v tomto příkladu:
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'
}
}
Poznámka:
V šabloně se může lišit několik věcí, včetně některých symbolických názvů, verzí rozhraní API a IP adres. To je v pořádku. Některé z těchto nesrovnalostí vyřešíte později v modulu.
Vytvořili jste počáteční soubor Bicep, který bude představovat vaše prostředky. Soubor Bicep není dobře strukturovaný a nedodržuje osvědčené postupy. V další lekci se dozvíte, jak zlepšit kvalitu migrované šablony.
Tip
Pokud používáte systém správy verzí, jako je Git, je vhodná doba k potvrzení vaší práce.
Po ověření souboru main.bicep zavřete soubor template.bicep .