Упражнение. Использование циклов переменных и выходных циклов
Для вашей компании необходимо развернуть виртуальные сети в каждой стране или регионе, где вы запускаете тедди медведя. Разработчики также попросили предоставить им полные доменные имена (FQDN) всех развернутых вами региональных логических серверов Azure SQL.
В этом упражнении вы добавите виртуальную сеть и ее конфигурацию в код Bicep и выведите полные доменные имена логических серверов.
В процессе вы:
- обновить код Bicep, чтобы указать параметр для каждой подсети виртуальной сети;
- добавить цикл переменных, чтобы создать массив подсети для использования в объявлении ресурса виртуальной сети;
- добавить цикл вывода, чтобы создать список полных доменных имен логических серверов;
- развернуть файл Bicep и проверить развертывание.
Добавление виртуальной сети в файл Bicep
Откройте файл main.bicep.
Под объявлениями параметров добавьте следующие параметры:
@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' } ]
Под параметрами добавьте пустую строку, а затем добавьте цикл переменных
subnetProperties
:var subnetProperties = [for subnet in subnets: { name: subnet.name properties: { addressPrefix: subnet.ipAddressRange } }]
Внизу файла под циклом модуля
databases
добавьте следующий цикл ресурсов:resource virtualNetworks 'Microsoft.Network/virtualNetworks@2024-05-01' = [for location in locations: { name: 'teddybear-${location}' location: location properties:{ addressSpace:{ addressPrefixes:[ virtualNetworkAddressPrefix ] } subnets: subnetProperties } }]
Примечание.
В этом примере для всех виртуальных сетей используется одинаковое адресное пространство. Обычно при создании нескольких виртуальных сетей вы можете предоставить им разные адресные пространства на случай, если их нужно будет соединить.
Сохраните изменения в файле.
Добавление выходных данных в модуль базы данных
Откройте файл modules/database.bicep.
В нижней части файла добавьте следующие выходные данные:
output serverName string = sqlServer.name output location string = location output serverFullyQualifiedDomainName string = sqlServer.properties.fullyQualifiedDomainName
Сохраните изменения в файле.
Потоковая передача выходных данных через родительский файл Bicep
Откройте файл main.bicep.
В нижней части файла добавьте следующий цикл выходных данных:
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 }]
Сохраните изменения в файле.
Проверка файла Bicep
После выполнения всех описанных выше изменений файл main.bicep должен выглядеть, как в следующем примере:
@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@2024-05-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 должен выглядеть, как в следующем примере:
@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@2024-05-01-preview' = {
name: sqlServerName
location: location
properties: {
administratorLogin: sqlServerAdministratorLogin
administratorLoginPassword: sqlServerAdministratorLoginPassword
}
}
resource sqlDatabase 'Microsoft.Sql/servers/databases@2024-05-01-preview' = {
parent: sqlServer
name: sqlDatabaseName
location: location
sku: sqlDatabaseSku
}
resource auditStorageAccount 'Microsoft.Storage/storageAccounts@2023-05-01' = if (auditingEnabled) {
name: auditStorageAccountName
location: location
sku: {
name: auditStorageAccountSkuName
}
kind: 'StorageV2'
}
resource sqlServerAudit 'Microsoft.Sql/servers/auditingSettings@2024-05-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
Если они нет, скопируйте примеры или измените шаблоны в соответствии с примерами.
Разверните шаблон Bicep в Azure
В окне терминала Visual Studio Code разверните шаблон Bicep в Azure, выполнив указанный ниже код. Этот процесс может занять несколько минут. Затем будет выполнено успешное развертывание.
az deployment group create --name main --template-file main.bicep
В окне терминала Visual Studio Code разверните шаблон Bicep в Azure, выполнив указанную ниже команду Azure PowerShell. Этот процесс может занять несколько минут. Затем будет выполнено успешное развертывание.
New-AzResourceGroupDeployment -Name main -TemplateFile main.bicep
Внимание
Не забудьте использовать тот же пароль для входа и пароля, который вы использовали ранее, или развертывание не завершится успешно.
Дождитесь окончания развертывания.
Проверка развертывания
После завершения развертывания необходимо проверить, развернуты ли новые виртуальные сети и настроены ли для них подсети должным образом.
Перейдите на портал Azure и убедитесь, что вы находитесь в подписке песочницы.
Выберите "
[имя группы ресурсов песочницы] "Убедитесь, что виртуальные сети развернуты в трех расположениях Azure.
Выберите виртуальную сеть с именем
teddybear-eastasia
.В поле поиска введите Подсети. В разделе Параметры выберите Подсети.
Убедитесь, что развернутые подсети имеют имена и IP-адреса, указанные в значении по умолчанию параметра
subnets
.Проверьте выходные данные команды развертывания. Они должны включать имя и полное доменное имя всех трех развернутых логических серверов, как показано ниже:
Перейдите на портал Azure и убедитесь, что вы находитесь в подписке песочницы.
Выберите "
[имя группы ресурсов песочницы] "Убедитесь, что виртуальные сети развернуты в трех расположениях Azure.
Выберите виртуальную сеть с именем
teddybear-eastasia
.В поле поиска введите Подсети. В разделе Параметры выберите Подсети.
Убедитесь, что развернутые подсети имеют имена и IP-адреса, указанные в значении по умолчанию параметра
subnets
.Проверьте выходные данные команды развертывания. Они должны включать имя и полное доменное имя всех трех развернутых логических серверов, как показано ниже: