Exercício - Implantar recursos condicionalmente

Concluído

Nota

Na primeira vez que você ativar uma área restrita e aceitar os termos, sua conta da Microsoft será associada a um novo diretório do Azure chamado Microsoft Learn Sandbox. Você também é 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 servidor lógico SQL do Azure e um banco de dados. Em seguida, você adicionará configurações de auditoria para garantir que a auditoria esteja habilitada, mas deseja ativá-la somente quando estiver implantando em um ambiente de produção. Para fins de auditoria, você precisa ter uma conta de armazenamento, que também será implantada somente quando estiver implantando recursos em um ambiente de produção.

Durante o processo, você:

  • Crie um arquivo Bicep que define um servidor lógico com um banco de dados.
  • Adicione uma conta de armazenamento e configurações de auditoria SQL, cada uma das quais é implantada com uma condição.
  • Configure uma infraestrutura para seu ambiente de desenvolvimento e verifique o resultado.
  • Reimplante sua infraestrutura em seu ambiente de produção e, em seguida, examine as alterações.

Este exercício usa a extensão Bicep para Visual Studio Code. Certifique-se de que instala esta extensão no Visual Studio Code.

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

  1. Abra o Visual Studio Code.

  2. Crie um novo arquivo chamado main.bicep.

  3. Salve o arquivo vazio para que o Visual Studio Code carregue as ferramentas do Bíceps.

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

  4. Para definir um servidor lógico e um banco de dados, adicione o seguinte conteúdo ao arquivo, juntamente com os parâmetros e variáveis de que esses recursos precisam. Insira o conteúdo você mesmo em vez de copiar e colar para que você possa ver como as ferramentas ajudam você a escrever seus 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 @description decoradores, o que ajuda a torná-los mais fáceis de trabalhar. Observe também que os sqlServerAdministratorLogin parâmetros e sqlServerAdministratorLoginPassword têm o @secure decorador aplicado a eles. Isso informa ao Bicep que esses valores de parâmetro são sensíveis. 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á seu arquivo Bicep para criar essa conta de armazenamento, mas somente quando a auditoria estiver habilitada.

  1. Abaixo das 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. Abaixo das declarações de variáveis, 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 será usada como condição para implantar os recursos de auditoria. Quando você cria uma variável como essa, você torna seu código Bicep mais claro e fácil de ler. Qualquer pessoa que olhe para as condições dos seus recursos compreenderá o que está a acontecer.

    Observe também que a auditStorageAccountName variável usa uma função chamada take(). Os nomes de contas 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 para a conta de armazenamento incluem a if palavra-chave, que especifica uma condição de implantação.

Adicionar configurações de auditoria

  1. Abaixo do recurso de conta de armazenamento que você acabou de adicionar, 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 if condição que a conta de armazenamento. Além disso, as storageEndpoint propriedades 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, porque a conta de armazenamento não pode ser encontrada.

  2. Guarde as alterações ao ficheiro.

Verifique seu arquivo Bicep

Depois de concluir todas as alterações anteriores, o arquivo Bicep deve ter esta aparência:

@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 corresponder ao exemplo.

Implantar o modelo Bicep no Azure

Para implementar este modelo no Azure, tem de iniciar sessão na sua conta do Azure a partir do terminal do Visual Studio Code. Certifique-se de que instalou a CLI do Azure e lembre-se de iniciar sessão com a mesma conta que utilizou para ativar a sandbox.

  1. No menu Terminal, selecione New Terminal (Novo Terminal). A janela do terminal geralmente abre na metade inferior da tela.

  2. Se a janela do terminal exibir bash no lado direito, isso significa que o shell correto já está aberto. Como alternativa, se você vir um ícone de shell bash à direita, você pode selecioná-lo para iniciar o shell.

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

    Se um shell diferente de bash aparecer, selecione a seta suspensa do shell e, em seguida, selecione Git Bash.

    Captura de tela da janela do terminal do Visual Studio Code, com a lista suspensa do shell do terminal mostrada e Git Bash Default selecionado.

  3. No terminal, vá para o diretório onde você salvou seu modelo. Por exemplo, se você salvou seu modelo na pasta de modelos , poderá usar este comando:

    cd templates
    

Instalar o Bicep

Execute o seguinte comando para garantir que você tenha a versão mais recente do Bicep:

az bicep install && az bicep upgrade

Iniciar sessão no Azure

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

    az login
    
  2. No browser que se abre, inicie sessão na sua conta do Azure.

    O terminal de código do Visual Studio exibe uma lista das assinaturas associadas a essa conta.

  3. Defina a assinatura padrão para todos os comandos da CLI do Azure executados nesta sessão.

    az account set --subscription "Concierge Subscription"
    

    Nota

    Se você usou mais de uma área restrita recentemente, o terminal pode exibir mais de uma instância da Assinatura do Concierge. Nesse caso, use as próximas duas etapas para definir uma 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 os IDs da Subscrição de Assistente.

     az account list \
       --refresh \
       --query "[?contains(name, 'Concierge Subscription')].id" \
       --output table
    
  5. Predefina a subscrição através do ID da subscrição. Substitua {o ID da subscrição} pelo ID da Subscrição da Assistente mais recente.

    az account set --subscription {your subscription ID}
    

Definir o grupo de recursos predefinido

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 o padrão para 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, implante o modelo Bicep no Azure executando o código a seguir. Observe que você está definindo explicitamente o location parâmetro como westus3.

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

Para implantar esse modelo no Azure, entre em sua conta do Azure a partir do terminal do Visual Studio Code. Certifique-se de que instalou o Azure PowerShell e inicie sessão na mesma conta que ativou a sandbox.

  1. No menu Terminal, selecione New Terminal (Novo Terminal). A janela do terminal geralmente abre na metade inferior da tela.

  2. Se a janela do terminal exibir pwsh ou powershell no lado direito, isso significa que o shell correto já está aberto. Como alternativa, se você vir um ícone de shell do PowerShell à direita, poderá selecioná-lo para iniciar o shell.

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

    Se um shell diferente de pwsh ou powershell for exibido, selecione a seta suspensa do shell e selecione PowerShell.

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

  3. No terminal, vá para o diretório onde você salvou seu modelo. Por exemplo, se você salvou seu modelo na pasta de modelos , poderá usar este comando:

    Set-Location -Path templates
    

Instalar a CLI do Bíceps

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

Iniciar sessão no Azure com o Azure PowerShell

  1. No terminal de código do Visual Studio, execute o seguinte comando:

    Connect-AzAccount
    

    Um navegador é aberto para que você possa entrar em sua conta do Azure.

  2. Depois de iniciar sessão no Azure, o terminal apresenta uma lista das subscrições associadas a esta conta.

    Se você ativou a área restrita, uma assinatura chamada Assinatura do concierge será exibida. Use-o para o resto do exercício.

  3. Defina a assinatura padrão para todos os comandos do Azure PowerShell executados nesta sessão.

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

    Nota

    Se você usou mais de uma área restrita recentemente, o terminal pode exibir mais de uma instância da Assinatura do Concierge. Nesse caso, use as próximas duas etapas para definir uma 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 o ID de subscrição. A execução do comando a seguir lista suas assinaturas e suas IDs. Concierge SubscriptionProcure e, em seguida, copie o ID da segunda coluna. Parece algo como aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e.

    Get-AzSubscription
    
  5. Altere sua assinatura ativa para a Assinatura do Concierge. Certifique-se de que substitui {O seu ID de subscrição} pelo que copiou.

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

Definir o grupo de recursos predefinido

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 para 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 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 -location westus3

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

Gorjeta

Quando você insere os parâmetros seguros, os valores escolhidos devem seguir certas regras:

  • sqlServerAdministratorLogin não deve ser um nome de login facilmente adivinhável, como admin ou root. Pode conter apenas caracteres alfanuméricos e deve começar com uma letra.
  • sqlServerAdministratorLoginPassword deve ter pelo menos oito caracteres 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, certifique-se de anotar o login e a senha que você digita. Você vai usá-los novamente em breve.

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

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

Verificar a implementaçã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 de área restrita fazendo o seguinte:

    a. Selecione o seu avatar no canto superior direito.
    b. Selecione Trocar diretório. Na lista, selecione o diretório Sandbox do Microsoft Learn.

  2. No painel esquerdo, selecione Grupos de recursos.

  3. Selecione [nome do grupo de recursos do sandbox].

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

    Nota

    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, em seguida, 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 seu browser. Vai verificar as implementações novamente mais tarde.

Reimplantação para o ambiente de produção

Na implantação anterior, o valor padrão para o parâmetro foi usado, o environmentName que significava que ele estava 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, implante o modelo Bicep no Azure executando o seguinte código:

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

No terminal do Visual Studio Code, implante o modelo no Azure executando o seguinte comando do Azure PowerShell:

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

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.

Após um ou dois minutos, a implantação deve ser concluída 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 vá para seu grupo de recursos. Se já tiver o grupo de recursos aberto, selecione Atualizar.

    Você 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 é implantada para auditoria.

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

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

    Captura de ecrã da interface do portal do Azure para o servidor lógico, mostrando o campo de pesquisa com Auditoria introduzido.

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

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