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

Concluído

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

Neste exercício, você cria uma pilha de implantação com escopo para um grupo de recursos que faz referência a um arquivo Bicep. O arquivo define um plano de serviço de aplicativo, um serviço de aplicativo e um banco de dados SQL do Azure. Em seguida, modifique a SKU do plano de serviço de aplicativo e atualize a pilha de implantação. Finalmente, você adiciona um espaço de trabalho existente do Log Analytics e uma nova instância do Application Insights para dar suporte ao monitoramento do aplicativo.

Durante o processo, você:

  • Crie um arquivo Bicep que define sua arquitetura inicial
  • Crie uma pilha de implantação com escopo para um grupo de recursos usando seu arquivo Bicep.
  • Modificar as propriedades de um recurso gerenciado existente
  • Atualize o arquivo Bicep para incluir um espaço de trabalho 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. Certifique-se de que instala esta extensão no Visual Studio Code.

Criar o arquivo Bicep

Nossa primeira etapa é criar um arquivo Bicep que define nossos recursos para usar com a pilha de implantação.

  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 na qual salvar o arquivo.

  4. Adicione o seguinte código Bicep ao ficheiro. Você implanta 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 interpolação de cadeia de caracteres e a uniqueString() função para definir valores de parâmetro padrão. Alguém que implanta esse modelo pode substituir os valores de parâmetro padrão especificando os valores no momento da implantaçã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 dos planos do Serviço de Aplicativo precisam ser exclusivos apenas dentro do grupo de recursos. Essa diferença significa que não é uma preocupação usar o mesmo nome de plano do Serviço de Aplicativo em implantações diferentes, desde que as implantações estejam todas indo para grupos de recursos diferentes.

  5. Guarde as alterações ao ficheiro.

Crie a pilha de implantação e implante seus recursos 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 ter instalado as ferramentas da CLI do Azure.

  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

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 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. Na lista, localize a subscrição que pretende utilizar para este exercício.

    Se você perdeu a lista do login, você pode usar o trecho 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ê executa nesta sessão.

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

Criar um grupo de recursos

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

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

Para implantar esse modelo no Azure, entre em sua conta do Azure a partir do terminal do Visual Studio Code. Certifique-se de ter instalado o Azure PowerShell.

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

    Connect-AzAccount
    
  2. No browser que se abre, inicie sessão na sua conta do Azure.

  3. Obtenha o ID da subscrição que pretende utilizar para este exercício executando o seguinte comando:

    Get-AzSubscription
    

    O ID de subscrição é a segunda coluna. Copie a segunda coluna. Parece algo como aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e.

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

    Set-AzContext -SubscriptionId {Your subscription ID}
    

Criar um grupo de recursos

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

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

Criar a pilha de implantação

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

  1. Para criar a pilha de implantação, execute o seguinte comando do 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, seguido de 'Enter'.

    Uma captura de tela mostrando 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 SQL Server, seguida por 'Enter'.

    Uma captura de tela mostrando a linha de comando da CLI do Azure solicitando que você insira uma senha de administrador do SQL Server.

  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 seguinte comando do 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, seguido de 'Enter'.

    Uma captura de tela mostrando a linha de comando do Azure PowerShell 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 SQL Server, seguida por 'Enter'.

    Uma captura de tela mostrando a linha de comando do Azure PowerShell solicitando que você insira uma senha de administrador do SQL Server.

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

Modifique o arquivo Bicep para adicionar o espaço de trabalho 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 seu 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 ficheiro:

    // 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. Guarde as alterações ao ficheiro.

Modificar o arquivo Bicep para modificar o plano de serviço de aplicativo e o serviço de aplicativo

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

  2. Altere o nome da sku do plano de 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 à 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. Guarde as alterações ao ficheiro.

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 seguinte comando do 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ê recebe uma mensagem informando que a pilha já existe na assinatura atual. Se o valor da ação no parâmetro unmanage for alterado, o aviso alertará você sobre os novos valores. Pressione y, seguido de 'Enter'.

    Uma captura de tela mostrando 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, seguido de 'Enter'.

    Uma captura de tela mostrando 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 SQL Server, seguida por 'Enter'.

    Uma captura de tela mostrando a linha de comando da CLI do Azure solicitando que você insira uma senha de administrador do SQL Server.

  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 de serviço do aplicativo sejam implementadas.

  1. Para atualizar a pilha de implantação, execute o seguinte comando do 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, seguido de 'Enter'.

    Uma captura de tela mostrando a linha de comando do Azure PowerShell 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 SQL Server, seguida por 'Enter'.

    Uma captura de tela mostrando a linha de comando do Azure PowerShell solicitando que você insira uma senha de administrador do SQL Server.

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

Verifique a atualização para a pilha de implantação e os recursos gerenciados

Com a atualização concluída, queremos validar se a sku do plano de serviço de aplicativo está atualizada e se a pilha de implantação está gerenciando o espaço de trabalho existente do Log Analytics e a nova instância do Application Insights.

  1. Para exibir a configuração do plano de serviço de aplicativo, execute o seguinte comando no terminal no Visual Studio Code.

    az appservice plan show \
        --name plan-deposits
        --resource-group rg-depositsApplication
    
  2. Tome nota da seção sku da saída. O plano de serviço do aplicativo agora está no sku S1. Deve ser semelhante à seguinte saída:

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

    az stack group show \
        --resource-group rg-depositsApplication \
        --name stack-deposits
    
  4. Tome nota da secção de recursos da saída. Agora vemos o espaço de trabalho existente do Log Analytics e a nova instância do Application Insights listada como recursos gerenciados. O resultado deve 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 exibir a configuração do plano de serviço de aplicativo, execute o seguinte comando no terminal no Visual Studio Code.

    $plan = Get-AzAppServicePlan `
        -ResourceGroupName rg-depositsApplication `
        -Name plan-deposits
    $sku = $plan.Sku
    $sku
    
  2. Tome nota da saída. O plano de serviço do aplicativo agora está no sku S1. Deve ser semelhante ao seguinte:

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

    Get-AzResourceGroupDeploymentStack `
        -ResourceGroupName rg-depositsApplication `
        -Name stack-deposits
    
  4. Tome nota da secção de recursos da saída. Agora vemos o espaço de trabalho existente do Log Analytics e a nova instância do Application Insights listada como recursos gerenciados. O resultado deve 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