Cvičení – nasazení prostředků do více oborů pomocí modulů

Dokončeno

Poznámka:

Toto cvičení vyžaduje předplatné Azure. Pokud ho ještě nemáte, můžete získat bezplatné předplatné.

Tým R&D požádal o pomoc s vytvořením virtuální sítě v předplatném Project Teddybear. Víte, že budete týmu v budoucnu pomáhat s dalšími předplatnými, takže se rozhodnete rozšířit opakovaně použitelnou šablonu Bicep a nasadit virtuální síť, kterou budou členové týmu používat.

V tomto cvičení aktualizujete šablonu, kterou jste začali sestavovat v posledním cvičení.

Během tohoto procesu:

  • Aktualizujte šablonu s oborem předplatného a vytvořte novou skupinu prostředků.
  • Vytvořte samostatný modul Bicep s virtuální sítí a pomocí parametrů můžete řídit konfiguraci virtuální sítě.
  • Aktualizujte šablonu tak, aby nasadil modul do skupiny prostředků.
  • Nasazení šablony

Toto cvičení vyžaduje, abyste měli oprávnění k nasazení prostředků s vymezeným předplatným. Pokud tento požadavek nemůžete splnit s aktuálním účtem Azure, můžete získat bezplatnou zkušební verzi a vytvořit nové předplatné a tenanta Azure. Případně můžete přeskočit kroky nasazení v tomto cvičení.

Vytvoření skupiny zdrojů

  1. V editoru Visual Studio Code otevřete soubor main.bicep , který jste vytvořili v předchozím cvičení.

  2. Do aktuálních definic proměnných přidejte následující definici proměnné:

    var resourceGroupName = 'ToyNetworking'
    
  3. Do dolní části souboru přidejte následující definici prostředku:

    resource resourceGroup 'Microsoft.Resources/resourceGroups@2021-01-01' = {
      name: resourceGroupName
      location: deployment().location
    }
    

    Všimněte si, že definujete skupinu prostředků stejně, jako byste definovali jiný prostředek. Skupina prostředků je prostředek s vymezeným předplatným, který lze nasadit a spravovat v souborech Bicep s nastaveným targetScope nastavením subscription.

  4. Uložte změny souboru.

Přidání modulu pro vytvoření virtuální sítě

Dále vytvoříte modul Bicep pro virtuální síť týmu R&D. Prostředky v modulu nasadíte do skupiny prostředků později v tomto cvičení.

  1. V editoru Visual Studio Code vytvořte novou složku s názvem moduly ve stejné složce, ve které jste vytvořili soubor main.bicep .

  2. Ve složce modulů vytvořte a uložte soubor s názvem virtualNetwork.bicep.

  3. Do souboru virtualNetwork.bicep přidejte následující obsah:

    param virtualNetworkName string
    param virtualNetworkAddressPrefix string
    
    resource virtualNetwork 'Microsoft.Network/virtualNetworks@2020-11-01' = {
      name: virtualNetworkName
      location: resourceGroup().location
      properties: {
        addressSpace: {
          addressPrefixes: [
            virtualNetworkAddressPrefix
          ]
        }
      }
    }
    

    Všimněte si, že jste pro tento modul nezadali targetScope . Pokud se soubor Bicep zaměřuje na skupinu prostředků, nemusíte zadávat cílový obor.

  4. Uložte změny souboru.

Použití modulu v nasazení předplatného

Teď jste připraveni říct Bicep, aby modul nasadil do skupiny prostředků.

  1. Do souboru main.bicep v editoru Visual Studio Code pod targetScope řádek přidejte následující definice parametrů:

    param virtualNetworkName string
    param virtualNetworkAddressPrefix string
    

    Díky těmto parametrům bude šablona opakovaně použitelná. Kdykoli tým R&D potřebuje nové předplatné, můžete vytvořit virtuální síť s jedinečným názvem a rozsahem IP adres.

  2. V dolní části souboru přidejte následující definici modulu:

    module virtualNetwork 'modules/virtualNetwork.bicep' = {
      scope: resourceGroup
      name: 'virtualNetwork'
      params: {
        virtualNetworkName: virtualNetworkName
        virtualNetworkAddressPrefix: virtualNetworkAddressPrefix
      }
    }
    

    Všimněte si, že explicitně zadáváte scope modul. Bicep chápe, že prostředky v modulu by se měly nasadit do skupiny prostředků, kterou jste vytvořili dříve v souboru.

Ověření šablony

Soubor main.bicep by měl vypadat takto:

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
  }
}

Soubor modules/virtualNetwork.bicep by měl vypadat takto:

param virtualNetworkName string
param virtualNetworkAddressPrefix string

resource virtualNetwork 'Microsoft.Network/virtualNetworks@2020-11-01' = {
  name: virtualNetworkName
  location: resourceGroup().location
  properties: {
    addressSpace: {
      addressPrefixes: [
        virtualNetworkAddressPrefix
      ]
    }
  }
}

Pokud se některý soubor neshoduje s příkladem, zkopírujte příklad nebo upravte šablonu.

Nasazení šablony do Azure

V terminálu editoru Visual Studio Code nasaďte šablonu pomocí následujících příkazů Azure CLI:

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

V terminálu editoru Visual Studio Code nasaďte šablonu pomocí následujících příkazů Azure PowerShellu:

$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

Všimněte si, že předáváte hodnoty pro virtualNetworkName parametry a virtualNetworkAddressPrefix parametry. Když vás jiný tým R&D požádá, abyste na ně připravili předplatné, budete moct tyto hodnoty změnit tak, aby tento tým měl vlastní virtuální síť.

Dokončení nasazení může trvat minutu nebo dvě a pak se zobrazí úspěšné nasazení.

Ověření nasazení

Teď zkontrolujete skupinu prostředků a nasazení, které modul vytvořil.

  1. Přejděte na Azure Portal.

  2. V levém podokně vyberte Skupiny prostředků. Všimněte si, že byla vytvořena skupina prostředků ToyNetworking .

  3. Vyberte skupinu prostředků ToyNetworking. Všimněte si, že se modul úspěšně nasadil do skupiny prostředků a že byla vytvořena virtuální síť:

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

Vyčištění prostředků

Úspěšně jste nasadili prostředky s oborem předplatného, včetně skupiny prostředků, a použili jste modul k nasazení prostředku do vytvořené skupiny prostředků. Prostředky zásad a skupinu prostředků, které jste vytvořili, můžete odebrat.

Upozornění

Tento příkaz trvale odstraní skupinu prostředků s názvem ToyNetworking a všechny její prostředky. Pokud jste do této skupiny prostředků nasadili cokoli jiného, měli byste tento krok přeskočit.

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