Övning – Distribuera resurser till flera omfång med hjälp av moduler
Kommentar
Den här övningen kräver en Azure-prenumeration. Om du inte redan har en kan du få en kostnadsfri prenumeration.
R&D-teamet har bett om hjälp med att skapa ett virtuellt nätverk i Project Teddybear-prenumerationen. Du vet att du kommer att hjälpa teamet med fler prenumerationer i framtiden, så du bestämmer dig för att utöka din återanvändbara Bicep-mall för att distribuera ett virtuellt nätverk som teammedlemmarna kan använda.
I den här övningen uppdaterar du mallen som du började skapa i den senaste övningen.
Under processen gör du följande:
- Uppdatera mallen med prenumerationsomfång för att skapa en ny resursgrupp.
- Skapa en separat Bicep-modul med ett virtuellt nätverk och använd parametrar för att styra hur det virtuella nätverket konfigureras.
- Uppdatera mallen för att distribuera modulen till resursgruppen.
- Distribuera mallen.
Den här övningen kräver att du har behörighet att distribuera resurser med prenumerationsomfång. Om du inte kan uppfylla det här kravet med ditt aktuella Azure-konto kan du få en kostnadsfri utvärderingsversion och skapa en ny Azure-prenumeration och klientorganisation. Du kan också hoppa över distributionsstegen i den här övningen.
Skapa en resursgrupp
I Visual Studio Code öppnar du filen main.bicep som du skapade i den tidigare övningen.
Under de aktuella variabeldefinitionerna lägger du till följande variabeldefinition:
var resourceGroupName = 'ToyNetworking'
Lägg till följande resursdefinition längst ned i filen:
resource resourceGroup 'Microsoft.Resources/resourceGroups@2024-07-01' = { name: resourceGroupName location: deployment().location }
Observera att du definierar resursgruppen precis som du definierar en annan resurs. En resursgrupp är en resurs med prenumerationsomfång som kan distribueras och hanteras i Bicep-filer med
targetScope
värdetsubscription
.Spara ändringarna i filen.
Lägga till en modul för att skapa ett virtuellt nätverk
Därefter skapar du en Bicep-modul för R&D-teamets virtuella nätverk. Du distribuerar resurserna i modulen till resursgruppen senare i den här övningen.
I Visual Studio Code skapar du en ny mapp med namnet moduler i samma mapp där du skapade main.bicep-filen.
I mappen modules skapar och sparar du en fil med namnet virtualNetwork.bicep.
Lägg till följande innehåll i filen virtualNetwork.bicep :
param virtualNetworkName string param virtualNetworkAddressPrefix string resource virtualNetwork 'Microsoft.Network/virtualNetworks@2024-01-01' = { name: virtualNetworkName location: resourceGroup().location properties: { addressSpace: { addressPrefixes: [ virtualNetworkAddressPrefix ] } } }
Observera att du inte har angett något
targetScope
för den här modulen. Du behöver inte ange ett målomfång när Bicep-filen är riktad mot en resursgrupp.Spara ändringarna i filen.
Använda modulen i prenumerationsdistributionen
Nu är du redo att be Bicep att distribuera modulen till resursgruppen.
Lägg till följande parameterdefinitioner under
targetScope
raden i filen main.bicep i Visual Studio Code:param virtualNetworkName string param virtualNetworkAddressPrefix string
Dessa parametrar gör mallen återanvändbar. Varje gång R&D-teamet behöver en ny prenumeration kan du skapa ett virtuellt nätverk med ett unikt namn och IP-adressintervall.
Lägg till följande moduldefinition längst ned i filen:
module virtualNetwork 'modules/virtualNetwork.bicep' = { scope: resourceGroup name: 'virtualNetwork' params: { virtualNetworkName: virtualNetworkName virtualNetworkAddressPrefix: virtualNetworkAddressPrefix } }
Observera att du uttryckligen anger
scope
för modulen. Bicep förstår att resurserna i modulen ska distribueras till den resursgrupp som du skapade tidigare i filen.
Verifiera mallen
Filen main.bicep bör se ut så här:
targetScope = 'subscription'
param virtualNetworkName string
param virtualNetworkAddressPrefix string
var policyDefinitionName = 'DenyFandGSeriesVMs'
var policyAssignmentName = 'DenyFandGSeriesVMs'
var resourceGroupName = 'ToyNetworking'
resource policyDefinition 'Microsoft.Authorization/policyDefinitions@2024-05-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@2024-05-01' = {
name: policyAssignmentName
properties: {
policyDefinitionId: policyDefinition.id
}
}
resource resourceGroup 'Microsoft.Resources/resourceGroups@2024-07-01' = {
name: resourceGroupName
location: deployment().location
}
module virtualNetwork 'modules/virtualNetwork.bicep' = {
scope: resourceGroup
name: 'virtualNetwork'
params: {
virtualNetworkName: virtualNetworkName
virtualNetworkAddressPrefix: virtualNetworkAddressPrefix
}
}
Filen modules/virtualNetwork.bicep bör se ut så här:
param virtualNetworkName string
param virtualNetworkAddressPrefix string
resource virtualNetwork 'Microsoft.Network/virtualNetworks@2024-01-01' = {
name: virtualNetworkName
location: resourceGroup().location
properties: {
addressSpace: {
addressPrefixes: [
virtualNetworkAddressPrefix
]
}
}
}
Om någon av filerna inte matchar exemplet kopierar du antingen exemplet eller justerar mallen.
Distribuera mallen till Azure
Distribuera mallen i Visual Studio Code-terminalen med hjälp av följande Azure CLI-kommandon:
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
Distribuera mallen i Visual Studio Code-terminalen med hjälp av följande Azure PowerShell-kommandon:
$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
Observera att du skickar in värden för parametrarna virtualNetworkName
och virtualNetworkAddressPrefix
. När ett annat R&D-team ber dig att förbereda en prenumeration för dem kan du ändra dessa värden för att ge teamet ett eget virtuellt nätverk.
Distributionen kan ta en minut eller två att slutföra och sedan visas en lyckad distribution.
Verifiera distributionen
Nu ska du kontrollera resursgruppen och distributionen som modulen skapade.
Gå till Azure-portalen.
Välj Resursgrupper i den vänstra rutan. Observera att resursgruppen ToyNetworking har skapats.
Välj resursgruppen ToyNetworking. Observera att modulen har distribuerats till resursgruppen och att det virtuella nätverket har skapats:
Rensa resurserna
Du har distribuerat de prenumerationsomfångsbegränsade resurserna, inklusive en resursgrupp, och du har använt en modul för att distribuera resursen till den resursgrupp som du skapade. Du kan ta bort de principresurser och resursgrupper som du har skapat.
Varning
Med det här kommandot tas resursgruppen med namnet ToyNetworking och alla dess resurser bort permanent. Om du har distribuerat något annat till den här resursgruppen bör du hoppa över det här steget.
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