Alıştırma - Değişken ve çıkış döngülerini kullanma

Tamamlandı

Oyuncak şirketiniz için, oyuncak ayıyı başlattığınız her ülkeye/bölgeye sanal ağlar dağıtmanız gerekir. Geliştiricileriniz ayrıca dağıtmış olduğunuz bölgesel Azure SQL mantıksal sunucularının her birinin tam etki alanı adlarını (FQDN) vermenizi istedi.

Bu alıştırmada, sanal ağı ve yapılandırmasını Bicep kodunuza ekleyecek ve mantıksal sunucu FQDN'lerinin çıkışını oluşturacaksınız.

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

  • Her sanal ağın alt ağları için bir parametre belirtmek üzere Bicep kodunuzu güncelleştirin.
  • Sanal ağ kaynak bildiriminde kullanacağınız bir alt ağ dizisi oluşturmak için bir değişken döngüsü ekleyin.
  • Mantıksal sunucu FQDN'lerinin listesini oluşturmak için bir çıkış döngüsü ekleyin.
  • Bicep dosyasını dağıtın ve dağıtımı doğrulayın.

Sanal ağı Bicep dosyanıza ekleme

  1. main.bicep dosyasını açın.

  2. Parametre bildirimlerinin altına aşağıdaki parametreleri ekleyin:

    @description('The IP address range for all virtual networks to use.')
    param virtualNetworkAddressPrefix string = '10.10.0.0/16'
    
    @description('The name and IP address range for each subnet in the virtual networks.')
    param subnets array = [
      {
        name: 'frontend'
        ipAddressRange: '10.10.5.0/24'
      }
      {
        name: 'backend'
        ipAddressRange: '10.10.10.0/24'
      }
    ]
    
  3. Parametrelerin altına boş bir satır ekleyin ve ardından değişken döngüsünü ekleyin subnetProperties :

    var subnetProperties = [for subnet in subnets: {
      name: subnet.name
      properties: {
        addressPrefix: subnet.ipAddressRange
      }
    }]
    
  4. Dosyanın en altına, modül döngüsünün databases altına aşağıdaki kaynak döngüsünü ekleyin:

    resource virtualNetworks 'Microsoft.Network/virtualNetworks@2021-08-01' = [for location in locations: {
      name: 'teddybear-${location}'
      location: location
      properties:{
        addressSpace:{
          addressPrefixes:[
            virtualNetworkAddressPrefix
          ]
        }
        subnets: subnetProperties
      }
    }]
    

    Dekont

    Bu örnekte tüm sanal ağlar için aynı adres alanı kullanılır. Normalde, birden çok sanal ağ oluşturduğunuzda, birbirine bağlamanız gerektiğinde onlara farklı adres alanları verirsiniz.

  5. Dosyadaki değişiklikleri kaydedin.

Veritabanı modülüne çıkış ekleme

  1. modules/database.bicep dosyasını açın.

  2. Dosyanın en altına aşağıdaki çıkışları ekleyin:

    output serverName string = sqlServer.name
    output location string = location
    output serverFullyQualifiedDomainName string = sqlServer.properties.fullyQualifiedDomainName
    
  3. Dosyadaki değişiklikleri kaydedin.

Çıkışları üst Bicep dosyası üzerinden akışla aktarma

  1. main.bicep dosyasını açın.

  2. Dosyanın en altına aşağıdaki çıkış döngüsünü ekleyin:

    output serverInfo array = [for i in range(0, length(locations)): {
      name: databases[i].outputs.serverName
      location: databases[i].outputs.location
      fullyQualifiedDomainName: databases[i].outputs.serverFullyQualifiedDomainName
    }]
    
  3. Dosyadaki değişiklikleri kaydedin.

Bicep dosyanızı doğrulama

Önceki tüm değişiklikleri tamamladıktan sonra main.bicep dosyanız şu örnekteki gibi görünmelidir:

@description('The Azure regions into which the resources should be deployed.')
param locations array = [
  'westeurope'
  'eastus2'
  'eastasia'
]

@secure()
@description('The administrator login username for the SQL server.')
param sqlServerAdministratorLogin string

@secure()
@description('The administrator login password for the SQL server.')
param sqlServerAdministratorLoginPassword string

@description('The IP address range for all virtual networks to use.')
param virtualNetworkAddressPrefix string = '10.10.0.0/16'

@description('The name and IP address range for each subnet in the virtual networks.')
param subnets array = [
  {
    name: 'frontend'
    ipAddressRange: '10.10.5.0/24'
  }
  {
    name: 'backend'
    ipAddressRange: '10.10.10.0/24'
  }
]

var subnetProperties = [for subnet in subnets: {
  name: subnet.name
  properties: {
    addressPrefix: subnet.ipAddressRange
  }
}]

module databases 'modules/database.bicep' = [for location in locations: {
  name: 'database-${location}'
  params: {
    location: location
    sqlServerAdministratorLogin: sqlServerAdministratorLogin
    sqlServerAdministratorLoginPassword: sqlServerAdministratorLoginPassword
  }
}]

resource virtualNetworks 'Microsoft.Network/virtualNetworks@2021-08-01' = [for location in locations: {
  name: 'teddybear-${location}'
  location: location
  properties:{
    addressSpace:{
      addressPrefixes:[
        virtualNetworkAddressPrefix
      ]
    }
    subnets: subnetProperties
  }
}]

output serverInfo array = [for i in range(0, length(locations)): {
  name: databases[i].outputs.serverName
  location: databases[i].outputs.location
  fullyQualifiedDomainName: databases[i].outputs.serverFullyQualifiedDomainName
}]

database.bicep dosyanız şu örneğe benzer olmalıdır:

@description('The Azure region into which the resources should be deployed.')
param location string

@secure()
@description('The administrator login username for the SQL server.')
param sqlServerAdministratorLogin string

@secure()
@description('The administrator login password for the SQL server.')
param sqlServerAdministratorLoginPassword string

@description('The name and tier of the SQL database SKU.')
param sqlDatabaseSku object = {
  name: 'Standard'
  tier: 'Standard'
}

@description('The name of the environment. This must be Development or Production.')
@allowed([
  'Development'
  'Production'
])
param environmentName string = 'Development'

@description('The name of the audit storage account SKU.')
param auditStorageAccountSkuName string = 'Standard_LRS'

var sqlServerName = 'teddy${location}${uniqueString(resourceGroup().id)}'
var sqlDatabaseName = 'TeddyBear'
var auditingEnabled = environmentName == 'Production'
var auditStorageAccountName = take('bearaudit${location}${uniqueString(resourceGroup().id)}', 24)

resource sqlServer 'Microsoft.Sql/servers@2021-11-01-preview' = {
  name: sqlServerName
  location: location
  properties: {
    administratorLogin: sqlServerAdministratorLogin
    administratorLoginPassword: sqlServerAdministratorLoginPassword
  }
}

resource sqlDatabase 'Microsoft.Sql/servers/databases@2021-11-01-preview' = {
  parent: sqlServer
  name: sqlDatabaseName
  location: location
  sku: sqlDatabaseSku
}

resource auditStorageAccount 'Microsoft.Storage/storageAccounts@2021-09-01' = if (auditingEnabled) {
  name: auditStorageAccountName
  location: location
  sku: {
    name: auditStorageAccountSkuName
  }
  kind: 'StorageV2'  
}

resource sqlServerAudit 'Microsoft.Sql/servers/auditingSettings@2021-11-01-preview' = if (auditingEnabled) {
  parent: sqlServer
  name: 'default'
  properties: {
    state: 'Enabled'
    storageEndpoint: environmentName == 'Production' ? auditStorageAccount.properties.primaryEndpoints.blob : ''
    storageAccountAccessKey: environmentName == 'Production' ? listKeys(auditStorageAccount.id, auditStorageAccount.apiVersion).keys[0].value : ''
  }
}

output serverName string = sqlServer.name
output location string = location
output serverFullyQualifiedDomainName string = sqlServer.properties.fullyQualifiedDomainName

Aksi takdirde, örnekleri kopyalayın veya şablonlarınızı örneklerle eşleşecek şekilde ayarlayın.

Bicep şablonunu Azure'a dağıtma

Visual Studio Code terminalinde aşağıdaki kodu çalıştırarak Bicep şablonunu Azure'a dağıtın. Bu işlemin tamamlanması birkaç dakika sürebilir ve başarılı bir dağıtıma sahip olursunuz.

az deployment group create --template-file main.bicep

Visual Studio Code terminalinde, aşağıdaki Azure PowerShell komutunu çalıştırarak Bicep şablonunu Azure'a dağıtın. Bu işlemin tamamlanması birkaç dakika sürebilir ve başarılı bir dağıtıma sahip olursunuz.

New-AzResourceGroupDeployment -TemplateFile main.bicep

Dikkat

Daha önce kullandığınız oturum açma bilgilerini ve parolayı kullandığınızdan emin olun; aksi zaman dağıtım başarıyla tamamlanamayacaktır.

Dağıtımın bitmesini bekleyin.

Dağıtımı doğrulama

Dağıtım tamamlandıktan sonra yeni sanal ağların dağıtıldığını ve alt ağların beklediğiniz gibi yapılandırıldığını doğrulamak istiyorsunuz.

  1. Azure portalına gidin ve korumalı alan aboneliğinde olduğunuzdan emin olun.

  2. [sandbox resource group name] öğesini seçin.

  3. Sanal ağların üç Azure konumuna dağıtıldığını doğrulayın.

    Screenshot of the Azure portal, showing a list of virtual networks after deployment.

  4. adlı teddybear-eastasiasanal ağı seçin.

  5. Arama çubuğuna Alt ağlar yazın. Ayarlar'ın altında Alt ağlar’ı seçin.

    Screenshot of the Azure portal interface for the virtual network, showing the search field with Subnets entered.

  6. Dağıtılan alt ağların, parametrenin varsayılan değerinde belirtilen adlara ve IP adreslerine subnets sahip olduğunu doğrulayın.

    Screenshot of the Azure portal that shows two virtual network subnets after deployment.

  7. Dağıtım komutunun çıkışını denetleyin. Burada gösterildiği gibi dağıtılan üç mantıksal sunucunun da adını ve FQDN'sini içermelidir:

    Screenshot of the deployment output, displaying the properties of the logical servers.

  1. Azure portalına gidin ve korumalı alan aboneliğinde olduğunuzdan emin olun.

  2. [sandbox resource group name] öğesini seçin.

  3. Sanal ağların üç Azure konumuna dağıtıldığını doğrulayın.

    Screenshot of the Azure portal, showing a list of virtual networks after deployment.

  4. adlı teddybear-eastasiasanal ağı seçin.

  5. Arama çubuğuna Alt ağlar yazın. Ayarlar'ın altında Alt ağlar’ı seçin.

    Screenshot of the Azure portal interface for the virtual network, showing the search field with Subnets entered.

  6. Dağıtılan alt ağların, parametrenin varsayılan değerinde belirtilen adlara ve IP adreslerine subnets sahip olduğunu doğrulayın.

    Screenshot of the Azure portal that shows two virtual network subnets after deployment.

  7. Dağıtım komutunun çıkışını denetleyin. Burada gösterildiği gibi dağıtılan üç mantıksal sunucunun da adını ve FQDN'sini içermelidir:

    Screenshot of the deployment output, displaying the properties of the logical servers.