Gyakorlat – Erőforrások üzembe helyezése több hatókörben modulok használatával
Megjegyzés:
Ehhez a gyakorlathoz Azure-előfizetés szükséges. Ha még nem rendelkezik ilyen előfizetéssel, ingyenes előfizetést kaphat.
Az R&D csapata segítséget kért egy virtuális hálózat létrehozásához a Project Teddybear-előfizetésben. Tudja, hogy a jövőben több előfizetéssel fog segíteni a csapatnak, ezért úgy dönt, hogy kibővíti az újrafelhasználható Bicep-sablont egy virtuális hálózat üzembe helyezéséhez a csapattagok számára.
Ebben a gyakorlatban frissíteni fogja a sablont, amelyet az utolsó gyakorlatban kezdett építeni.
A folyamat során a következőt fogja elvégezni:
- Frissítse az előfizetés-hatókörű sablont egy új erőforráscsoport létrehozásához.
- Hozzon létre egy különálló Bicep-modult egy virtuális hálózattal, és paraméterekkel szabályozza a virtuális hálózat konfigurálását.
- Frissítse a sablont a modul erőforráscsoportban való üzembe helyezéséhez.
- A sablon üzembe helyezése.
Ehhez a gyakorlathoz rendelkeznie kell engedéllyel az előfizetés-hatókörű erőforrások üzembe helyezéséhez. Ha nem tudja teljesíteni ezt a követelményt a jelenlegi Azure-fiókjával, ingyenes próbaverziót kaphat, és létrehozhat egy új Azure-előfizetést és -bérlőt. Másik lehetőségként kihagyhatja a gyakorlat üzembe helyezési lépéseit.
Erőforráscsoport létrehozása
A Visual Studio Code-ban nyissa meg a korábbi gyakorlatban létrehozott main.bicep fájlt.
Az aktuális változódefiníciók alatt adja hozzá a következő változódefiníciót:
var resourceGroupName = 'ToyNetworking'
A fájl alján adja hozzá a következő erőforrásdefiníciót:
resource resourceGroup 'Microsoft.Resources/resourceGroups@2021-01-01' = { name: resourceGroupName location: deployment().location }
Figyelje meg, hogy ugyanúgy definiálja az erőforráscsoportot, mint egy másik erőforrást. Az erőforráscsoport egy előfizetés-hatókörű erőforrás, amely a Bicep-fájlokban üzembe helyezhető és felügyelhető a
targetScope
következő beállítássalsubscription
: .Mentse a fájl módosításait.
Modul hozzáadása virtuális hálózat létrehozásához
Ezután létre fog hozni egy Bicep-modult az R&D-csapat virtuális hálózatához. A gyakorlat későbbi részében üzembe fogja helyezni a modul erőforrásait az erőforráscsoportban.
A Visual Studio Code-ban hozzon létre egy új, modulok nevű mappát ugyanabban a mappában, amelyben létrehozta a main.bicep fájlt.
A modulok mappájában hozzon létre és mentsen egy virtualNetwork.bicep nevű fájlt.
A virtualNetwork.bicep fájlban adja hozzá a következő tartalmat:
param virtualNetworkName string param virtualNetworkAddressPrefix string resource virtualNetwork 'Microsoft.Network/virtualNetworks@2020-11-01' = { name: virtualNetworkName location: resourceGroup().location properties: { addressSpace: { addressPrefixes: [ virtualNetworkAddressPrefix ] } } }
Figyelje meg, hogy ehhez a modulhoz még nem adott meg egy
targetScope
beállítást. Nem kell célhatókört megadnia, ha a Bicep-fájl erőforráscsoportot céloz meg.Mentse a fájl módosításait.
A modul használata az előfizetés üzembe helyezésében
Most már készen áll arra, hogy tájékoztassa a Bicepet, hogy telepítse a modult az erőforráscsoportban.
A Visual Studio Code main.bicep fájljában adja hozzá a
targetScope
következő paraméterdefiníciókat:param virtualNetworkName string param virtualNetworkAddressPrefix string
Ezek a paraméterek újra felhasználhatóvá teszik a sablont. Amikor az R&D-csapatnak új előfizetésre van szüksége, létrehozhat egy egyedi nevet és IP-címtartományt tartalmazó virtuális hálózatot.
A fájl alján adja hozzá a következő moduldefiníciót:
module virtualNetwork 'modules/virtualNetwork.bicep' = { scope: resourceGroup name: 'virtualNetwork' params: { virtualNetworkName: virtualNetworkName virtualNetworkAddressPrefix: virtualNetworkAddressPrefix } }
Figyelje meg, hogy explicit módon adja meg a
scope
modult. A Bicep tisztában van azzal, hogy a modulban lévő erőforrásokat a fájlban korábban létrehozott erőforráscsoportban kell üzembe helyezni.
A sablon ellenőrzése
A main.bicep fájlnak a következőképpen kell kinéznie:
targetScope = 'subscription'
param virtualNetworkName string
param virtualNetworkAddressPrefix string
var policyDefinitionName = 'DenyFandGSeriesVMs'
var policyAssignmentName = 'DenyFandGSeriesVMs'
var resourceGroupName = 'ToyNetworking'
resource policyDefinition 'Microsoft.Authorization/policyDefinitions@2020-03-01' = {
name: policyDefinitionName
properties: {
policyType: 'Custom'
mode: 'All'
parameters: {}
policyRule: {
if: {
allOf: [
{
field: 'type'
equals: 'Microsoft.Compute/virtualMachines'
}
{
anyOf: [
{
field: 'Microsoft.Compute/virtualMachines/sku.name'
like: 'Standard_F*'
}
{
field: 'Microsoft.Compute/virtualMachines/sku.name'
like: 'Standard_G*'
}
]
}
]
}
then: {
effect: 'deny'
}
}
}
}
resource policyAssignment 'Microsoft.Authorization/policyAssignments@2020-03-01' = {
name: policyAssignmentName
properties: {
policyDefinitionId: policyDefinition.id
}
}
resource resourceGroup 'Microsoft.Resources/resourceGroups@2021-01-01' = {
name: resourceGroupName
location: deployment().location
}
module virtualNetwork 'modules/virtualNetwork.bicep' = {
scope: resourceGroup
name: 'virtualNetwork'
params: {
virtualNetworkName: virtualNetworkName
virtualNetworkAddressPrefix: virtualNetworkAddressPrefix
}
}
A modulok/virtualNetwork.bicep fájlnak a következőképpen kell kinéznie:
param virtualNetworkName string
param virtualNetworkAddressPrefix string
resource virtualNetwork 'Microsoft.Network/virtualNetworks@2020-11-01' = {
name: virtualNetworkName
location: resourceGroup().location
properties: {
addressSpace: {
addressPrefixes: [
virtualNetworkAddressPrefix
]
}
}
}
Ha bármelyik fájl nem egyezik a példával, másolja ki a példát, vagy módosítsa a sablont.
A sablon üzembe helyezése az Azure-ban
A Visual Studio Code terminálban helyezze üzembe a sablont az alábbi Azure CLI-parancsokkal:
templateFile="main.bicep"
today=$(date +"%d-%b-%Y")
deploymentName="sub-scope-"$today
virtualNetworkName="rnd-vnet-001"
virtualNetworkAddressPrefix="10.0.0.0/24"
az deployment sub create \
--name $deploymentName \
--location westus \
--template-file $templateFile \
--parameters virtualNetworkName=$virtualNetworkName \
virtualNetworkAddressPrefix=$virtualNetworkAddressPrefix
A Visual Studio Code terminálban helyezze üzembe a sablont az alábbi Azure PowerShell-parancsokkal:
$templateFile = 'main.bicep'
$today = Get-Date -Format 'MM-dd-yyyy'
$deploymentName = "sub-scope-$today"
$virtualNetworkName = 'rnd-vnet-001'
$virtualNetworkAddressPrefix = '10.0.0.0/24'
New-AzSubscriptionDeployment `
-Name $deploymentName `
-Location westus `
-TemplateFile $templateFile `
-virtualNetworkName $virtualNetworkName `
-virtualNetworkAddressPrefix $virtualNetworkAddressPrefix
Figyelje meg, hogy a paraméterek és virtualNetworkAddressPrefix
a paraméterek értékeit virtualNetworkName
adja át. Amikor egy másik R&D-csapat arra kéri, hogy készítse elő az előfizetésüket, módosíthatja ezeket az értékeket, hogy saját virtuális hálózatot biztosítson a csapatnak.
Az üzembe helyezés befejezése eltarthat egy-két percig, majd megjelenik egy sikeres üzembe helyezés.
Az üzemelő példány ellenőrzése
Most ellenőrizni fogja az erőforráscsoportot és a modul által létrehozott üzembe helyezést.
Nyissa meg az Azure Portalt.
A bal oldali panelen válassza az Erőforráscsoportok lehetőséget. Figyelje meg, hogy létrejött a ToyNetworking erőforráscsoport.
Válassza ki a ToyNetworking erőforráscsoportot . Figyelje meg, hogy a modul sikeresen üzembe lett helyezve az erőforráscsoportban, és hogy a virtuális hálózat létrejött:
Az erőforrások eltávolítása
Sikeresen üzembe helyezte az előfizetés hatókörű erőforrásait, beleértve egy erőforráscsoportot is, és egy modult használt az erőforrás üzembe helyezéséhez a létrehozott erőforráscsoportban. Eltávolíthatja a létrehozott szabályzaterőforrásokat és erőforráscsoportokat.
Figyelem
Ez a parancs véglegesen törli a ToyNetworking nevű erőforráscsoportot és annak összes erőforrását. Ha bármi mást is üzembe helyezett ebben az erőforráscsoportban, hagyja ki ezt a lépést.
subscriptionId=$(az account show --query 'id' --output tsv)
az policy assignment delete --name 'DenyFandGSeriesVMs' --scope "/subscriptions/$subscriptionId"
az policy definition delete --name 'DenyFandGSeriesVMs' --subscription $subscriptionId
az group delete --name ToyNetworking
$subscriptionId = (Get-AzContext).Subscription.Id
Remove-AzPolicyAssignment -Name 'DenyFandGSeriesVMs' -Scope "/subscriptions/$subscriptionId"
Remove-AzPolicyDefinition -Name 'DenyFandGSeriesVMs' -SubscriptionId $subscriptionId
Remove-AzResourceGroup -Name ToyNetworking