Gyakorlat – A Bicep-fájl újrabontása
Az előző gyakorlatban létrehozott egy kezdeti Bicep-fájlt, amely tartalmazza a toy truck virtuális gépet és a kapcsolódó erőforrásokat. A Bicep-sablon azonban nem követi az ajánlott eljárásokat, és egy kicsit nehéz elolvasni. Ebben a leckében újra kell majd átfésülni a fájlt.
Az újrabontási folyamat során a következőt fogja elvégezni:
- Frissítse az erőforrások és paraméterek szimbolikus nevét.
- Távolítsa el a redundáns paramétereket, erőforrásokat és tulajdonságokat.
- Adjon hozzá változókat és paramétereket a Bicep-fájl újrafelhasználhatóvá tétele érdekében.
Az erőforrás szimbolikus nevének frissítése
Nyissa meg a main.bicep fájlt a Visual Studio Code-ban.
Válassza ki a hálózati biztonsági csoport erőforrásának szimbolikus nevét, amely
networkSecurityGroups_ToyTruckServer_nsg_name_resource
vagy hasonló név.Nevezze át a szimbolikus nevet. Válassza az F2 lehetőséget, vagy kattintson a jobb gombbal, majd válassza a Szimbólum átnevezése lehetőséget.
Írja be a nevet
networkSecurityGroup
, és nyomja le az Enter billentyűt. A Visual Studio Code frissíti a fájl nevét és hivatkozásait.Ismételje meg ezt a folyamatot minden erőforrás esetében. Nevezze át az erőforrásokat az alábbi táblázatban látható módon.
Feljegyzés
Az üzemelő példány erőforrásainak neve kissé eltér a táblázatban szereplő nevektől. Keresse meg azokat az erőforrásokat, amelyek nevei közel állnak ezekhez a nevekhez.
Erőforrás típusa Aktuális szimbolikus név Új szimbolikus név Nyilvános IP-cím publicIPAddresses_ToyTruckServer_ip_name_resource
publicIPAddress
Virtuális gép virtualMachines_ToyTruckServer_name_resource
virtualMachine
Virtuális hálózat virtualNetworks_ToyTruck_vnet_name_resource
virtualNetwork
Alhálózat virtualNetworks_ToyTruck_vnet_name_default
defaultSubnet
Hálózati adapter networkInterfaces_toytruckserver890_name_resource
networkInterface
A redundáns alhálózati erőforrás eltávolítása
A virtuális hálózat alhálózata jelenleg kétszer van definiálva. Egyszer az erőforrásban virtualNetwork
, majd a saját gyermekerőforrásaként van definiálva defaultSubnet
. Nincs értelme kétszer meghatározni az alhálózatot.
Törölje az erőforrást
defaultSubnet
.Figyelje meg, hogy az
networkInterface
erőforrás problémát jelenít meg, mert az az alapértelmezett alhálózat erőforrás-azonosítójára hivatkozik:Frissítse az erőforrást
virtualNetwork
, hogy hivatkozzonexisting
az alhálózatra. Ha hozzáadja aexisting
hivatkozást, újra hivatkozhat az alhálózatra a Bicep-kódban anélkül, hogy újra meghatározta volna:resource virtualNetwork 'Microsoft.Network/virtualNetworks@2020-11-01' = { name: virtualNetworks_ToyTruck_vnet_name location: 'westus' properties: { addressSpace: { addressPrefixes: [ '10.0.0.0/16' ] } subnets: [ { name: 'default' properties: { addressPrefix: '10.0.0.0/24' delegations: [] privateEndpointNetworkPolicies: 'Enabled' privateLinkServiceNetworkPolicies: 'Enabled' } } ] virtualNetworkPeerings: [] enableDdosProtection: false } resource defaultSubnet 'subnets' existing = { name: 'default' } }
Frissítse az erőforrást
networkInterface
az alhálózat erőforrás-azonosítójára való hivatkozáshoz:resource networkInterface 'Microsoft.Network/networkInterfaces@2022-05-01' = { name: networkInterfaces_toytruckserver890_name location: 'westus3' properties: { ipConfigurations: [ { name: 'ipconfig1' properties: { privateIPAddress: '10.0.0.4' privateIPAllocationMethod: 'Dynamic' publicIPAddress: { id: publicIPAddress.id } subnet: { id: virtualNetwork::defaultSubnet.id } primary: true privateIPAddressVersion: 'IPv4' } } ] dnsSettings: { dnsServers: [] } enableAcceleratedNetworking: true enableIPForwarding: false disableTcpStateTracking: false networkSecurityGroup: { id: networkSecurityGroup.id } nicType: 'Standard' } }
Hibaüzenet jelenik meg arról, hogy a kifejezés egy ciklusban szerepel. Ezt a következő lépésben fogja kijavítani.
Lépjen az
virtualNetwork
erőforrás tulajdonságárasubnets
, és távolítsa elid: defaultSubnet.id
a hibát.
Paraméterek módosítása változókra
A sablon paramétereinek nem kell paramétereknek lenniük. Most átnevezi a paramétereket értelmesebb nevekre, és változókká konvertálja őket.
Válassza ki a paraméter szimbolikus nevét
virtualNetworks_ToyTruck_vnet_name
. Nevezze át a névrevirtualNetworkName
.Módosítsa a paramétert változóra. Ne felejtse el eltávolítani a típust, mert a változódefiníciók nem tartalmaznak típusokat:
var virtualNetworkName = 'ToyTruck-vnet'
Ismételje meg a folyamatot az egyes paramétereknél. Nevezze át a paramétereket az alábbi táblázatban látható módon.
Figyelje meg, hogy az érték
networkInterfaceName
háromjegyű számot tartalmaz. A szám eltérő a különböző üzemelő példányok esetében. Győződjön meg arról, hogy átmásolja a változó értékét a referenciasablonból.Aktuális paraméternév Új változó neve virtualMachines_ToyTruckServer_name
virtualMachineName
networkInterfaces_toytruckserver890_name
networkInterfaceName
publicIPAddresses_ToyTruckServer_ip_name
publicIPAddressName
networkSecurityGroups_ToyTruckServer_nsg_name
networkSecurityGroupName
Ellenőrizze, hogy a változódeklarációk a következő példához hasonlóan néznek-e ki:
var virtualNetworkName = 'ToyTruck-vnet' var virtualMachineName = 'ToyTruckServer' var networkInterfaceName = 'YOUR-NETWORK-INTERFACE-NAME' var publicIPAddressName = 'ToyTruckServer-ip' var networkSecurityGroupName = 'ToyTruckServer-nsg'
Az erőforrás helyének frissítése
Az összes erőforrás jelenleg egy kódolt helyet használ. Most hozzáad egy paramétert, hogy a sablon újrafelhasználhatóbbá váljon.
A fájl tetején adjon hozzá egy új paramétert és egy leírás-dekorátort a paraméter céljának tisztázásához:
@description('The location where resources are deployed.') param location string = resourceGroup().location
Frissítse az egyes erőforrásokat úgy, hogy a
location
paramétert használjákwestus3
a rögzített hely helyett.
Paramétereket és változók hozzáadása
A sablon tartalmaz néhány olyan rögzített értéket, ahol a paraméterek vagy változók megfelelőbbek lennének. Most olyan paramétereket fog hozzáadni a tulajdonságokhoz, amelyek változhatnak az üzemelő példányok és a nem kívánt értékek változói között.
A main.bicep fájl tetején, a
location
paraméter alatt adja hozzá a következő paramétereket:@description('The name of the size of the virtual machine to deploy.') param virtualMachineSizeName string = 'Standard_D2s_v3' @description('The name of the storage account SKU to use for the virtual machine\'s managed disk.') param virtualMachineManagedDiskStorageAccountType string = 'Premium_LRS' @description('The administrator username for the virtual machine.') param virtualMachineAdminUsername string = 'toytruckadmin' @description('The administrator password for the virtual machine.') @secure() param virtualMachineAdminPassword string @description('The name of the SKU of the public IP address to deploy.') param publicIPAddressSkuName string = 'Standard' @description('The virtual network address range.') param virtualNetworkAddressPrefix string @description('The default subnet address range within the virtual network') param virtualNetworkDefaultSubnetAddressPrefix string
Egyes paraméterek alapértelmezett értékekkel rendelkeznek, míg mások nem. Később létrehoz egy paraméterfájlt a legtöbb érték beállításához.
Adja hozzá a következő új változódeklarációkat a
networkSecurityGroupName
változó alá:var virtualNetworkDefaultSubnetName = 'default' var virtualMachineImageReference = { publisher: 'canonical' offer: '0001-com-ubuntu-server-focal' sku: '20_04-lts-gen2' version: 'latest' }
Adja hozzá a következő változódeklarációt. Cserélje le az értéket az operációsrendszer-lemez nevére a saját referenciasablonból.
var virtualMachineOSDiskName = 'YOUR-OS-DISK-NAME'
Az érték
virtualMachineOSDiskName
egyedi. Az érték az egyes üzemelő példányok esetében eltérő. Győződjön meg arról, hogy átmásolja a változó értékét a referenciasablonból.Figyelmeztetés
Győződjön meg arról, hogy a megfelelő értékeket másolja a
virtualMachineOSDiskName
változókhoz.networkInterfaceName
Ellenkező esetben az Azure nem észleli, hogy meglévő erőforrásokat deklarál, és megpróbál új erőforrásokat létrehozni.A változódeklarációknak most az alábbi példához hasonlóan kell kinéznie:
var virtualNetworkName = 'ToyTruck-vnet' var virtualMachineName = 'ToyTruckServer' var networkInterfaceName = 'YOUR-NETWORK-INTERFACE-NAME' var publicIPAddressName = 'ToyTruckServer-ip' var networkSecurityGroupName = 'ToyTruckServer-nsg' var virtualNetworkDefaultSubnetName = 'default' var virtualMachineImageReference = { publisher: 'canonical' offer: '0001-com-ubuntu-server-focal' sku: '20_04-lts-gen2' version: 'latest' } var virtualMachineOSDiskName = 'YOUR-OS-DISK-NAME'
Frissítse az erőforrást
publicIPAddress
egy paraméterre való hivatkozáshoz:Tulajdonság Paraméter sku.name
publicIPAddressSkuName
Frissítse az erőforrást
virtualMachine
a paraméterekre és változókra való hivatkozáshoz:Tulajdonság Paraméter vagy változó hardwareProfile.vmSize
virtualMachineSizeName
storageProfile.imageReference
virtualMachineImageReference
A változó nevével cserélje le az objektum értékeit, beleértve a kapcsos zárójeleket is.storageProfile.osDisk.name
virtualMachineOSDiskName
storageProfile.osDisk.managedDisk.storageAccountType
virtualMachineManagedDiskStorageAccountType
osProfile.adminUsername
virtualMachineAdminUsername
osProfile.adminPassword
Adja hozzá ezt a tulajdonságot alábbosProfile.adminUsername
virtualMachineAdminPassword
Frissítse az erőforrást
virtualNetwork
a paraméterekre és változókra való hivatkozáshoz:Tulajdonság Paraméter vagy változó addressSpace.addressPrefixes
virtualNetworkAddressPrefix
subnets.name
virtualNetworkDefaultSubnetName
subnets.addressPrefix
virtualNetworkDefaultSubnetAddressPrefix
virtualNetwork
Az erőforrás beágyazott erőforrásánakdefaultSubnet
frissítése:Tulajdonság Változó name
virtualNetworkDefaultSubnetName
Szükségtelen tulajdonságok eltávolítása
Az exportálási folyamat redundáns tulajdonságokat ad hozzá számos erőforráshoz. Az alábbi lépésekkel eltávolíthatja a szükségtelen tulajdonságokat.
Távolítsa el
properties
aznetworkSecurityGroup
erőforrást, mert asecurityRules
tulajdonság üres.Az erőforrásban
publicIPAddress
távolítsa el a következő tulajdonságokat:ipAddress
tulajdonságot, mert az Azure automatikusan be van állítvaipTags
tulajdonság, mert üres
Az erőforrásban
virtualMachine
távolítsa el a következő tulajdonságokat:storageProfile.osDisk.managedDisk.id
tulajdonságot, mert az Azure automatikusan meghatározza ezt a tulajdonságot a virtuális gép üzembe helyezésekorFontos
Ha nem távolítja el ezt a tulajdonságot, a sablon nem fog megfelelően üzembe helyezni.
storageProfile.dataDisks
tulajdonság, mert üresosProfile.secrets
tulajdonság, mert üresosProfile.requireGuestProvisionSignal
tulajdonságot, mert az Azure automatikusan beállítja ezt a tulajdonságot
Az erőforrásban
virtualNetwork
távolítsa el a következő tulajdonságokat:delegations
ésvirtualNetworkPeerings
tulajdonságokat, mert üresek.- A következő sor:
type: 'Microsoft.Network/virtualNetworks/subnets'
Az erőforrásban
networkInterface
távolítsa el a következő tulajdonságokat:A
kind
tulajdonságFeladó
ipConfigurations
:id
,etag
,type
, ésprivateIPAddress
mivel az Azure automatikusan be van állítva, és a foglalási módszer dinamikusFeladó
ipConfigurations.properties
:provisioningState
Feladó
publicIPAddress
,name
,properties
,type
éssku
dnsSettings
mert adnsServers
tulajdonság üres
Tipp.
Ha saját sablonokkal dolgozik, meg kell határoznia, hogy vannak-e olyan tulajdonságok, amelyeket el kell távolítani, mint itt.
A Visual Studio Code-ban a Bicep-bővítmény segít az erőforrás minimális tulajdonságainak beállításában. Ha az erőforrásdefiníció egyenlőségjele után szóközt ad hozzá, a Visual Studio Code kéri a szükséges tulajdonságok kiválasztását:
A kötelező tulajdonságok kiválasztásakor a Visual Studio Code kitölti az erőforrásdefiníciót a kötelező tulajdonságokkal. A szükséges tulajdonságokra hivatkozva megállapíthatja, hogy a konvertált sablonban lévő tulajdonságoknak mindegyiknek jelen kell-e lenniük.
Az Azure Rövid útmutatósablonok adattára ebben a feladatban is hasznos. Keressen egy gyorsútmutató-sablont, amely nagyjából azt teszi, amit szeretne, és tekintse meg az erőforráson megadott tulajdonságokat.
Paraméterfájl létrehozása
A paraméterek jelenleg alapértelmezett értékekként vannak definiálva a sablonban. Ahhoz, hogy a sablon jól működjön a különböző környezetekben, érdemes létrehozni egy paraméterfájlt, és eltávolítani az egyes környezetekben módosítani kívánt paraméterek alapértelmezett értékeit.
Hozzon létre egy main.parameters.production.json nevű új fájlt.
Illessze be a következő JSON-t a main.parameters.production.json fájlba:
{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#", "contentVersion": "1.0.0.0", "parameters": { "virtualMachineSizeName": { "value": "Standard_D2s_v3" }, "virtualMachineManagedDiskStorageAccountType": { "value": "Premium_LRS" }, "virtualMachineAdminUsername": { "value": "toytruckadmin" }, "virtualNetworkAddressPrefix": { "value": "YOUR-VIRTUAL-NETWORK-ADDRESS-PREFIX" }, "virtualNetworkDefaultSubnetAddressPrefix": { "value": "YOUR-SUBNET-ADDRESS-PREFIX" } } }
Frissítse a
virtualNetworkAddressPrefix
referenciasablon virtuális hálózati erőforrásában megadott IP-címtartományoknak megfelelő értékeket ésvirtualNetworkDefaultSubnetAddressPrefix
paramétereket.Például az alábbi módon adhatja meg az értékeket egy referenciasablonban. Az IP-címek eltérhetnek a példában használt IP-címektől.
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 } }
Frissítse a main.bicep fájlt a paraméterfájlban megadott paraméterek alapértelmezett értékeinek eltávolításához.
virtualMachineSizeName
virtualMachineManagedDiskStorageAccountType
virtualMachineAdminUsername
Ne módosítsa az alapértelmezett értékeket és location
publicIPAddressSkuName
paramétereket, mert ezek az értékek valószínűleg megegyeznek az összes környezetében.
A sablon ellenőrzése
Az újrabontási fázis végén a main.bicep fájlnak az alábbi példához hasonlóan kell kinéznie:
@description('The location where resources are deployed.') param location string = resourceGroup().location @description('The name of the size of the virtual machine to deploy.') param virtualMachineSizeName string @description('The name of the storage account SKU to use for the virtual machine\'s managed disk.') param virtualMachineManagedDiskStorageAccountType string @description('The administrator username for the virtual machine.') param virtualMachineAdminUsername string @description('The administrator password for the virtual machine.') @secure() param virtualMachineAdminPassword string @description('The name of the SKU of the public IP address to deploy.') param publicIPAddressSkuName string = 'Standard' @description('The virtual network address range.') param virtualNetworkAddressPrefix string @description('The default subnet address range within the virtual network') param virtualNetworkDefaultSubnetAddressPrefix string var virtualNetworkName = 'ToyTruck-vnet' var virtualMachineName = 'ToyTruckServer' var networkInterfaceName = 'YOUR-NETWORK-INTERFACE-NAME' var publicIPAddressName = 'ToyTruckServer-ip' var networkSecurityGroupName = 'ToyTruckServer-nsg' var virtualNetworkDefaultSubnetName = 'default' var virtualMachineImageReference = { publisher: 'canonical' offer: '0001-com-ubuntu-server-focal' sku: '20_04-lts-gen2' version: 'latest' } var virtualMachineOSDiskName = 'YOUR-OS-DISK-NAME' resource networkSecurityGroup 'Microsoft.Network/networkSecurityGroups@2022-05-01' = { name: networkSecurityGroupName location: location } resource publicIPAddress 'Microsoft.Network/publicIPAddresses@2022-05-01' = { name: publicIPAddressName location: location sku: { name: publicIPAddressSkuName tier: 'Regional' } properties: { publicIPAddressVersion: 'IPv4' publicIPAllocationMethod: 'Static' idleTimeoutInMinutes: 4 } } resource virtualMachine 'Microsoft.Compute/virtualMachines@2022-08-01' = { name: virtualMachineName location: location properties: { hardwareProfile: { vmSize: virtualMachineSizeName } storageProfile: { imageReference: virtualMachineImageReference osDisk: { osType: 'Linux' name: virtualMachineOSDiskName createOption: 'FromImage' caching: 'ReadWrite' managedDisk: { storageAccountType: virtualMachineManagedDiskStorageAccountType } deleteOption: 'Delete' diskSizeGB: 30 } } osProfile: { computerName: virtualMachineName adminUsername: virtualMachineAdminUsername adminPassword: virtualMachineAdminPassword linuxConfiguration: { disablePasswordAuthentication: false provisionVMAgent: true patchSettings: { patchMode: 'ImageDefault' assessmentMode: 'ImageDefault' } enableVMAgentPlatformUpdates: false } allowExtensionOperations: true } networkProfile: { networkInterfaces: [ { id: networkInterface.id properties: { deleteOption: 'Detach' } } ] } diagnosticsProfile: { bootDiagnostics: { enabled: true } } } } resource virtualNetwork 'Microsoft.Network/virtualNetworks@2022-05-01' = { name: virtualNetworkName location: location properties: { addressSpace: { addressPrefixes: [ virtualNetworkAddressPrefix ] } subnets: [ { name: virtualNetworkDefaultSubnetName properties: { addressPrefix: virtualNetworkDefaultSubnetAddressPrefix privateEndpointNetworkPolicies: 'Disabled' privateLinkServiceNetworkPolicies: 'Enabled' } } ] enableDdosProtection: false } resource defaultSubnet 'subnets' existing = { name: virtualNetworkDefaultSubnetName } } resource networkInterface 'Microsoft.Network/networkInterfaces@2022-05-01' = { name: networkInterfaceName location: location properties: { ipConfigurations: [ { name: 'ipconfig1' properties: { privateIPAllocationMethod: 'Dynamic' publicIPAddress: { id: publicIPAddress.id } subnet: { id: virtualNetwork::defaultSubnet.id } primary: true privateIPAddressVersion: 'IPv4' } } ] enableAcceleratedNetworking: true enableIPForwarding: false disableTcpStateTracking: false networkSecurityGroup: { id: networkSecurityGroup.id } nicType: 'Standard' } }
A main.parameters.production.json fájlnak az alábbi fájlhoz hasonlóan kell kinéznie, bár előfordulhat, hogy különböző IP-címtartományok szerepelnek a listában:
{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#", "contentVersion": "1.0.0.0", "parameters": { "virtualMachineSizeName": { "value": "Standard_D2s_v3" }, "virtualMachineManagedDiskStorageAccountType": { "value": "Premium_LRS" }, "virtualMachineAdminUsername": { "value": "toytruckadmin" }, "virtualNetworkAddressPrefix": { "value": "10.0.0.0/16" }, "virtualNetworkDefaultSubnetAddressPrefix": { "value": "10.0.0.0/24" } } }
Válassza a Problémák megtekintése lehetőséget>a problémák panel megjelenítéséhez.
Nincs probléma jelezve.
Tipp.
Ha saját sablonokkal dolgozik, különböző döntéseket hozhat a paraméterezendő tulajdonságokról és más testreszabásokról. Ebben a modulban általános útmutatást nyújtunk az első lépésekhez, de figyelembe kell vennie a saját környezetét és azt, hogy miként szeretné újra felhasználni a sablonokat, amikor eldönti, hogyan kell újrabontást végeznie a Bicep-fájlokon.