Exercício - Use loops variáveis e de saída
Para sua empresa de brinquedos, você precisa implantar redes virtuais em cada país/região onde você está lançando o ursinho de pelúcia. Seus desenvolvedores também pediram que você fornecesse a eles os FQDNs (nomes de domínio totalmente qualificados) de cada um dos servidores lógicos SQL do Azure regionais que você implantou.
Neste exercício, você adicionará a rede virtual e sua configuração ao código do Bíceps e produzirá os FQDNs do servidor lógico.
Durante o processo, você:
- Atualize o código Bicep para especificar um parâmetro para as sub-redes de cada rede virtual.
- Adicione um loop variável para criar uma matriz de sub-rede, que você usará na declaração de recursos de rede virtual.
- Adicione um loop de saída para criar a lista de FQDNs do servidor lógico.
- Implante o arquivo Bicep e verifique a implantação.
Adicione a rede virtual ao seu arquivo Bicep
Abra o arquivo main.bicep .
Abaixo das declarações de parâmetro, adicione os seguintes parâmetros:
@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' } ]
Abaixo dos parâmetros, adicione uma linha em branco e, em seguida, adicione o
subnetProperties
loop variável:var subnetProperties = [for subnet in subnets: { name: subnet.name properties: { addressPrefix: subnet.ipAddressRange } }]
Na parte inferior do arquivo, abaixo do loop do
databases
módulo, adicione o seguinte loop de recurso:resource virtualNetworks 'Microsoft.Network/virtualNetworks@2024-01-01' = [for location in locations: { name: 'teddybear-${location}' location: location properties:{ addressSpace:{ addressPrefixes:[ virtualNetworkAddressPrefix ] } subnets: subnetProperties } }]
Nota
Este exemplo usa o mesmo espaço de endereço para todas as redes virtuais. Normalmente, quando você cria várias redes virtuais, você lhes daria diferentes espaços de endereço no caso de precisar conectá-los.
Guarde as alterações ao ficheiro.
Adicionar saídas ao módulo de banco de dados
Abra o arquivo modules/database.bicep .
Na parte inferior do arquivo, adicione as seguintes saídas:
output serverName string = sqlServer.name output location string = location output serverFullyQualifiedDomainName string = sqlServer.properties.fullyQualifiedDomainName
Guarde as alterações ao ficheiro.
Fluir as saídas através do arquivo Bicep pai
Abra o arquivo main.bicep .
Na parte inferior do arquivo, adicione o seguinte loop de saída:
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 }]
Guarde as alterações ao ficheiro.
Verifique seu arquivo Bicep
Depois de concluir todas as alterações anteriores, o arquivo main.bicep deve ser semelhante a este exemplo:
@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-01-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
}]
Seu arquivo database.bicep deve se parecer com este exemplo:
@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@2023-08-01-preview' = {
name: sqlServerName
location: location
properties: {
administratorLogin: sqlServerAdministratorLogin
administratorLoginPassword: sqlServerAdministratorLoginPassword
}
}
resource sqlDatabase 'Microsoft.Sql/servers/databases@2023-08-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@2023-08-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
Se isso não acontecer, copie os exemplos ou ajuste seus modelos para corresponder aos exemplos.
Implantar o modelo Bicep no Azure
No terminal do Visual Studio Code, implante o modelo Bicep no Azure executando o código a seguir. Esse processo pode levar alguns minutos para ser concluído e, em seguida, você terá uma implantação bem-sucedida.
az deployment group create --template-file main.bicep
No terminal do Visual Studio Code, implante o modelo Bicep no Azure executando o seguinte comando do Azure PowerShell. Esse processo pode levar alguns minutos para ser concluído e, em seguida, você terá uma implantação bem-sucedida.
New-AzResourceGroupDeployment -TemplateFile main.bicep
Atenção
Certifique-se de usar o mesmo login e senha que você usou anteriormente, ou a implantação não será concluída com êxito.
Aguarde pela conclusão da implementação.
Verificar a implementação
Após a conclusão da implantação, você deseja verificar se novas redes virtuais foram implantadas e se elas têm sub-redes configuradas conforme o esperado.
Aceda ao portal do Azure e certifique-se de que está na subscrição sandbox.
Selecione
[nome do grupo de recursos do sandbox] .Verifique se as redes virtuais foram implantadas nos três locais do Azure.
Selecione a rede virtual chamada
teddybear-eastasia
.Na barra de pesquisa, digite Sub-redes. Em Definições, selecione Sub-redes.
Verifique se as sub-redes implantadas têm os nomes e endereços IP especificados no
subnets
valor padrão do parâmetro.Verifique a saída do comando deployment. Ele deve incluir o nome e o FQDN de todos os três servidores lógicos que foram implantados, conforme mostrado aqui:
Aceda ao portal do Azure e certifique-se de que está na subscrição sandbox.
Selecione
[nome do grupo de recursos do sandbox] .Verifique se as redes virtuais foram implantadas nos três locais do Azure.
Selecione a rede virtual chamada
teddybear-eastasia
.Na barra de pesquisa, digite Sub-redes. Em Definições, selecione Sub-redes.
Verifique se as sub-redes implantadas têm os nomes e endereços IP especificados no
subnets
valor padrão do parâmetro.Verifique a saída do comando deployment. Ele deve incluir o nome e o FQDN de todos os três servidores lógicos que foram implantados, conforme mostrado aqui: