Adicionar recursos a uma pilha de implantação
A aplicação de depósitos continua a evoluir ao longo do desenvolvimento. A equipe está adicionando recursos e testando recursos diariamente. A observabilidade está sendo adicionada ao aplicativo com um espaço de trabalho existente do Log Analytics 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.
Nota
Os comandos nesta unidade são mostrados para ilustrar conceitos. Não execute os comandos ainda. Você vai praticar o que você aprende aqui em breve.
Adicionar um recurso existente
Os recursos que um aplicativo usa mudam ao longo do tempo. Como atualizamos uma pilha de implantação para incluir um recurso já existente no Azure?
O Bicep permite definir um recurso que já existe no Azure. Definir um recurso existente é semelhante a definir um novo recurso com pequenas diferenças. Por exemplo, você pode definir um recurso existente em uma declaração de recurso usando a existing
palavra-chave:
resource logAnalyticsWorkspace 'Microsoft.OperationsManagement/solutions@2015-11-01-preview' existing = {
name: 'log-deposits'
}
Quando adicionamos um recurso existente como um recurso gerenciado a uma pilha de implantação, não precisamos usar essa existing
palavra-chave. Nós simplesmente precisamos definir o recurso existente em nosso arquivo Bicep, modelo JSON ARM 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 de serviço de aplicativo, um aplicativo Web e um servidor SQL e banco de dados do Azure. Queremos adicionar um espaço de trabalho existente do Log Analytics à nossa pilha de implantação. O espaço de trabalho está no mesmo grupo de recursos onde existem nossos recursos gerenciados.
Para adicionar o espaço de trabalho existente do Log Analytics, precisamos adicionar sua definição ao nosso arquivo Bicep. Observe que não precisamos incluir nenhum código que descreva o espaço de trabalho 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 no arquivo Bicep sejam implementadas.
Para atualizar uma pilha de implantação usando a CLI do Azure, use o az stack group create
comando.
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 no arquivo Bicep sejam implementadas.
Para atualizar uma pilha de implantação usando o Azure PowerShell, use o Set-AzResourceGroupDeploymentStack
comando.
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 à adição de um recurso existente à pilha. Nós simplesmente precisamos definir o recurso existente em nosso arquivo Bicep, modelo JSON ARM ou especificação de modelo. No final, a pilha de implantação gerencia o novo recurso.
Vamos considerar nosso arquivo Bicep da seção anterior. Nosso arquivo agora define um plano de serviço de aplicativo, serviço de aplicativo, um servidor SQL do Azure e um banco de dados e um espaço de trabalho 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 no arquivo Bicep sejam implementadas.
Para atualizar uma pilha de implantação usando a CLI do Azure, use o az stack group create
comando.
az stack group create \
--name stack-deposits \
--resource-group rg-depositsApplication \
--template-file ./main.bicep \
--action-on-unmanage detachAll \
--deny-settings-mode none
Nota
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 da ação em unmanage parameter 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 no arquivo Bicep sejam implementadas.
Para atualizar uma pilha de implantação usando o Azure PowerShell, use o Set-AzResourceGroupDeploymentStack
comando.
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.