Alıştırma - Değişken ve çıkış döngülerini kullanma
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
main.bicep dosyasını açın.
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' } ]
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 } }]
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.
Dosyadaki değişiklikleri kaydedin.
Veritabanı modülüne çıkış ekleme
modules/database.bicep dosyasını açın.
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
Dosyadaki değişiklikleri kaydedin.
Çıkışları üst Bicep dosyası üzerinden akışla aktarma
main.bicep dosyasını açın.
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 }]
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.
Azure portalına gidin ve korumalı alan aboneliğinde olduğunuzdan emin olun.
[sandbox resource group name] öğesini seçin.Sanal ağların üç Azure konumuna dağıtıldığını doğrulayın.
adlı
teddybear-eastasia
sanal ağı seçin.Arama çubuğuna Alt ağlar yazın. Ayarlar'ın altında Alt ağlar’ı seçin.
Dağıtılan alt ağların, parametrenin varsayılan değerinde belirtilen adlara ve IP adreslerine
subnets
sahip olduğunu doğrulayın.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:
Azure portalına gidin ve korumalı alan aboneliğinde olduğunuzdan emin olun.
[sandbox resource group name] öğesini seçin.Sanal ağların üç Azure konumuna dağıtıldığını doğrulayın.
adlı
teddybear-eastasia
sanal ağı seçin.Arama çubuğuna Alt ağlar yazın. Ayarlar'ın altında Alt ağlar’ı seçin.
Dağıtılan alt ağların, parametrenin varsayılan değerinde belirtilen adlara ve IP adreslerine
subnets
sahip olduğunu doğrulayın.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: