Exercício – implantar vários recursos usando loops

Concluído

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

  1. No Visual Studio Code, crie uma pasta chamada módulos na mesma pasta em que você criou o arquivo main.bicep.

  2. Mova o arquivo main.bicep para a pasta modules que você acabou de criar.

  3. Renomeie o arquivo main.bicep como database.bicep.

Implantar várias instâncias usando um loop de cópia

  1. Crie um arquivo main.bicep para substituir aquele que você acabou de mover e renomear.

  2. 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
    
  3. 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.

  4. 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.

  1. Vá para o portal do Azure e verifique se você está na assinatura da área restrita.

  2. Selecione [nome do grupo de recursos de área restrita].

  3. 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.

    Captura de tela do portal do Azure, mostrando a implantação dos servidores lógicos e bancos de dados em vários locais.

  4. 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.

  1. 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'
    ]
    
  2. Salve as alterações no arquivo.

  3. No terminal Visual Studio Code, reimplante o arquivo executando o seguinte código:

    az deployment group create --template-file main.bicep
    
  1. 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'
    ]
    
  2. Salve as alterações no arquivo.

  3. 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.

  1. 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.

  2. Verifique se o servidor lógico e banco de dados novos foram implantados na região Leste da Ásia.

    Captura de tela do portal do Azure, mostrando a implantação de um servidor lógico e um banco de dados em uma região adicional.