Übung: Bereitstellen von Ressourcen in mehreren Bereichen mithilfe von Modulen
Hinweis
Für diese Übung ist ein Azure-Abonnement erforderlich. Wenn Sie noch kein Abonnement besitzen, können Sie ein kostenloses Abonnement abrufen.
Das R&D-Team hat Sie um Hilfe beim Erstellen eines virtuellen Netzwerks im Project Teddybear-Abonnement gebeten. Sie wissen, dass Sie dem Team in Zukunft mit mehr Abonnements helfen werden, daher entscheiden Sie sich, Ihre wiederverwendbare Bicep-Vorlage zu erweitern, um ein virtuelles Netzwerk für die Teammitglieder bereitzustellen.
In dieser Übung aktualisieren Sie die Vorlage, mit deren Erstellung Sie in der letzten Übung begonnen haben.
In dem Prozess gehen Sie wie folgt vor:
- Aktualisieren Sie die Vorlage im Abonnementbereich, um eine neue Ressourcengruppe zu erstellen.
- Erstellen Sie ein separates Bicep-Modul mit einem virtuellen Netzwerk, und verwenden Sie Parameter, um die Konfiguration des virtuellen Netzwerks zu steuern.
- Aktualisieren Sie die Vorlage, um das Modul in der Ressourcengruppe bereitzustellen.
- Stellen Sie die Vorlage bereit.
Für diese Übung benötigen Sie die Berechtigung, abonnementspezifische Ressourcen bereitzustellen. Wenn Sie diese Anforderung mit Ihrem aktuellen Azure-Konto nicht erfüllen können, können Sie die kostenlose Testversion nutzen und ein neues Azure-Abonnement und einen neuen Mandanten erstellen. Alternativ können Sie die Bereitstellungsschritte in dieser Übung überspringen.
Erstellen einer Ressourcengruppe
Öffnen Sie in Visual Studio Code die Datei main.bicep, die Sie in der früheren Übung erstellt haben.
Fügen Sie unter den aktuellen Variablendefinitionen die folgende Variablendefinition hinzu:
var resourceGroupName = 'ToyNetworking'
Fügen Sie am Ende der Datei die folgende Ressourcendefinition hinzu:
resource resourceGroup 'Microsoft.Resources/resourceGroups@2024-07-01' = { name: resourceGroupName location: deployment().location }
Beachten Sie, dass Sie die Ressourcengruppe so definieren, wie Sie jede beliebige andere Ressource definieren würden. Eine Ressourcengruppe ist eine Ressource im Abonnementbereich, die in Bicep-Dateien bereitgestellt und mit
targetScope
aufsubscription
festgelegt verwaltet werden kann.Speichern Sie die Änderungen in der Datei.
Hinzufügen eines Moduls zum Erstellen eines virtuellen Netzwerks
Im nächsten Schritt erstellen Sie ein Bicep-Modul für das virtuelle Netzwerk des R&D-Teams. Sie stellen die Ressourcen im Modul später in dieser Übung für die Ressourcengruppe bereit.
Erstellen Sie in Visual Studio Code in dem Ordner, in dem Sie die Datei main.bicep erstellt haben, einen neuen Ordner mit dem Namen modules.
Erstellen Sie im Ordner modules eine Datei namens virtualNetwork.bicep, und speichern Sie sie.
Fügen Sie in der Datei virtualNetwork.bicep den folgenden Inhalt hinzu:
param virtualNetworkName string param virtualNetworkAddressPrefix string resource virtualNetwork 'Microsoft.Network/virtualNetworks@2024-01-01' = { name: virtualNetworkName location: resourceGroup().location properties: { addressSpace: { addressPrefixes: [ virtualNetworkAddressPrefix ] } } }
Beachten Sie, dass Sie für dieses Modul keinen
targetScope
angegeben haben. Sie müssen keinen Zielbereich angeben, wenn die Bicep-Datei auf eine Ressourcengruppe abzielen soll.Speichern Sie die Änderungen in der Datei.
Verwenden des Moduls in der Abonnementbereitstellung
Nun können Sie Bicep mitteilen, dass das Modul in der Ressourcengruppe bereitgestellt werden soll.
Fügen Sie in der Datei main.bicep in Visual Studio Code unter der Zeile
targetScope
die folgenden Parameterdefinitionen hinzu:param virtualNetworkName string param virtualNetworkAddressPrefix string
Durch diese Parameter wird die Vorlage wiederverwendbar. Wenn das R&D-Team ein neues Abonnement benötigt, können Sie ein virtuelles Netzwerk mit einem eindeutigen Namen und IP-Adressbereich erstellen.
Fügen Sie am Ende der Datei die folgende Moduldefinition hinzu:
module virtualNetwork 'modules/virtualNetwork.bicep' = { scope: resourceGroup name: 'virtualNetwork' params: { virtualNetworkName: virtualNetworkName virtualNetworkAddressPrefix: virtualNetworkAddressPrefix } }
Beachten Sie, dass Sie den
scope
für das Modul explizit angeben. Bicep versteht, dass die Ressourcen innerhalb des Moduls für die Ressourcengruppe bereitgestellt werden sollen, die Sie zuvor in der Datei erstellt haben.
Überprüfen der Vorlage
Ihre Datei main.bicep sollte folgendermaßen aussehen:
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
}
}
Ihre Datei modules/virtualNetwork.bicep sollte folgendermaßen aussehen:
param virtualNetworkName string
param virtualNetworkAddressPrefix string
resource virtualNetwork 'Microsoft.Network/virtualNetworks@2024-01-01' = {
name: virtualNetworkName
location: resourceGroup().location
properties: {
addressSpace: {
addressPrefixes: [
virtualNetworkAddressPrefix
]
}
}
}
Wenn eine der beiden Dateien nicht mit diesem Beispiel übereinstimmt, kopieren Sie das Beispiel, oder passen Sie Ihre Vorlage an.
Bereitstellen der Vorlage in Azure
Stellen Sie die Vorlage im Visual Studio Code-Terminal mithilfe der folgenden Azure CLI-Befehle bereit:
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
Stellen Sie die Vorlage im Visual Studio Code-Terminal mithilfe der folgenden Azure PowerShell-Befehle bereit:
$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
Beachten Sie, dass Sie Werte für die Parameter virtualNetworkName
und virtualNetworkAddressPrefix
übergeben. Wenn ein anderes F&E-Team Sie bittet, ein Abonnement für das Team vorzubereiten, können Sie diese Werte ändern, um diesem Team sein eigenes virtuelles Netzwerk zur Verfügung zu stellen.
Das Fertigstellen der Bereitstellung kann einige Minuten dauern. Anschließend wird eine erfolgreiche Bereitstellung angezeigt.
Überprüfen der Bereitstellung
Nun überprüfen Sie die Ressourcengruppe und die vom Modul erstellte Bereitstellung.
Öffnen Sie das Azure-Portal.
Wählen Sie im linken Bereich Ressourcengruppen aus. Beachten Sie, dass die Ressourcengruppe ToyNetworking erstellt wurde.
Wählen Sie die Ressourcengruppe ToyNetworking aus. Beachten Sie, dass das Modul erfolgreich für die Ressourcengruppe bereitgestellt und das virtuelle Netzwerk erstellt wurde:
Bereinigen der Ressourcen
Sie haben die Ressourcen im Abonnementbereich erfolgreich bereitgestellt, einschließlich einer Ressourcengruppe, und Sie haben ein Modul verwendet, um die Ressource in der von Ihnen erstellten Ressourcengruppe bereitzustellen. Sie können die Richtlinienressourcen und die Ressourcengruppe entfernen, die Sie erstellt haben.
Achtung
Dieser Befehl löscht die Ressourcengruppe mit dem Namen ToyNetworking und alle ihre Ressourcen dauerhaft. Wenn Sie noch andere Elemente in dieser Ressourcengruppe bereitgestellt haben, sollten Sie diesen Schritt überspringen.
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