更新部署堆栈中的资源

已完成

随着应用程序不断演变,其资源也会演变。 添加新服务和功能时,如何更新部署堆栈及其托管资源? 哪些情况需要我们更新部署堆栈?

存款应用程序正在进行重大更改。 需要修改 Azure 资源属性,需要添加新资源,需要删除现有资源。 需要详细了解什么时候更新部署堆栈以及如何更新现有受管理资源。

在本单元中,你会了解需要更新部署堆栈的情况。 你还会了解如何修改由部署堆栈管理的资源。

注意

本单元中显示的命令用于说明概念。 请暂时不要运行这些命令。 稍后你将练习在此处学到的知识。

更新部署堆栈

随着时间的推移,构成应用程序的资源会更改。 需要修改现有资源的属性、需要添加或删除资源,或者应用程序需要集成通过其他方法部署的资源。 可以更新部署堆栈,以实现应用程序中的更改。 哪些情况需要我们更新部署堆栈?

  • 正在修改受管理资源的属性
  • 正在将现有资源添加为受管理资源
  • 正在添加新的受管理资源
  • 正在拆离受管理资源
  • 正在删除受管理资源

如何实现这些更改? 如上一模块中所述,部署堆栈管理 Bicep 文件、ARM JSON 模板或模板规格中定义的资源。创建部署堆栈时,引用其中一个文件来部署资源。 更新部署堆栈也是如此。 要更新部署堆栈管理的资源,请更新基础模板文件。

更新现有受管理资源

修改在 Azure 中部署的资源是常见的做法。 可能需要更改资源的属性值以合并新功能或增强其功能。 如果当前使用基础结构即代码在 Azure 中定义资源,则你熟悉如何修改资源的属性。 使用部署堆栈时,该过程是相同的。 对 Bicep 文件中的资源进行更改,并在堆栈上运行更新操作。

让我们考虑一下上一个模块中的 Bicep 文件。 我们的文件定义应用服务计划、Web 应用以及 Azure SQL 服务器和数据库。 我们希望将应用服务计划的 SKU 从F1 SKU 修改为S1 SKU。

// 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: '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'
  }
}

修改 Bicep 文件后,我们需要更新部署堆栈,以便实施对 Bicep 文件中资源所做的更改。

要使用 Azure CLI 更新部署堆栈,请使用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

堆栈更新完成后,我们希望验证应用服务计划现在是否在S1 SKU 上运行。

要查看使用 Azure CLI 的应用服务计划的配置,请使用az appservice plan show命令

az appservice plan show \
    --name plan-deposits
    --resource-group rg-depositsApplication

输出显示更新成功,应用服务计划现在在S1 SKU 上运行。

"sku": {
    "capacity": 1,
    "family": "S",
    "name": "S1",
    "size": "S1",
    "tier": "Standard"
},

修改 Bicep 文件后,我们需要更新部署堆栈,以便实施对 Bicep 文件中资源所做的更改。

要使用 Azure PowerShell 更新部署堆栈,请使用Set-AzResourceGroupDeploymentStack命令。

Set-AzResourceGroupDeploymentStack `
    -Name stack-deposits `
    -ResourceGroupName rg-depositsApplication `
    -TemplateFile ./main.bicep `
    -ActionOnUnmanage DetachAll `
    -DenySettingsMode None

堆栈更新完成后,我们希望验证应用服务计划现在是否在S1 SKU 上运行。

要查看使用 Azure PowerShell 的应用服务计划的配置,请使用Get-AzAppServicePlan命令

$plan = Get-AzAppServicePlan `
    -ResourceGroupName rg-depositsApplication `
    -Name plan-deposits
$sku = $plan.Sku
$sku

输出显示更新成功,应用服务计划现在在S1 SKU 上运行。

Name         : S1
Tier         : Standard
Size         : S1
Family       : S
Capacity     : 1