Latihan - Menggunakan variabel dan perulangan output
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
Membuka file main.bicep.
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' } ]
Di bawah parameter, tambahkan baris kosong, lalu tambahkan perulangan variabel
subnetProperties
:var subnetProperties = [for subnet in subnets: { name: subnet.name properties: { addressPrefix: subnet.ipAddressRange } }]
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.
Simpan perubahan pada file.
Menambahkan output ke modul database
Buka file modules/database.bicep.
Di bagian bawah file, tambahkan output berikut:
output serverName string = sqlServer.name output location string = location output serverFullyQualifiedDomainName string = sqlServer.properties.fullyQualifiedDomainName
Simpan perubahan pada file.
Mengalirkan output melalui file Bicep induk
Membuka file main.bicep.
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 }]
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.
Membuka portal Azure dan pastikan Anda berlangganan kotak pasir.
Pilih
[nama grup sumber daya kotak pasir] .Verifikasi bahwa jaringan virtual telah disebarkan ke tiga lokasi Azure.
Pilih jaringan virtual bernama
teddybear-eastasia
.Pada bilah pencarian, masukkan Subnet. Pada Pengaturan, pilih Subnet.
Verifikasi bahwa subnet yang disebarkan memiliki nama dan alamat IP yang ditentukan dalam nilai default parameter
subnets
.Periksa output perintah penyebaran. Output ini harus mencakup nama dan FQDN dari ketiga server logis yang disebarkan, seperti yang ditunjukkan di sini:
Membuka portal Azure dan pastikan Anda berlangganan kotak pasir.
Pilih
[nama grup sumber daya kotak pasir] .Verifikasi bahwa jaringan virtual telah disebarkan ke tiga lokasi Azure.
Pilih jaringan virtual bernama
teddybear-eastasia
.Pada bilah pencarian, masukkan Subnet. Pada Pengaturan, pilih Subnet.
Verifikasi bahwa subnet yang disebarkan memiliki nama dan alamat IP yang ditentukan dalam nilai default parameter
subnets
.Periksa output perintah penyebaran. Output ini harus mencakup nama dan FQDN dari ketiga server logis yang disebarkan, seperti yang ditunjukkan di sini: