Exercício – Adicionar recursos a uma pilha de implantação
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.
Abra o Visual Studio Code.
Crie um arquivo chamado main.bicep.
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.
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.
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.
No menu Terminal, selecione Novo Terminal. A janela do terminal geralmente é aberta na metade inferior da tela.
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.
Se um shell diferente de bash for exibido, selecione a seta suspensa do shell e selecione Azure Cloud Shell (Bash).
Na lista de shells de terminal, selecione bash.
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
No terminal do Visual Studio Code, entre no Azure executando o seguinte comando:
az login
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.
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
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.
No menu Terminal, selecione Novo Terminal. A janela do terminal geralmente é aberta na metade inferior da tela.
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.
Se aparecer um shell diferente do powershell ou pwsh, selecione a seta da lista de seleção do shell e escolha PowerShell.
Na lista de shells de terminal, selecione powershell ou pwsh.
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
No terminal do Visual Studio Code, entre no Azure executando o seguinte comando:
Connect-AzAccount
No navegador que é aberto, entre em sua conta do Azure.
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.
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.
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
Ele solicita que você insira um valor para
sqlServerAdminUserName
. Crie um nome para o administrador do SQL Server e pressione “Enter”.Ele solicita que você insira um valor para
sqlServerAdminPassword
. Crie uma senha complexa para o administrador do servidor SQL e pressione “Enter”.Aguarde a conclusão da operação de atualização antes de passar para a próxima tarefa.
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
Ele solicita que você insira um valor para
sqlServerAdminUserName
. Crie um nome para o administrador do SQL Server e pressione “Enter”.Ele solicita que você insira um valor para
sqlServerAdminPassword
. Crie uma senha complexa para o administrador do servidor SQL e pressione “Enter”.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
Abra o arquivo main.bicep no Visual Studio Code.
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'
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 } }
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
Abra o arquivo main.bicep no Visual Studio Code.
Altere o nome do SKU do Plano do Serviço de Aplicativo de
F1
paraS1
:// Resource - App Service Plan resource appServicePlan 'Microsoft.Web/serverfarms@2023-12-01' = { name: appServicePlanName location: location sku: { name: 'S1' capacity: 1 } }
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 } ] } } }
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.
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
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”.Ele solicita que você insira um valor para
sqlServerAdminUserName
. Crie um nome para o administrador do SQL Server e pressione “Enter”.Ele solicita que você insira um valor para
sqlServerAdminPassword
. Crie uma senha complexa para o administrador do servidor SQL e pressione “Enter”.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.
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
Ele solicita que você insira um valor para
sqlServerAdminUserName
. Crie um nome para o administrador do SQL Server e pressione “Enter”.Ele solicita que você insira um valor para
sqlServerAdminPassword
. Crie uma senha complexa para o administrador do servidor SQL e pressione “Enter”.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.
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
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" },
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
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" } ],
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
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
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
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