创建部署堆栈
Azure 部署堆栈是可作为单个单元进行管理的 Azure 资源(即使这些资源跨越多个资源组或订阅)的集合。
你计划部署新存款应用程序的测试版本。 你需要详细了解如何创建部署堆栈并验证其受管理资源。
在本单元中,你将了解如何创建部署堆栈、验证部署并列出环境中的所有部署堆栈。
注意
本单元中显示的命令用于说明概念。 请暂时不要运行这些命令。 稍后你将练习在此处学到的知识。
再论部署堆栈
部署堆栈会改变你对跨资源组和订阅的资源组织的看法。 使用部署堆栈,你可以对组成应用程序的所有资源进行分组,无论它们位于 Azure 资源组织层次结构中的什么位置。 可以将它们作为一个单元进行管理。 使用部署堆栈,可以对组成堆栈的资源集合执行生命周期操作。
              
              
            
请将部署堆栈视为一系列将应用程序的资源分组为一个单元的指针。 可以在不同范围(例如资源组、订阅和管理组)内创建部署堆栈。
定义资源
部署堆栈支持使用 Bicep 文件、ARM JSON 模板或模板规格来定义堆栈中的资源。 使用 Azure CLI 或 Azure PowerShell 创建部署堆栈时,可以指向特定的模板文件(Bicep 文件或 ARM JSON 模板)或模板规范。无需更改你定义资源的方式。
我们将以下 Bicep 文件用于第一个部署堆栈。 该文件定义应用服务计划和 Web 应用。 创建部署堆栈时,这些资源将成为受管理资源。
// Parameters
@description('The location for all resources.')
param location string = 'eastus'
@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
  }
}
注意
你可能会注意到 ${uniqueString(resourceGroup().id)} 参数上的 webApplicationName 语法。 uniqueString 函数基于资源组的 ID 创建一个字符串,并将其作为后缀添加到 webapp-deposits。 许多 Azure 服务都需要唯一的名称。 此函数有助于生成唯一的名称。
创建部署堆栈
创建和部署部署堆栈及其资源的过程与标准 Azure 部署几乎完全相同。 无论是使用 Azure CLI、Azure PowerShell 还是基础结构即服务管道,过程感觉是一样的。 例如:
将 Bicep 文件部署到资源组的 Azure CLI 命令为:
az deployment group create \
    --resource-group rg-depositsApplication \
    --template-file ./main.bicep
用于在资源组范围内创建部署堆栈的 Azure CLI 命令为:
az stack group create \
    --name stack-deposits \
    --resource-group rg-depositsApplication \
    --template-file ./main.bicep \
    --action-on-unmanage detachAll \
    --deny-settings-mode none
请注意,命令中唯一的变化是单词 deployment 和 stack,以及所用参数的差异。 对订阅和管理组的部署也是如此。
注意
在后面的模块中,我们将探讨如何使用 --action-on-unmanage 管理部署堆栈的资源,以及如何使用 --deny-settings-mode 防止不需要的更改。
用于将 Bicep 文件部署到资源组的 Azure PowerShell 命令为:
New-AzResourceGroupDeployment `
    -ResourceGroupName rg-depositsApplication `
    -TemplateFile ./main.bicep
用于在资源组范围内创建部署堆栈的 Azure PowerShell 命令为:
New-AzResourceGroupDeploymentStack `
    -Name stack-deposits `
    -ResourceGroupName rg-depositsApplication `
    -TemplateFile ./main.bicep `
    -ActionOnUnmanage DetachAll `
    -DenySettingsMode None
请注意,命令中唯一的变化是单词 stack,以及所用参数的差异。 对订阅和管理组的部署也是如此。
注意
在后面的模块中,我们将探讨如何使用 -ActionOnUnmanage 管理部署堆栈的资源,以及如何使用 -DenySettingsMode 防止不需要的更改。
现在,让我们看看如何在资源组范围内创建部署堆栈。
若要使用 Azure CLI 创建部署堆栈,请使用 az stack group create 命令。 以下命令首先创建名为 rg-depositsApplication 的资源组,然后在该资源组的范围内创建部署堆栈。
az group create \
    --name rg-depositsApplication \
    --location eastus
az stack group create \
    --name stack-deposits \
    --resource-group rg-depositsApplication \
    --template-file ./main.bicep \
    --action-on-unmanage detachAll \
    --deny-settings-mode none
若要使用 Azure PowerShell 创建部署堆栈,请使用 New-AzResourceGroupDeploymentStack 命令。 以下命令首先创建名为 rg-depositsApplication 的资源组,然后在该资源组的范围内创建部署堆栈。
New-AzResourceGroup `
    -Name rg-depositsApplication `
    -Location eastus
New-AzResourceGroupDeploymentStack `
    -Name stack-deposits `
    -ResourceGroupName rg-depositsApplication `
    -TemplateFile ./main.bicep `
    -ActionOnUnmanage DetachAll `
    -DenySettingsMode None
显示部署堆栈
资源组的范围内可能有多个部署堆栈。 可以显示资源组范围内的特定部署堆栈的详细信息。
若要使用 Azure CLI 显示资源组范围内的特定部署堆栈资源,请使用 az stack group show 命令,指定部署堆栈的名称和目标资源组。
az stack group show \
    --resource-group rg-depositsApplication \
    --name stack-deposits
结果包括部署堆栈的属性和受管理资源的状态。 输出应类似于以下部分:
{
  "actionOnUnmanage": {
    "managementGroups": "detach",
    "resourceGroups": "detach",
    "resources": "detach"
  },
  "bypassStackOutOfSyncError": null,
  "correlationId": ".",
  "debugSetting": null,
  "deletedResources": [],
  "denySettings": {
    "applyToChildScopes": false,
    "excludedActions": null,
    "excludedPrincipals": null,
    "mode": "none"
  },
  "deploymentId": "/subscriptions/././rg-depositsApplication/./Microsoft.Resources/deployments/stack-deposits",
  "deploymentScope": null,
  "description": null,
  "detachedResources": [],
  "duration": "PT2M53.2734284S",
  "error": null,
  "failedResources": [],
  "id": "/subscriptions/././rg-depositsApplication/./Microsoft.Resources/deploymentStacks/stack-deposits",
  "location": null,
  "name": "stack-deposits",
  "outputs": null,
  "parametersLink": null,
  "provisioningState": "succeeded",
  "resourceGroup": "rg-depositsApplication",
  "resources": [
    {
      "denyStatus": "none",
      "id": "/subscriptions/././rg-depositsApplication/././serverfarms/plan-deposits",
      "resourceGroup": "rg-depositsApplication",
      "status": "managed"
    },
    {
      "denyStatus": "none",
      "id": "/subscriptions/./resourceGroups/rg-depositsApplication/././sites/webapp-eque2jlrboltq",
      "resourceGroup": "rg-depositsApplication",
      "status": "managed"
    }
  ],
  "systemData": {
    "createdAt": "2024-01-01T00:00:01.000000+00:00",
    "createdBy": "depositsapplication@contoso.com",
    "createdByType": "User",
    "lastModifiedAt": "2024-01-01T00:00:01.000000+00:00",
    "lastModifiedBy": "depositsapplication@contoso.com",
    "lastModifiedByType": "User"
  },
  "tags": {},
  "template": null,
  "templateLink": null,
  "type": "Microsoft.Resources/deploymentStacks"
}
请注意输出的资源部分。 对于每个资源,它将显示其状态为 managed、资源组、资源 ID 和拒绝设置。
若要使用 Azure PowerShell 显示资源组范围内的特定部署堆栈资源,请使用 Get-AzResourceGroupDeploymentStack 命令,指定部署堆栈的名称和目标资源组。
Get-AzResourceGroupDeploymentStack `
    -ResourceGroupName rg-depositsApplication `
    -Name stack-deposits
结果包括部署堆栈的属性和受管理资源的状态。 输出应类似于以下部分:
Id                            : /subscriptions/././rg-depositsApplication/././deploymentStacks/stack-deposits
Name                          : stack-deposits
ProvisioningState             : succeeded
resourcesCleanupAction        : detach
resourceGroupsCleanupAction   : detach
managementGroupsCleanupAction : detach
CorrelationId                 : .
DenySettingsMode              : none
CreationTime(UTC)             : 1/01/2024 0:00:01 AM
DeploymentId                  : /subscriptions/././rg-depositsApplication/././deployments/stack-deposits
Resources                     : /subscriptions/././rg-depositsApplication/././serverfarms/plan-deposits
                                /subscriptions/././rg-depositsApplication/././sites/webapp-eque2jlrboltq
请注意输出的资源部分。 它定义由部署堆栈管理的资源。 可以看到每个资源的完整资源 ID。
还可以在 Azure 门户中查看部署堆栈。 它们可在各自的范围内使用。 对于资源组,请导航到部署堆栈范围所在的资源组。 在“设置”下,可以看到部署堆栈的选项。
              
              
              
              
            
单击部署堆栈时,它会列出资源组范围内的任何堆栈。 单击部署堆栈会转到部署堆栈的属性页。
              
              
              
              
            
列出部署堆栈
还可以列出特定资源组范围内的所有部署堆栈。
若要使用 Azure CLI 列出资源组范围内的所有部署堆栈资源,请使用 az stack group list 命令指定目标资源组。
az stack group list \
    --resource-group rg-depositsApplication
若要使用 Azure PowerShell 列出资源组范围内的所有部署堆栈资源,请使用 Get-AzResourceGroupDeploymentStack 命令指定目标资源组。
Get-AzResourceGroupDeploymentStack `
    -ResourceGroupName rg-depositsApplication
注意
Azure PowerShell 对 show 和 list 操作使用相同的 Get-AzResourceGroupDeploymentStack 命令。