Exercício – implantar recursos condicionalmente

Concluído

Observação

Na primeira vez que você ativar uma área restrita e aceitar os termos, sua conta Microsoft será associada a um novo diretório do Azure chamado Área Restrita do Microsoft Learn. Você também será adicionado a uma assinatura especial chamada Assinatura do Concierge.

Você precisa implantar os recursos da sua empresa de brinquedos em uma variedade de ambientes e deseja usar parâmetros e condições para controlar o que é implantado em cada ambiente.

Neste exercício, você criará um banco de dados e um servidor lógico do SQL do Azure. Em seguida, você adicionará as configurações de auditoria para garantir que a auditoria esteja habilitada, mas deseja que ela seja habilitada somente quando estiver implantando em um ambiente de produção. Para fins de auditoria, você precisa ter uma conta de armazenamento, que também implantará somente quando estiver implantando recursos em um ambiente de produção.

Durante o processo, você vai:

  • Crie um arquivo Bicep que define um servidor lógico com um banco de dados.
  • Adicionar uma conta de armazenamento e configurações de auditoria do SQL, cada uma delas implantada com uma condição.
  • Configurar uma infraestrutura para seu ambiente de desenvolvimento e, em seguida, verificar o resultado.
  • Reimplantar a infraestrutura no ambiente de produção e, em seguida, conferir as alterações.

Este exercício usa a extensão Bicep para Visual Studio Code. É necessário que você instale essa extensão no Visual Studio Code.

Criar um modelo Bicep com um servidor lógico e um banco de dados

  1. Abra o Visual Studio Code.

  2. Crie um arquivo chamado main.bicep.

  3. Salve o arquivo vazio para que Visual Studio Code carregue as ferramentas Bicep.

    Você pode selecionar Arquivo>Salvar Como ou Ctrl+S no Windows (⌘+S no macOS). Lembre-se de onde você salvou o arquivo. Por exemplo, você pode criar uma pasta modelos para salvá-lo.

  4. Para definir um servidor lógico e um banco de dados, adicione o conteúdo a seguir ao arquivo, juntamente com os parâmetros e as variáveis de que esses recursos precisam. Insira o conteúdo por conta própria em vez de copiar e colar, para que você possa ver como o conjunto de ferramentas ajuda a criar arquivos 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'
    }
    
    var sqlServerName = 'teddy${location}${uniqueString(resourceGroup().id)}'
    var sqlDatabaseName = 'TeddyBear'
    
    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
    }
    

    Observe que todos os parâmetros incluem decoradores @description, o que ajuda a facilitar o trabalho com eles. Observe também que os parâmetros sqlServerAdministratorLogin e sqlServerAdministratorLoginPassword têm o decorador @secure aplicado a eles. Isso informa ao Bicep que esses valores de parâmetro são confidenciais. O Azure não imprime valores confidenciais em logs.

Adicionar uma conta de armazenamento

Nas configurações de auditoria para os servidores lógicos, você precisa especificar uma conta de armazenamento para conter os dados de auditoria. Você atualizará o arquivo Bicep para criar essa conta de armazenamento, mas somente quando a auditoria for habilitada.

  1. Sob as declarações de parâmetro, adicione os seguintes parâmetros:

    @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'
    
  2. Sob as declarações de variável, adicione as seguintes variáveis:

    var auditingEnabled = environmentName == 'Production'
    var auditStorageAccountName = take('bearaudit${location}${uniqueString(resourceGroup().id)}', 24)
    

    Observe que você está criando uma variável chamada auditingEnabled, que você usará como a condição para implantar os recursos de auditoria. Ao criar uma variável como essa, você torna seu código Bicep mais claro e fácil de ler. Qualquer pessoa que analisa as condições em seus recursos entenderá o que está acontecendo.

    Observe também que a variável auditStorageAccountName usa uma função chamada take(). Os nomes de conta de armazenamento têm um comprimento máximo de 24 caracteres, portanto, essa função corta o final da cadeia de caracteres para garantir que o nome seja válido.

  3. Na parte inferior do arquivo, abaixo dos recursos, adicione a seguinte definição de recurso para a conta de armazenamento:

    resource auditStorageAccount 'Microsoft.Storage/storageAccounts@2023-05-01' = if (auditingEnabled) {
      name: auditStorageAccountName
      location: location
      sku: {
        name: auditStorageAccountSkuName
      }
      kind: 'StorageV2'  
    }
    

    Observe que as definições da conta de armazenamento incluem a palavra-chave if, que especifica uma condição de implantação.

Adicionar configurações de auditoria

  1. Abaixo do recurso da conta de armazenamento que você acabou de incluir, adicione o seguinte:

    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 : ''
      }
    }
    

    Observe que a definição inclui a mesma condição if que a conta de armazenamento. Além disso, as propriedades storageEndpoint e storageAccountAccessKey usam o operador ternário de ponto de interrogação (?) para garantir que seus valores sejam sempre válidos. Se você não fizer isso, o Azure Resource Manager avaliará os valores de expressão antes de avaliar a condição de implantação do recurso e retornará um erro, pois a conta de armazenamento não poderá ser encontrada.

  2. Salve as alterações no arquivo.

Verificar o arquivo Bicep

Depois de concluir todas as alterações anteriores, o arquivo Bicep deverá ser semelhante a 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 ou ajuste o modelo para corresponder ao exemplo.

Implantar o modelo Bicep no Azure

Para implantar esse modelo no Azure, será necessário entrar em sua conta do Azure do terminal do Visual Studio Code. Verifique se você tem a CLI do Azure instalada e lembre-se de entrar com a mesma conta que usou para ativar a área restrita.

  1. No menu Terminal, selecione Novo Terminal. A janela do terminal geralmente é aberta na metade inferior da tela.

  2. Se o shell mostrado no lado direito da janela do terminal for o bash, o shell correto será aberto e você poderá passar para a próxima seção.

    Captura de tela da janela do terminal do Visual Studio Code com a opção bash mostrada.

  3. Se um shell diferente de bash for exibido, selecione a seta suspensa do shell e selecione Azure Cloud Shell (Bash).

    Captura de tela da janela do terminal do Visual Studio Code, com o menu suspenso do shell do terminal mostrado e o Padrão Git Bash selecionado.

  4. Na lista de shells de terminal, selecione bash.

    Captura de tela da janela do terminal do Visual Studio Code com o terminal do bash selecionado.

  5. No terminal, vá até o diretório no qual você salvou o modelo. Por exemplo, se você salvou o modelo na pasta modelos, use este comando:

    cd templates
    

Instalar o Bicep

Veja se você tem a versão mais recente do Bicep executando o seguinte comando:

az bicep install && az bicep upgrade

Entrar no Azure

  1. No terminal do Visual Studio Code, entre no Azure executando o seguinte comando:

    az login
    
  2. No navegador que é aberto, entre em sua conta do Azure.

    O terminal do Visual Studio Code exibe uma lista das assinaturas associadas a essa conta.

  3. Defina a assinatura padrão para todos os comandos da CLI do Azure que você executar nesta sessão.

    az account set --subscription "Concierge Subscription"
    

    Observação

    Se você usou mais de uma área restrita recentemente, o terminal poderá exibir mais de uma instância da Assinatura do Concierge. Nesse caso, use as duas próximas etapas para definir uma delas como a assinatura padrão. Se o comando anterior tiver sido bem-sucedido e apenas uma Assinatura do Concierge estiver listada, ignore as duas próximas etapas.

  4. Obtenha as IDs da Assinatura do Concierge.

     az account list \
       --refresh \
       --query "[?contains(name, 'Concierge Subscription')].id" \
       --output table
    
  5. Defina a assinatura padrão usando a ID da assinatura. Substitua {sua ID da assinatura} pela ID da Assinatura de Concierge mais recente.

    az account set --subscription {your subscription ID}
    

Definir o grupo de recursos padrão

Ao usar a CLI do Azure, você pode definir o grupo de recursos padrão e omitir o parâmetro do restante dos comandos da CLI do Azure neste exercício. Defina como padrão o grupo de recursos criado para você no ambiente de área restrita.

az configure --defaults group="<rgn>[sandbox resource group name]</rgn>"

Implantar o modelo no Azure usando a CLI do Azure

No terminal do Visual Studio Code, execute o código a seguir para implantar o modelo Bicep no Azure. Observe que você está definindo explicitamente o parâmetro location como westus3.

az deployment group create --template-file main.bicep --parameters location=westus3

Para implantar esse modelo no Azure, entre na sua conta do Azure por meio do terminal do Visual Studio Code. Verifique se você instalou o Azure PowerShell e entre na mesma conta que ativou a área restrita.

  1. No menu Terminal, selecione Novo Terminal. A janela do terminal geralmente é aberta na metade inferior da tela.

  2. Se o shell mostrado no lado direito da janela do terminal for o powershell ou o pwsh, o shell correto será aberto e você poderá passar para a próxima seção.

    Captura de tela da janela do terminal do Visual Studio Code, com a opção pwsh exibida na lista suspensa do shell.

  3. Se aparecer um shell diferente do powershell ou pwsh, selecione a seta da lista de seleção do shell e escolha PowerShell.

    Captura de tela da janela do terminal do Visual Studio Code, com a lista suspensa do shell do terminal exibida e o PowerShell selecionado.

  4. Na lista de shells de terminal, selecione powershell ou pwsh.

    Captura de tela da janela do terminal do Visual Studio Code com o terminal do PowerShell selecionado.

  5. No terminal, vá até o diretório no qual você salvou o modelo. Por exemplo, se você salvou o modelo na pasta modelos, use este comando:

    Set-Location -Path templates
    

Instalar a CLI do Bicep

Para usar o Bicep no Azure PowerShell, instale a CLI do Bicep.

Entrar no Azure usando o Azure PowerShell

  1. No terminal do Visual Studio Code, execute o seguinte comando:

    Connect-AzAccount
    

    Um navegador será aberto para que seja possível entrar na sua conta do Azure.

  2. Após entrar no Azure, o terminal exibirá uma lista das assinaturas associadas a essa conta.

    Se você ativou a área restrita, será exibida uma assinatura chamada Assinatura do Concierge. Use-a no restante do exercício.

  3. Defina a assinatura padrão para todos os comandos do Azure PowerShell que você executar nesta sessão.

    $context = Get-AzSubscription -SubscriptionName 'Concierge Subscription'
    Set-AzContext $context
    

    Observação

    Se você usou mais de uma área restrita recentemente, o terminal poderá exibir mais de uma instância da Assinatura do Concierge. Nesse caso, use as duas próximas etapas para definir uma delas como a assinatura padrão. Se o comando anterior tiver sido bem-sucedido e apenas uma Assinatura do Concierge estiver listada, ignore as duas próximas etapas.

  4. Obtenha a ID da assinatura. Executar o comando a seguir lista as suas assinaturas e as respectivas IDs. Procure Concierge Subscription e copie a ID da segunda coluna. É algo semelhante a cf49fbbc-217c-4eb6-9eb5-a6a6c68295a0.

    Get-AzSubscription
    
  5. Altere a sua assinatura ativa para Assinatura de Concierge. Lembre-se de substituir {Sua ID da assinatura} por aquela que você copiou.

    $context = Get-AzSubscription -SubscriptionId {Your subscription ID}
    Set-AzContext $context
    

Definir o grupo de recursos padrão

Você pode definir o grupo de recursos padrão e omitir o parâmetro do restante dos comandos do Azure PowerShell neste exercício. Defina esse padrão como o grupo de recursos criado para você no ambiente de área restrita.

Set-AzDefault -ResourceGroupName <rgn>[sandbox resource group name]</rgn>

Implantar o modelo no Azure usando o Azure PowerShell

No terminal do Visual Studio Code, implante o modelo no Azure ao executar o comando do Azure PowerShell a seguir. 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 -location westus3

Você será solicitado a inserir os valores dos parâmetros sqlServerAdministratorLogin e sqlServerAdministratorLoginPassword ao executar a implantação.

Dica

Ao inserir os parâmetros seguros, os valores escolhidos precisam seguir determinadas regras:

  • sqlServerAdministratorLogin não pode ser um nome de logon fácil de adivinhar, como admin ou root. Ele pode conter apenas caracteres alfanuméricos e precisa começar com uma letra.
  • sqlServerAdministratorLoginPassword precisa ter pelo menos oito caracteres de comprimento e incluir letras minúsculas, letras maiúsculas, números e símbolos. Para obter mais informações sobre a complexidade da senha, consulte a política de senha do SQL Azure.

Se os valores de parâmetro não atenderem aos requisitos, o SQL do Azure não implantará seu servidor lógico.

Além disso, tome nota do logon e da senha que você inserir. Você os usará novamente em breve.

Como você não especificou um valor para o parâmetro environmentName, o valor padrão Development é usado.

Aguarde a conclusão da implantação. Se sua implantação falhar com uma mensagem informando que um local não está aceitando a criação de novos servidores do Banco de Dados SQL do Azure no Windows, selecione uma região diferente como eastus ou eastus2.

Verificar a implantação

Use o portal do Azure para inspecionar os recursos que você implanta e para inspecionar os resultados de cada implantação.

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

    a. Selecione seu avatar no canto superior direito.
    b. Selecione Mudar diretório. Na lista, selecione o diretório Área restrita do Microsoft Learn.

  2. No painel esquerdo, selecione Grupos de recursos.

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

  4. Na seção Visão geral, você vê que uma implantação foi bem-sucedida. Você também pode ver que um servidor lógico e um banco de dados SQL estão implantados, mas a conta de armazenamento para auditoria não está implantada.

    Observação

    A conta de armazenamento com um nome que começa com cloudshell não está relacionada à sua implantação e foi criada pela área restrita do Learn.

    Captura de tela do painel de visão geral do grupo de recursos do portal do Azure, com uma seção exibindo uma implantação bem-sucedida.

  5. Ao lado de Implantações, selecione 1 Êxito para ver os detalhes da implantação.

    Captura de tela do painel de visão geral do grupo de recursos do portal do Azure, exibindo detalhes adicionais da implantação bem-sucedida.

  6. Selecione a implantação chamada principal para ver quais recursos foram implantados e selecione Detalhes da implantação para expandi-la.

    Nesse caso, um servidor lógico e um banco de dados SQL são implantados. Observe que a conta de armazenamento e as configurações de auditoria não estão na lista de recursos.

    Captura de tela do painel de visão geral do grupo de recursos do portal do Azure para a implantação específica, com um servidor lógico e um recurso de banco de dados listados.

  7. Deixe a página aberta no navegador. Você verificará as implantações novamente mais tarde.

Reimplantar para o ambiente de produção

Na implantação anterior, o valor padrão do parâmetro environmentName foi usado, o que significa que ele foi definido como Development.

Agora, você definirá explicitamente o valor do parâmetro como Production. Você espera que, ao fazer essa alteração, a conta de armazenamento para fins de auditoria seja implantada e a auditoria seja habilitada no servidor lógico.

Implantar o modelo para o ambiente de produção

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 --parameters environmentName=Production location=westus3

No terminal do Visual Studio Code, execute o seguinte comando do Azure PowerShell para implantar o modelo no Azure:

New-AzResourceGroupDeployment -TemplateFile main.bicep -environmentName Production -location westus3

Cuidado

Verifique se você está usando o mesmo logon e senha usados anteriormente, caso contrário, a implantação não será bem-sucedida.

Após um ou dois minutos, a implantação deve ser finalizada com êxito.

Verificar a reimplantação

Para concluir este exercício, verifique se a reimplantação foi concluída com êxito e se a auditoria foi habilitada.

  1. Retorne ao portal do Azure e acesse seu grupo de recursos. Se você já está com o grupo de recursos aberto, selecione Atualizar.

    Você deve ver que uma conta de armazenamento adicional foi implantada para fins de auditoria.

    Captura de tela do painel de visão geral do grupo de recursos do portal do Azure, mostrando que uma conta de armazenamento está implantada para auditoria.

  2. Selecione o servidor lógico (procure pelo recurso com o tipo servidor SQL).

  3. No campo de pesquisa, insira Auditoria. Em Segurança, selecione Auditoria.

    Captura de tela da interface do portal do Azure para o servidor lógico, mostrando o campo de pesquisa com o texto Auditoria inserido.

  4. Verifique se a auditoria está habilitada para este servidor lógico.

    Captura de tela da interface do portal do Azure para o servidor lógico, mostrando que a configuração de auditoria está habilitada.