Exercício – usar loops de saída e de variável
Para sua empresa de brinquedos, você precisa implantar redes virtuais em cada país/região em que está lançando o urso. Seus desenvolvedores também pediram que você desse a eles os FQDNs (nomes de domínio totalmente qualificados) de cada um dos servidores lógicos regionais do SQL do Azure que você implantou.
Neste exercício, você vai adicionar a rede virtual e a respectiva configuração ao seu código Bicep e gerar os FQDNs do servidor lógico.
Durante o processo, você vai:
- Atualizar o código Bicep para especificar um parâmetro para as sub-redes de cada rede virtual.
- Adicionar um loop de variável para criar uma matriz de sub-rede, que você usará na declaração de recurso de rede virtual.
- Adicionar um loop de saída para criar a lista de FQDNs de servidor lógico.
- Implantar o arquivo Bicep e verificar a implantação dos recursos.
Adicionar a rede virtual ao arquivo Bicep
Abra o arquivo main.bicep.
Sob as 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 loop de variável
subnetProperties
:var subnetProperties = [for subnet in subnets: { name: subnet.name properties: { addressPrefix: subnet.ipAddressRange } }]
Na parte inferior do arquivo, abaixo do loop de módulo
databases
, 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 } }]
Observação
Este exemplo usa o mesmo espaço de endereço para todas as redes virtuais. Normalmente, ao criar várias redes virtuais, você forneceria a elas espaços de endereço diferentes para o caso de eventualmente precisar conectá-las entre si.
Salve as alterações no arquivo.
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
Salve as alterações no arquivo.
Passar as saídas pelo 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 }]
Salve as alterações no arquivo.
Verificar o arquivo Bicep
Depois de concluir todas as alterações anteriores, o arquivo main.bicep deverá 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
}]
O arquivo database.bicep deve ser parecido 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
Caso contrário, copie o exemplo ou ajuste o modelo para que ele corresponda ao exemplo.
Implantar o modelo Bicep no Azure
No terminal do Visual Studio Code, execute o código a seguir para implantar o modelo Bicep no Azure. 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, execute o comando do Azure PowerShell a seguir para implantar o modelo Bicep no Azure. 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
Cuidado
Verifique se você está usando o mesmo logon e senha usados anteriormente, caso contrário, a implantação não será bem-sucedida.
Aguarde até que a implantação seja concluída.
Verificar a implantação
Após a conclusão da implantação, convém verificar se as novas redes virtuais estão implantadas e se elas têm sub-redes configuradas conforme o esperado.
Vá para o portal do Azure e verifique se você está na assinatura da área restrita.
Selecione
[nome do grupo de recursos de área restrita] .Verifique se as redes virtuais foram implantadas nos três locais do Azure.
Selecione a rede virtual denominada
teddybear-eastasia
.Na barra de pesquisa, insira Sub-redes. Em Configurações, selecione Sub-redes.
Verifique se as sub-redes implantadas têm os nomes e os endereços IP que foram especificados no valor padrão do parâmetro
subnets
.Verifique a saída do comando de implantação. Ele deve incluir o nome e o FQDN dos três servidores lógicos que foram implantados, como mostrado aqui:
Vá para o portal do Azure e verifique se você está na assinatura da área restrita.
Selecione
[nome do grupo de recursos de área restrita] .Verifique se as redes virtuais foram implantadas nos três locais do Azure.
Selecione a rede virtual denominada
teddybear-eastasia
.Na barra de pesquisa, insira Sub-redes. Em Configurações, selecione Sub-redes.
Verifique se as sub-redes implantadas têm os nomes e os endereços IP que foram especificados no valor padrão do parâmetro
subnets
.Verifique a saída do comando de implantação. Ele deve incluir o nome e o FQDN dos três servidores lógicos que foram implantados, como mostrado aqui: