创建部署堆栈

已完成

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
  }
}

注意

你可能会注意到 webApplicationName 参数上的 ${uniqueString(resourceGroup().id)} 语法。 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

请注意,命令中唯一的变化是单词 deploymentstack,以及所用参数的差异。 对订阅和管理组的部署也是如此。

注意

在后面的模块中,我们将探讨如何使用 --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 门户的屏幕截图,其中显示了资源组的设置和查找部署堆栈的位置。

单击部署堆栈时,它会列出资源组范围内的任何堆栈。 单击部署堆栈会转到部署堆栈的属性页。

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 命令。