用途
Azure Deployment Stacks 是 Azure 中用于管理一组 Azure 资源的资源类型,可将多个资源作为单一、原子单元进行统一管理。它是 Azure Blueprints 的继任者(Blueprints 将于 2026 年 7 月弃用),提供统一的生命周期管理、资源保护和自动清理能力。
主要能力
1. 统一资源管理
- 将多个资源作为单一实体管理
- 对整个堆栈执行更新、导出和删除操作
- 在一处跟踪所有受管资源
- 跨环境实现一致的部署
2. Deny Settings(资源保护)
防止对受管资源的未授权修改:
- None:无限制(默认)
- DenyDelete:防止资源删除
- DenyWriteAndDelete:防止更新和删除
可通过 --deny-settings-excluded-principals 为特定身份(如紧急访问主体、DevOps 服务主体)绕过拒绝设置。
3. ActionOnUnmanage(清理策略)
控制模板中不再存在的资源如何处理:
- detachAll:从堆栈管理中移除,保留资源
- deleteAll:删除不在模板中的资源
- deleteResources:删除未受管资源,保留资源组
4. 范围灵活性
可在以下范围部署堆栈:
- 资源组范围
- 订阅范围
- 管理组范围
5. 替代 Azure Blueprints
Azure Blueprints 将于 2026 年 7 月弃用,Deployment Stacks 是推荐的替代方案。
使用方式
前置条件
Azure CLI 需 2.61.0 或更高版本:
az version
az upgrade
Azure PowerShell 需 12.0.0 或更高版本:
Get-InstalledModule -Name Az
Update-Module -Name Az
创建堆栈
订阅范围示例:
az stack sub create \
--name MyProductionStack \
--location eastus \
--template-file main.bicep \
--parameters @parameters.json \
--deny-settings-mode DenyWriteAndDelete \
--deny-settings-excluded-principals <devops-service-principal-id> <admin-group-id> \
--action-on-unmanage deleteAll \
--description "Production infrastructure managed by deployment stack" \
--tags Environment=Production ManagedBy=DeploymentStack CostCenter=Engineering
部署前可执行 what-if 分析:
az stack sub what-if \
--name MyProductionStack \
--location eastus \
--template-file main.bicep \
--parameters @parameters.json
资源组范围使用 az stack group create,管理组范围使用 az stack mg create。
管理堆栈
- 更新:
az stack sub update - 查看详情:
az stack sub show/az stack sub list - 导出模板:
az stack sub export --output-file exported-stack.json - 删除:
az stack sub delete --action-on-unmanage deleteAll --yes(或 detachAll 保留资源)
Bicep 模板
资料提供了生产堆栈模板示例(main.bicep),包含资源组、Log Analytics、AKS Automatic 集群、Container Apps 环境、Azure OpenAI、Cosmos DB、Key Vault 等模块,以及 AKS Automatic 模块示例。
RBAC
内置角色:
- Azure Deployment Stack Contributor:管理部署堆栈,不能创建或删除 deny-assignments
- Azure Deployment Stack Owner:完整堆栈管理,可创建和删除 deny-assignments
CI/CD、监控与审计
详细的 GitHub Actions 和 Azure DevOps CI/CD 示例,以及监控、审计查询、部署历史检查等内容位于 references/cicd-monitoring.md。
从 Azure Blueprints 迁移
步骤包括:清点 Blueprints、记录参数、规划转换、在开发环境测试;导出 Blueprint 为 ARM 模板、用 az bicep decompile 转换为 Bicep、创建 Deployment Stack、验证资源、删除 Blueprint 分配。
适用场景
- 生产基础设施的统一生命周期管理
- 需要资源保护(防止误删或误改)的合规场景
- 临时环境(dev、test)的干净部署
- 资源迁移到另一个堆栈
- 从 Azure Blueprints 迁移
限制与注意事项
- 需 Azure CLI 2.61.0+ 或 Azure PowerShell 12.0.0+
- Azure Blueprints 将于 2026 年 7 月弃用
- 资料未提供具体收费或价格信息
- 资料未提供平台支持范围之外的细节
最佳实践(资料列出)
- 所有新基础设施使用 Deployment Stacks
- 部署前始终运行 what-if 分析
- 生产堆栈使用 DenyWriteAndDelete
- 从拒绝设置中排除 break-glass 主体
- 为堆栈打上 Environment、CostCenter、Owner 标签
- 临时环境使用 deleteAll
- 迁移场景使用 detachAll
- 为堆栈部署实现 CI/CD 管道
- 通过活动日志监控堆栈操作
- 记录堆栈架构和依赖关系