Alıştırma - Modülleri kullanarak kaynakları birden çok kapsama dağıtma

Tamamlandı

Dekont

Bu alıştırma için bir Azure aboneliği gerekir. Henüz bir aboneliğiniz yoksa ücretsiz bir abonelik alabilirsiniz.

R&D ekibi, Project Teddybear aboneliğinde sanal ağ oluşturmak için yardımınızı istedi. Gelecekte takıma daha fazla abonelikle yardımcı olacağınızı bildiğiniz için, yeniden kullanılabilir Bicep şablonunuzu ekip üyelerinin kullanması için bir sanal ağ dağıtmak üzere genişletmeye karar verirsiniz.

Bu alıştırmada, son alıştırmada oluşturmaya başladığınız şablonu güncelleştireceksiniz.

İşlem sırasında şunları yapacaksınız:

  • Yeni bir kaynak grubu oluşturmak için abonelik kapsamlı şablonu güncelleştirin.
  • Sanal ağ ile ayrı bir Bicep modülü oluşturun ve sanal ağın nasıl yapılandırıldığını denetlemek için parametreleri kullanın.
  • Modülü kaynak grubuna dağıtmak için şablonu güncelleştirin.
  • Şablonu dağıtma.

Bu alıştırma, abonelik kapsamındaki kaynakları dağıtma izninizin olmasını gerektirir. Geçerli Azure hesabınızla bu gereksinimi karşılayamazsanız ücretsiz deneme sürümü alabilir ve yeni bir Azure aboneliği ve kiracısı oluşturabilirsiniz. Alternatif olarak, bu alıştırmadaki dağıtım adımlarını atlayabilirsiniz.

Kaynak grubu oluşturma

  1. Visual Studio Code'da, önceki alıştırmada oluşturduğunuz main.bicep dosyasını açın.

  2. Geçerli değişken tanımlarının altına aşağıdaki değişken tanımını ekleyin:

    var resourceGroupName = 'ToyNetworking'
    
  3. Dosyanın en altına aşağıdaki kaynak tanımını ekleyin:

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

    Kaynak grubunu, aynı başka bir kaynağı tanımladığınız gibi tanımladığınıza dikkat edin. Kaynak grubu, olarak ayarlanmış Bicep dosyalarında targetScope dağıtılabilen ve yönetilebilen abonelik kapsamlı bir kaynaktır subscription.

  4. Dosyadaki değişiklikleri kaydedin.

Sanal ağ oluşturmak için modül ekleme

Ardından Ar-Ge ekibinin sanal ağı için bir Bicep modülü oluşturacaksınız. Bu alıştırmanın devamında modüldeki kaynakları kaynak grubuna dağıtacaksınız.

  1. Visual Studio Code'da, main.bicep dosyanızı oluşturduğunuz klasörde modules adlı yeni bir klasör oluşturun.

  2. modules klasöründe virtualNetwork.bicep adlı bir dosya oluşturun ve kaydedin.

  3. virtualNetwork.bicep dosyasına aşağıdaki içeriği ekleyin:

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

    Bu modül için bir belirtmediğinize targetScope dikkat edin. Bicep dosyası bir kaynak grubunu hedeflerken hedef kapsam belirtmeniz gerekmez.

  4. Dosyadaki değişiklikleri kaydedin.

Abonelik dağıtımında modülünü kullanma

Artık Bicep'e modülü kaynak grubuna dağıtmasını söylemeye hazırsınız.

  1. Visual Studio Code'daki main.bicep dosyasındaki satırın targetScope altına aşağıdaki parametre tanımlarını ekleyin:

    param virtualNetworkName string
    param virtualNetworkAddressPrefix string
    

    Bu parametreler şablonu yeniden kullanılabilir hale getirir. Ar-Ge ekibinin yeni bir aboneliğe ihtiyaç duyduğunda, benzersiz bir ad ve IP adresi aralığına sahip bir sanal ağ oluşturabilirsiniz.

  2. Dosyanın en altına aşağıdaki modül tanımını ekleyin:

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

    Modül için öğesini açıkça belirttiğinize scope dikkat edin. Bicep, modüldeki kaynakların daha önce dosyada oluşturduğunuz kaynak grubuna dağıtılması gerektiğini anlar.

Şablonunuzu doğrulama

main.bicep dosyanız aşağıdaki gibi görünmelidir:

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

modules/virtualNetwork.bicep dosyanız aşağıdaki gibi görünmelidir:

param virtualNetworkName string
param virtualNetworkAddressPrefix string

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

Dosyalardan biri örnekle eşleşmiyorsa, örneği kopyalayın veya şablonunuzu ayarlayın.

Şablonu Azure’a dağıtma

Visual Studio Code terminalinde aşağıdaki Azure CLI komutlarını kullanarak şablonu dağıtın:

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

Visual Studio Code terminalinde aşağıdaki Azure PowerShell komutlarını kullanarak şablonu dağıtın:

$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

ve virtualNetworkAddressPrefix parametreleri için değerleri geçirdiğiniz dikkat virtualNetworkName edin. Başka bir Ar-Ge ekibi sizden onlar için bir abonelik hazırlamanızı istediğinde, bu değerleri bu ekiliğe kendi sanal ağını verecek şekilde değiştirebilirsiniz.

Dağıtımın tamamlanması bir veya iki dakika sürebilir ve başarılı bir dağıtım görürsünüz.

Dağıtımı doğrulama

Şimdi kaynak grubunu ve modülün oluşturduğu dağıtımı denetleyeceksiniz.

  1. Azure portalına gidin.

  2. Sol bölmede Kaynak grupları'nı seçin. ToyNetworking kaynak grubunun oluşturulduğuna dikkat edin.

  3. ToyNetworking kaynak grubunu seçin. Modülün kaynak grubuna başarıyla dağıtıldığına ve sanal ağın oluşturulduğuna dikkat edin:

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

Kaynakları temizleme

Kaynak grubu dahil olmak üzere abonelik kapsamındaki kaynakları başarıyla dağıttınız ve kaynağı oluşturduğunuz kaynak grubuna dağıtmak için bir modül kullandınız. Oluşturduğunuz ilke kaynaklarını ve kaynak grubunu kaldırabilirsiniz.

Dikkat

Bu komut, ToyNetworking adlı kaynak grubunu ve tüm kaynaklarını kalıcı olarak siler. Bu kaynak grubuna başka bir şey dağıttıysanız bu adımı atlamalısınız.

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