Latihan - Menggunakan variabel dan perulangan output

Selesai

Untuk perusahaan mainan Anda, Anda perlu menyebarkan jaringan virtual di setiap negara/wilayah tempat Anda meluncurkan boneka beruang. Pengembang Anda juga telah meminta Anda untuk memberi mereka nama domain (FQDN) yang sepenuhnya memenuhi syarat dari masing-masing server Azure SQL regional yang telah Anda sebarkan.

Dalam latihan ini, Anda akan menambahkan jaringan virtual dan konfigurasinya ke kode Bicep Anda, dan Anda akan mengeluarkan FQDN server logika.

Selama proses tersebut, Anda akan:

  • Memperbarui kode Bicep Anda guna menentukan parameter untuk setiap subnet jaringan virtual.
  • Menambahkan perulangan variabel untuk membuat array subnet, yang akan Anda gunakan dalam deklarasi sumber daya jaringan virtual.
  • Menambahkan perulangan output untuk membuat daftar FQDN server logika.
  • Menyebarkan file Bicep dan memverifikasi penyebaran sumber daya.

Menambahkan jaringan virtual ke file Bicep Anda

  1. Membuka file main.bicep.

  2. Di bawah deklarasi parameter, tambahkan parameter berikut:

    @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. Di bawah parameter, tambahkan baris kosong, lalu tambahkan perulangan variabel subnetProperties:

    var subnetProperties = [for subnet in subnets: {
      name: subnet.name
      properties: {
        addressPrefix: subnet.ipAddressRange
      }
    }]
    
  4. Di bagian bawah file, di bawah perulangan modul databases, tambahkan perulangan sumber daya berikut:

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

    Catatan

    Contoh ini menggunakan ruang alamat yang sama untuk semua jaringan virtual. Biasanya, saat Anda membuat beberapa jaringan virtual, Anda akan memberi mereka ruang alamat yang berbeda jika Anda perlu menghubungkannya bersama-sama.

  5. Simpan perubahan pada file.

Menambahkan output ke modul database

  1. Buka file modules/database.bicep.

  2. Di bagian bawah file, tambahkan output berikut:

    output serverName string = sqlServer.name
    output location string = location
    output serverFullyQualifiedDomainName string = sqlServer.properties.fullyQualifiedDomainName
    
  3. Simpan perubahan pada file.

Mengalirkan output melalui file Bicep induk

  1. Membuka file main.bicep.

  2. Di bagian bawah file, tambahkan perulangan output berikut:

    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. Simpan perubahan pada file.

Memverifikasi file Bicep Anda

Setelah Anda menyelesaikan semua perubahan sebelumnya, file main.bicep Anda akan terlihat seperti contoh ini:

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

File database.bicep Anda akan terlihat seperti contoh ini:

@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

Jika tidak, salin contoh atau sesuaikan templat Anda agar sesuai dengan contoh.

Menyebarkan templat Bicep ke Azure

Di terminal Visual Studio Code, sebarkan templat Bicep ke Azure dengan menjalankan kode berikut. Proses ini dapat memakan waktu beberapa menit untuk selesai, dan kemudian Anda akan memiliki penyebaran yang sukses.

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

Di terminal Visual Studio Code, sebarkan templat Bicep ke Azure dengan menjalankan perintah Azure PowerShell berikut. Proses ini dapat memakan waktu beberapa menit untuk selesai, dan kemudian Anda akan memiliki penyebaran yang sukses.

New-AzResourceGroupDeployment -TemplateFile main.bicep

Perhatian

Pastikan untuk menggunakan login dan kata sandi yang sama dengan yang Anda gunakan sebelumnya, atau penyebaran tidak akan berhasil diselesaikan.

Tunggu hingga penyebaran selesai.

Verifikasi penyebaran

Setelah penyebaran selesai, Anda ingin memverifikasi bahwa jaringan virtual baru disebarkan dan bahwa mereka memiliki subnet yang dikonfigurasi seperti yang Anda harapkan.

  1. Membuka portal Azure dan pastikan Anda berlangganan kotak pasir.

  2. Pilih [nama grup sumber daya kotak pasir].

  3. Verifikasi bahwa jaringan virtual telah disebarkan ke tiga lokasi Azure.

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

  4. Pilih jaringan virtual bernama teddybear-eastasia.

  5. Pada bilah pencarian, masukkan Subnet. Pada Pengaturan, pilih Subnet.

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

  6. Verifikasi bahwa subnet yang disebarkan memiliki nama dan alamat IP yang ditentukan dalam nilai default parameter subnets.

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

  7. Periksa output perintah penyebaran. Output ini harus mencakup nama dan FQDN dari ketiga server logis yang disebarkan, seperti yang ditunjukkan di sini:

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

  1. Membuka portal Azure dan pastikan Anda berlangganan kotak pasir.

  2. Pilih [nama grup sumber daya kotak pasir].

  3. Verifikasi bahwa jaringan virtual telah disebarkan ke tiga lokasi Azure.

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

  4. Pilih jaringan virtual bernama teddybear-eastasia.

  5. Pada bilah pencarian, masukkan Subnet. Pada Pengaturan, pilih Subnet.

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

  6. Verifikasi bahwa subnet yang disebarkan memiliki nama dan alamat IP yang ditentukan dalam nilai default parameter subnets.

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

  7. Periksa output perintah penyebaran. Output ini harus mencakup nama dan FQDN dari ketiga server logis yang disebarkan, seperti yang ditunjukkan di sini:

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