Übung: Bereitstellen von Ressourcen in mehreren Bereichen mithilfe von Modulen

Abgeschlossen

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

  1. Öffnen Sie in Visual Studio Code die Datei main.bicep, die Sie in der früheren Übung erstellt haben.

  2. Fügen Sie unter den aktuellen Variablendefinitionen die folgende Variablendefinition hinzu:

    var resourceGroupName = 'ToyNetworking'
    
  3. Fügen Sie am Ende der Datei die folgende Ressourcendefinition hinzu:

    resource resourceGroup 'Microsoft.Resources/resourceGroups@2021-01-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 auf subscription festgelegt verwaltet werden kann.

  4. 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.

  1. 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.

  2. Erstellen Sie im Ordner modules eine Datei namens virtualNetwork.bicep, und speichern Sie sie.

  3. Fügen Sie in der Datei virtualNetwork.bicep den folgenden Inhalt hinzu:

    param virtualNetworkName string
    param virtualNetworkAddressPrefix string
    
    resource virtualNetwork 'Microsoft.Network/virtualNetworks@2020-11-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.

  4. 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.

  1. 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.

  2. 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@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
  }
}

Ihre Datei modules/virtualNetwork.bicep sollte folgendermaßen aussehen:

param virtualNetworkName string
param virtualNetworkAddressPrefix string

resource virtualNetwork 'Microsoft.Network/virtualNetworks@2020-11-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.

  1. Öffnen Sie das Azure-Portal.

  2. Wählen Sie im linken Bereich Ressourcengruppen aus. Beachten Sie, dass die Ressourcengruppe ToyNetworking erstellt wurde.

  3. Wählen Sie die Ressourcengruppe ToyNetworking aus. Beachten Sie, dass das Modul erfolgreich für die Ressourcengruppe bereitgestellt und das virtuelle Netzwerk erstellt wurde:

    Screenshot of the Azure portal, showing the ToyNetworking resource group.

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