Exercício – Adicionar recursos a uma pilha de implantação

Concluído

Você está no sprint 3 do novo aplicativo de depósitos. Recentemente, a equipe de depósitos solicitou alterações em alguns dos serviços do Azure em uso. Eles também solicitaram a criação de outros serviços necessários para dar suporte ao aplicativo.

Neste exercício, você cria uma pilha de implantação com escopo de um grupo de recursos que faz referência a um arquivo Bicep. O arquivo define um Plano do Serviço de Aplicativo, um serviço de aplicativo e um banco de dados SQL do Azure. Em seguida, você vai modificar o SKU do Plano do Serviço de Aplicativo e atualizar a pilha de implantação. Por fim, você vai adicionar um workspace existente do Log Analytics e uma nova instância do Application Insights para dar suporte ao monitoramento do aplicativo.

Durante o processo, você vai:

  • Criar um arquivo Bicep que define sua arquitetura inicial
  • Criar uma pilha de implantação com escopo para um grupo de recursos usando o arquivo Bicep.
  • Modificar as propriedades de um recurso gerenciado existente
  • Atualizar o arquivo Bicep para incluir um workspace existente do Log Analytics e uma nova instância do Application Insights
  • Atualizar a pilha de implantação para implantar os recursos gerenciados
  • Valide os recursos gerenciados da pilha de implantação.

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 o arquivo Bicep

Nossa primeira etapa é criar um arquivo Bicep que defina os recursos a serem usados com a pilha de implantação.

  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 do local em que salvou o arquivo. Por exemplo, você pode criar uma pasta de modelos para salvar o arquivo.

  4. Adicione o código do Bicep a seguir ao arquivo. Você vai implantar o modelo em breve.

    // Parameters
    @description('The location for all resources.')
    param location string = 'eastus'
    
    @description('The name of the SQL database.')
    param sqlDatabaseName string = 'sqldb-${uniqueString(resourceGroup().id)}'
    
    @description('The password of the admin user.')
    param sqlServerAdminUserName string
    
    @description('The name of the admin user.')
    @secure()
    param sqlServerAdminPassword string
    
    @description('The name of the SQL server.')
    param sqlServerName string = 'sql-${uniqueString(resourceGroup().id)}'
    
    @description('The name of the web application.')
    param webApplicationName string = 'webapp-${uniqueString(resourceGroup().id)}'
    
    // Variables
    @description('The name of the app service plan.')
    var appServicePlanName = 'plan-deposits'
    
    // Resource - App Service Plan
    resource appServicePlan 'Microsoft.Web/serverfarms@2023-12-01' = {
      name: appServicePlanName
      location: location
      sku: {
        name: 'F1'
        capacity: 1
      }
    }
    
    // Resource - Web App
    resource webApplication 'Microsoft.Web/sites@2023-12-01' = {
      name: webApplicationName
      location: location
      properties: {
        serverFarmId: appServicePlan.id  
      }
    }
    
    // Resource - SQL Server
    resource sqlServer 'Microsoft.Sql/servers@2021-11-01' ={
      name: sqlServerName
      location: location
      properties: {
        administratorLogin: sqlServerAdminUserName
        administratorLoginPassword: sqlServerAdminPassword
      }
    }
    
    // Resource - SQL Database
    resource sqlServerDatabase 'Microsoft.Sql/servers/databases@2021-11-01' = {
      parent: sqlServer
      name: sqlDatabaseName
      location: location
      sku: {
        name: 'Standard'
        tier: 'Standard'
      }
    }
    

    Observe que você está usando expressões que incluem a interpolação de cadeia de caracteres e a função uniqueString() para definir valores de parâmetro padrão. Alguém que esteja implantando esse modelo pode substituir os valores de parâmetro padrão, especificando os valores no momento da implementação, mas não pode substituir os valores das variáveis.

    Observe também que você está usando uma variável para o nome do Plano do Serviço de Aplicativo, mas está usando parâmetros para os outros nomes. As contas de armazenamento e os aplicativos do Serviço de Aplicativo precisam de nomes globalmente exclusivos, mas os nomes do Plano do Serviço de Aplicativo precisam ser exclusivos apenas dentro do grupo de recursos deles. Essa diferença significa que não é uma preocupação usar o mesmo nome de Plano do Serviço de Aplicativo em diferentes implantações, desde que todas as implantações estejam indo para grupos de recursos distintos.

  5. Salve as alterações no arquivo.

Criar a pilha de implantação e implantar seus recursos 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ê instalou as ferramentas da CLI do Azure.

  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 usando a CLI do 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. Na lista, encontre a assinatura que deseja usar para este exercício.

    Caso você tenha perdido a lista da inscrição, use o snippet a seguir para listar suas assinaturas novamente.

    az account list --output table
    
  4. Defina a assinatura padrão para todos os comandos da CLI do Azure que você executar nesta sessão.

    az account set --subscription "Your Subscription Name or ID"
    

Criar um grupo de recursos

Precisamos criar um grupo de recursos para a pilha de implantação e os recursos gerenciados. Para criar um grupo de recursos, execute o comando a seguir no terminal no Visual Studio Code.

az group create \
    --name rg-depositsApplication \
    --location eastus

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.

  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, entre no Azure executando o seguinte comando:

    Connect-AzAccount
    
  2. No navegador que é aberto, entre em sua conta do Azure.

  3. Obtenha a ID da assinatura que deseja usar para este exercício executando o seguinte comando:

    Get-AzSubscription
    

    A ID da assinatura será a segunda coluna. Copie a segunda coluna. É semelhante a aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e.

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

    Set-AzContext -SubscriptionId {Your subscription ID}
    

Criar um grupo de recursos

Precisamos criar um grupo de recursos para a pilha de implantação e os recursos gerenciados. Para criar um grupo de recursos, execute o comando a seguir no terminal no Visual Studio Code.

New-AzResourceGroup `
    -Name rg-depositsApplication `
    -Location eastus

Criar a pilha de implantação

Em seguida, precisamos criar a pilha de implantação com escopo para o grupo de recursos criado recentemente. Para criar a pilha de implantação, execute o comando a seguir no terminal no Visual Studio Code.

  1. Para criar a pilha de implantação, execute o comando a seguir no terminal no Visual Studio Code.

    az stack group create \
        --name stack-deposits \
        --resource-group rg-depositsApplication \
        --template-file ./main.bicep \
        --action-on-unmanage detachAll \
        --deny-settings-mode none
    
  2. Ele solicita que você insira um valor para sqlServerAdminUserName. Crie um nome para o administrador do SQL Server e pressione “Enter”.

    Captura de tela que mostra a linha de comando da CLI do Azure solicitando que você insira um nome de usuário de administrador do SQL Server.

  3. Ele solicita que você insira um valor para sqlServerAdminPassword. Crie uma senha complexa para o administrador do servidor SQL e pressione “Enter”.

    Captura de tela que mostra a linha de comando da CLI do Azure solicitando que você insira uma senha de administrador do servidor SQL.

  4. Aguarde a conclusão da operação de atualização antes de passar para a próxima tarefa.

  1. Para criar a pilha de implantação, execute o comando a seguir no terminal no Visual Studio Code.

    New-AzResourceGroupDeploymentStack `
        -Name stack-deposits `
        -ResourceGroupName rg-depositsApplication `
        -TemplateFile ./main.bicep `
        -ActionOnUnmanage DetachAll `
        -DenySettingsMode None
    
  2. Ele solicita que você insira um valor para sqlServerAdminUserName. Crie um nome para o administrador do SQL Server e pressione “Enter”.

    Captura de tela que mostra a linha de comando do Azure PowerShell solicitando que você insira um nome de usuário de administrador do servidor SQL.

  3. Ele solicita que você insira um valor para sqlServerAdminPassword. Crie uma senha complexa para o administrador do servidor SQL e pressione “Enter”.

    Captura de tela que mostra a linha de comando do Azure PowerShell solicitando que você insira uma senha de administrador do servidor SQL.

  4. Aguarde a conclusão da operação de atualização antes de passar para a próxima tarefa.

Modificar o arquivo Bicep para adicionar o workspace existente do Log Analytics e uma nova instância do Application Insights

  1. Abra o arquivo main.bicep no Visual Studio Code.

  2. Adicione o código realçado à seção de variáveis do arquivo:

    // Variables
    @description('The name of the Application Insights instance.')
    var applicationInsightsName = 'appinsights-deposits'
    
    @description('The name of the app service plan.')
    var appServicePlanName = 'plan-deposits'
    
    @description('The name of the Log Analytics Workspace.')
    var logAnalyticsWorkspaceName = 'log-deposits'
    
  3. Adicione o seguinte código à parte inferior do arquivo:

    // Resource - Log Analytics Workspace
    resource logAnalyticsWorkspace 'Microsoft.OperationalInsights/workspaces@2023-09-01' = {
      name: logAnalyticsWorkspaceName
      location: location
      properties: {
        retentionInDays: 30
        sku: {
          name: 'PerGB2018'
        }
      }
    }
    
    // Resource - Application Insights
    resource applicationInsights 'Microsoft.Insights/components@2020-02-02' = {
      name: applicationInsightsName
      location: location
      kind: 'web'
      properties: {
        Application_Type: 'web'
        WorkspaceResourceId: logAnalyticsWorkspace.id
      }
    }
    
  4. Salve as alterações no arquivo.

Modificar o arquivo Bicep para modificar o Plano do Serviço de Aplicativo e o Serviço de Aplicativo

  1. Abra o arquivo main.bicep no Visual Studio Code.

  2. Altere o nome do SKU do Plano do Serviço de Aplicativo de F1 para S1:

    // Resource - App Service Plan
    resource appServicePlan 'Microsoft.Web/serverfarms@2023-12-01' = {
      name: appServicePlanName
      location: location
      sku: {
        name: 'S1'
        capacity: 1
      }
    }
    
  3. Adicione o código realçado para conexão na instância do Application Insights:

    // Resource - Web App
    resource webApplication 'Microsoft.Web/sites@2023-12-01' = {
      name: webApplicationName
      location: location
      properties: {
        serverFarmId: appServicePlan.id
        siteConfig: {
          appSettings: [
            {
              name: 'APPINSIGHTS_INSTRUMENTATIONKEY'
              value: applicationInsights.properties.InstrumentationKey
            }     
          ]
        }    
      }
    }
    
  4. Salve as alterações no arquivo.

Atualizar a pilha de implantação

Com o arquivo Bicep modificado, queremos atualizar a pilha de implantação para que as alterações feitas nos recursos no arquivo Bicep sejam implementadas.

  1. Para atualizar a pilha de implantação, execute o comando a seguir no terminal no Visual Studio Code.

    az stack group create \
        --name stack-deposits \
        --resource-group rg-depositsApplication \
        --template-file ./main.bicep \
        --action-on-unmanage detachAll \
        --deny-settings-mode none
    
  2. Você receberá uma mensagem informando que a pilha já existe na assinatura atual. Se o valor do parâmetro action on unmanage for alterado, o aviso alertará você sobre os novos valores. Pressione y e, em seguida, “Enter”.

    Captura de tela que mostra a linha de comando da CLI do Azure avisando que a pilha de implantação já existe.

  3. Ele solicita que você insira um valor para sqlServerAdminUserName. Crie um nome para o administrador do SQL Server e pressione “Enter”.

    Captura de tela que mostra a linha de comando da CLI do Azure solicitando que você insira um nome de usuário de administrador do SQL Server.

  4. Ele solicita que você insira um valor para sqlServerAdminPassword. Crie uma senha complexa para o administrador do servidor SQL e pressione “Enter”.

    Captura de tela que mostra a linha de comando da CLI do Azure solicitando que você insira uma senha de administrador do servidor SQL.

  5. Aguarde a conclusão da operação de atualização antes de passar para a próxima tarefa.

Com o arquivo Bicep modificado, queremos atualizar a pilha de implantação para que as alterações feitas no Plano do Serviço de Aplicativo sejam implementadas.

  1. Para atualizar a pilha de implantação, execute o comando a seguir no terminal no Visual Studio Code.

    Set-AzResourceGroupDeploymentStack `
        -Name stack-deposits `
        -ResourceGroupName rg-depositsApplication `
        -TemplateFile ./main.bicep `
        -ActionOnUnmanage DetachAll `
        -DenySettingsMode none
    
  2. Ele solicita que você insira um valor para sqlServerAdminUserName. Crie um nome para o administrador do SQL Server e pressione “Enter”.

    Captura de tela que mostra a linha de comando do Azure PowerShell solicitando que você insira um nome de usuário de administrador do servidor SQL.

  3. Ele solicita que você insira um valor para sqlServerAdminPassword. Crie uma senha complexa para o administrador do servidor SQL e pressione “Enter”.

    Captura de tela que mostra a linha de comando do Azure PowerShell solicitando que você insira uma senha de administrador do servidor SQL.

  4. Aguarde a conclusão da operação de atualização antes de passar para a próxima tarefa.

Verificar a atualização da pilha de implantação e dos recursos gerenciados

Com a atualização concluída, queremos validar se o SKU do Plano do Serviço de Aplicativo está atualizado e se a pilha de implantação está gerenciando o workspace existente do Log Analytics e a nova instância do Application Insights.

  1. Para ver a configuração do Plano do Serviço de Aplicativo, execute o comando a seguir no terminal no Visual Studio Code.

    az appservice plan show \
        --name plan-deposits
        --resource-group rg-depositsApplication
    
  2. Observe a seção do SKU da saída. O Plano do Serviço de Aplicativo já está no SKU S1. Ele deverá ser semelhante à seguinte saída:

    "sku": {
        "capacity": 1,
        "family": "S",
        "name": "S1",
        "size": "S1",
        "tier": "Standard"
    },
    
  3. Para ver a configuração da pilha de implantação, execute o comando a seguir no terminal no Visual Studio Code.

    az stack group show \
        --resource-group rg-depositsApplication \
        --name stack-deposits
    
  4. Observe a seção de recursos da saída. Agora vemos o workspace existente do Log Analytics e a nova instância do Application Insights listada como recursos gerenciados. O resultado será semelhante à seguinte saída:

    "resources": [
      {
        "denyStatus": "none",
        "id": "/subscriptions/./resourceGroups/rg-depositsApplication/././servers/sql-brpdm7iotbwjm",
        "resourceGroup": "rg-depositsApplication",
        "status": "managed"
      },
      {
        "denyStatus": "none",
        "id": "/subscriptions/./resourceGroups/rg-depositsApplication/././servers/sql-brpdm7iotbwjm/databases/sqldb-brpdm7iotbwjm",
        "resourceGroup": "rg-depositsApplication",
        "status": "managed"
      },
      {
        "denyStatus": "none",
        "id": "/subscriptions/./resourceGroups/rg-depositsApplication/././serverfarms/plan-deposits",
        "resourceGroup": "rg-depositsApplication",
        "status": "managed"
      },
      {
        "denyStatus": "none",
        "id": "/subscriptions/./resourceGroups/rg-depositsApplication/././sites/webapp-brpdm7iotbwjm",
        "resourceGroup": "rg-depositsApplication",
        "status": "managed"
      },
      {
        "denyStatus": "none",
        "id": "/subscriptions/./resourceGroups/rg-depositsApplication/././components/appinsights-deposits",
        "resourceGroup": "rg-depositsApplication",
        "status": "managed"
      },
      {
        "denyStatus": "none",
        "id": "/subscriptions/./resourceGroups/rg-depositsApplication/././workspaces/log-deposits",
        "resourceGroup": "rg-depositsApplication",
        "status": "managed"
      }
    ],
    
  1. Para ver a configuração do Plano do Serviço de Aplicativo, execute o comando a seguir no terminal no Visual Studio Code.

    $plan = Get-AzAppServicePlan `
        -ResourceGroupName rg-depositsApplication `
        -Name plan-deposits
    $sku = $plan.Sku
    $sku
    
  2. Observe a saída. O Plano do Serviço de Aplicativo já está no SKU S1. Ele será semelhante ao seguinte:

    Name         : S1
    Tier         : Standard
    Size         : S1
    Family       : S
    Capacity     : 1
    
  3. Para ver a configuração da pilha de implantação, execute o comando a seguir no terminal no Visual Studio Code.

    Get-AzResourceGroupDeploymentStack `
        -ResourceGroupName rg-depositsApplication `
        -Name stack-deposits
    
  4. Observe a seção de recursos da saída. Agora vemos o workspace existente do Log Analytics e a nova instância do Application Insights listada como recursos gerenciados. O resultado será semelhante à seguinte saída:

    Resources                     : /subscriptions/./resourceGroups/rg-depositsApplication/././servers/                        sql-brpdm7iotbwjm
                                    /subscriptions/./resourceGroups/rg-depositsApplication/././servers/sql-brpdm7iotbwjm/databases/sqldb-brpdm7iotbwjm
                                    /subscriptions/./resourceGroups/rg-depositsApplication/././serverfarms/plan-deposits
                                    /subscriptions/./resourceGroups/rg-depositsApplication/././sites/webapp-brpdm7iotbwjm
                                    /subscriptions/./resourceGroups/rg-depositsApplication/././components/appinsights-deposits
                                    /subscriptions/./resourceGroups/rg-depositsApplication/././workspaces/log-deposits