Exercício – implantar vários recursos usando loops
Até agora, seu modelo Bicep implantou apenas um servidor lógico do SQL do Azure, com as configurações de auditoria incluídas para seu ambiente de produção. Agora você precisa implantar vários servidores lógicos, um para cada região em que a sua empresa está iniciando o novo urso inteligente.
Neste exercício, você estenderá o código Bicep criado anteriormente para que você possa implantar instâncias de seus bancos de dados em várias regiões do Azure.
Durante o processo, você vai:
- Mova o código Bicep existente para um módulo.
- Crie um arquivo Bicep com um loop de cópia para implantar os recursos do módulo várias vezes.
- Implante o arquivo Bicep e verifique a implantação dos recursos.
- Modifique o parâmetro para adicionar um local adicional, reimplante o arquivo e verifique se os novos recursos foram implantados.
Mover recursos para um módulo
No Visual Studio Code, crie uma pasta chamada módulos na mesma pasta em que você criou o arquivo main.bicep.
Mova o arquivo main.bicep para a pasta modules que você acabou de criar.
Renomeie o arquivo main.bicep como database.bicep.
Implantar várias instâncias usando um loop de cópia
Crie um arquivo main.bicep para substituir aquele que você acabou de mover e renomear.
Abra o novo arquivo main.bicep e adicione os seguintes parâmetros:
@description('The Azure regions into which the resources should be deployed.') param locations array = [ 'westeurope' 'eastus2' ] @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
Sob as declarações de parâmetro, adicione a seguinte declaração de módulo:
module databases 'modules/database.bicep' = [for location in locations: { name: 'database-${location}' params: { location: location sqlServerAdministratorLogin: sqlServerAdministratorLogin sqlServerAdministratorLoginPassword: sqlServerAdministratorLoginPassword } }]
Observe que a declaração do módulo é um loop sobre todos os valores no parâmetro de matriz
locations
.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'
]
@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
module databases 'modules/database.bicep' = [for location in locations: {
name: 'database-${location}'
params: {
location: location
sqlServerAdministratorLogin: sqlServerAdministratorLogin
sqlServerAdministratorLoginPassword: sqlServerAdministratorLoginPassword
}
}]
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 : ''
}
}
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 seguinte código para implantar o modelo Bicep no Azure:
az deployment group create --template-file main.bicep
No terminal do Visual Studio Code, execute o seguinte comando do Azure PowerShell para implantar o modelo Bicep no Azure:
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, você deseja verificar se o servidor lógico e os banco de dados novos estão implantados e se eles estão localizados nas regiões corretas do Azure.
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 o servidor lógico e banco de dados novos estão localizados na região Leste dos EUA 2, que você especificou no valor padrão do parâmetro
locations
.Deixe a página aberta no navegador. Você verificará as implantações novamente mais tarde.
Atualizar e reimplantar o modelo no Azure com um local adicional para um servidor lógico
A equipe do brinquedo de urso está prestes a lançá-lo novamente, desta vez na Ásia. A equipe está solicitando que você implante um novo servidor e um novo banco de dados na região Leste da Ásia. Para fazer isso, você precisa atualizar o parâmetro Bicep e reimplantar o modelo.
Retorne ao Visual Studio Code. Na parte superior do arquivo main.bicep, adicione um novo valor à matriz
locations
:@description('The Azure regions into which the resources should be deployed.') param locations array = [ 'westeurope' 'eastus2' 'eastasia' ]
Salve as alterações no arquivo.
No terminal Visual Studio Code, reimplante o arquivo executando o seguinte código:
az deployment group create --template-file main.bicep
Retorne ao Visual Studio Code. Na parte superior do arquivo main.bicep, adicione um novo valor à matriz
locations
:@description('The Azure regions into which the resources should be deployed.') param locations array = [ 'westeurope' 'eastus2' 'eastasia' ]
Salve as alterações no arquivo.
No terminal Visual Studio Code, reimplante o arquivo executando o seguinte código:
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 reimplantação
Agora que reimplantou os recursos, você deseja verificar se os recursos adicionais do servidor lógico e do banco de dados foram criados na região Leste da Ásia.
Retorne ao portal do Azure e selecione o grupo de recursos
[nome do grupo de recursos da área restrita] . Se necessário, selecione Atualizar para ver os recursos implantados recentemente.Verifique se o servidor lógico e banco de dados novos foram implantados na região Leste da Ásia.