Adicionar recursos a uma pilha de implantação
O aplicativo de depósitos continua a evoluir durante o desenvolvimento. A equipe está adicionando recursos e testando recursos diariamente. A observabilidade está sendo adicionada ao aplicativo com um workspace do Log Analytics existente e uma nova instância do Application Insights. Você deseja continuar a gerenciar os recursos como uma única unidade atômica. Você precisa saber mais sobre como adicionar recursos novos e existentes a uma pilha de implantação.
Nesta unidade, você aprenderá a adicionar recursos novos e existentes a uma pilha de implantação como recursos gerenciados.
Observação
Os comandos nesta unidade são mostrados para ilustrar conceitos. Não execute os comandos ainda. Você praticará o que aprendeu aqui em breve.
Adicionar um recurso existente
Os recursos que um aplicativo usa alteram com o tempo. Como podemos atualizar uma pilha de implantação para incluir um recurso já existente no Azure?
O Bicep permite que você defina um recurso que já existe no Azure. Definir um recurso existente é semelhante à definir um novo recurso, com pequenas diferenças. Por exemplo, você pode definir um recurso existente em uma declaração de recurso usando a palavra-chave existing
:
resource logAnalyticsWorkspace 'Microsoft.OperationsManagement/solutions@2015-11-01-preview' existing = {
name: 'log-deposits'
}
Quando estamos adicionando um recurso existente como um recurso gerenciado a uma pilha de implantação, não precisamos usar essa palavra-chave existing
. Precisamos simplesmente definir o recurso existente em nosso arquivo Bicep, modelo ARM JSON ou especificação de modelo. No final, a pilha de implantação gerencia o recurso existente.
Vamos considerar nosso arquivo Bicep da última unidade. Nosso arquivo define um plano do serviço de aplicativo, um aplicativo Web e um servidor e banco de dados SQL do Azure. Queremos adicionar um workspace do Log Analytics existente à nossa pilha de implantação. O workspace está no mesmo grupo de recursos em que existem nossos recursos gerenciados.
Para adicionar o workspace do Log Analytics existente, precisamos adicionar sua definição ao nosso arquivo Bicep. Observe que não precisamos incluir nenhum código que descreva o workspace como um recurso existente.
// 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'
@description('The name of the Log Analytics Workspace.')
var logAnalyticsWorkspaceName = 'log-deposits'
// Resource - App Service Plan
resource appServicePlan 'Microsoft.Web/serverfarms@2023-12-01' = {
name: appServicePlanName
location: location
sku: {
name: 'S1'
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'
}
}
// Resource - Log Analytics Workspace
resource logAnalyticsWorkspace 'Microsoft.OperationalInsights/workspaces@2023-09-01' = {
name: logAnalyticsWorkspaceName
location: location
properties: {
retentionInDays: 30
sku: {
name: 'PerGB2018'
}
}
}
Com o arquivo Bicep modificado, queremos atualizar a pilha de implantação para que as alterações feitas nos recursos do arquivo Bicep sejam implementadas.
Para atualizar uma pilha de implantação usando a CLI do Azure, use o comando.az stack group create
.
az stack group create \
--name stack-deposits \
--resource-group rg-depositsApplication \
--template-file ./main.bicep \
--action-on-unmanage detachAll \
--deny-settings-mode none
Com o arquivo Bicep modificado, queremos atualizar a pilha de implantação para que as alterações feitas nos recursos do arquivo Bicep sejam implementadas.
Para atualizar uma pilha de implantação usando o Azure PowerShell, use o comando.Set-AzResourceGroupDeploymentStack
.
Set-AzResourceGroupDeploymentStack `
-Name stack-deposits `
-ResourceGroupName rg-depositsApplication `
-TemplateFile ./main.bicep `
-ActionOnUnmanage DetachAll `
-DenySettingsMode None
Adicionar um novo recurso gerenciado
O processo de adicionar um novo recurso a uma pilha de implantação é idêntico ao de adicionar um recurso existente à pilha. Precisamos simplesmente definir o recurso existente em nosso arquivo Bicep, modelo ARM JSON ou especificação de modelo. No final, a pilha de implantação gerencia o novo recurso.
Vamos considerar o nosso arquivo Bicep da seção anterior. Nosso arquivo agora define um plano do serviço de aplicativo, um serviço de aplicativo, um servidor e banco de dados SQL do Azure e um workspace do Log Analytics. Queremos adicionar uma nova instância do Application Insights à nossa pilha de implantação e configurar o serviço de aplicativo para usar a instância. Para adicionar a nova instância do Application Insights, precisamos adicionar sua definição ao nosso arquivo Bicep e atualizar o serviço de aplicativo para usar a nova instância.
// 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 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'
// Resource - App Service Plan
resource appServicePlan 'Microsoft.Web/serverfarms@2023-12-01' = {
name: appServicePlanName
location: location
sku: {
name: 'S1'
capacity: 1
}
}
// 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
}
]
}
}
}
// 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'
}
}
// 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
}
}
Com o arquivo Bicep modificado, queremos atualizar a pilha de implantação para que as alterações feitas nos recursos do arquivo Bicep sejam implementadas.
Para atualizar uma pilha de implantação usando a CLI do Azure, use o comando.az stack group create
.
az stack group create \
--name stack-deposits \
--resource-group rg-depositsApplication \
--template-file ./main.bicep \
--action-on-unmanage detachAll \
--deny-settings-mode none
Observação
A CLI do Azure não tem um comando dedicado para atualizar uma pilha de implantação. Use o comando create para atualizar a pilha.
Ao executar uma atualização na pilha, você recebe uma mensagem informando que a pilha já existe na assinatura atual. Se o valor do parâmetro de ação não gerenciada for alterado, o aviso alertará você sobre os novos valores.
Com o arquivo Bicep modificado, queremos atualizar a pilha de implantação para que as alterações feitas nos recursos do arquivo Bicep sejam implementadas.
Para atualizar uma pilha de implantação usando o Azure PowerShell, use o comando.Set-AzResourceGroupDeploymentStack
.
Set-AzResourceGroupDeploymentStack `
-Name stack-deposits `
-ResourceGroupName rg-depositsApplication `
-TemplateFile ./main.bicep `
-ActionOnUnmanage DetachAll `
-DenySettingsMode None
Como você pode ver, o processo de adicionar um recurso existente ou um novo recurso é o mesmo.