Övning – Distribuera resurser till flera omfång med hjälp av moduler

Slutförd

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

  1. I Visual Studio Code öppnar du filen main.bicep som du skapade i den tidigare övningen.

  2. Under de aktuella variabeldefinitionerna lägger du till följande variabeldefinition:

    var resourceGroupName = 'ToyNetworking'
    
  3. 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ärdet subscription.

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

  1. I Visual Studio Code skapar du en ny mapp med namnet moduler i samma mapp där du skapade main.bicep-filen.

  2. I mappen modules skapar och sparar du en fil med namnet virtualNetwork.bicep.

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

  4. Spara ändringarna i filen.

Använda modulen i prenumerationsdistributionen

Nu är du redo att be Bicep att distribuera modulen till resursgruppen.

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

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

  1. Gå till Azure-portalen.

  2. Välj Resursgrupper i den vänstra rutan. Observera att resursgruppen ToyNetworking har skapats.

  3. Välj resursgruppen ToyNetworking. Observera att modulen har distribuerats till resursgruppen och att det virtuella nätverket har skapats:

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

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