Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
本文介绍如何将蓝图定义和分配转换为部署堆栈。 部署堆栈是 Microsoft.Resources 命名空间中的新工具,将 Azure 蓝图功能引入此区域。
迁移步骤
将蓝图定义导出到蓝图定义 JSON 文件中,这些文件包含 Azure 策略的项目、Azure 角色分配和模板。
将蓝图定义 JSON 文件转换为单个 ARM 模板或 Bicep 文件,以便通过部署堆栈进行部署,并考虑以下注意事项:
- 角色分配: 转换任何角色分配。
- 策略: 将任何策略分配转换为 Bicep (或 ARM JSON 模板)语法,然后将其添加到主模板。 还可以将
policyDefinitions嵌入 JSON 模板。 - 模板: 将任何模板转换为提交到部署堆栈的主模板。 可以在 Bicep 中使用模块,将模板嵌入为嵌套模板或模板链接,还可以选择使用模板规格在 Azure 中存储模板。 使用部署堆栈不需要模板规格。
- 锁:Deployment 堆栈 DenySettingsMode 使你能够通过
DenySettingsMode(类似于蓝图锁)阻止不需要的更改。 可以通过 Azure CLI 或 Azure PowerShell 配置这些配置。 为此,需要相应的角色才能设置拒绝设置。
可以选择为转换后的 ARM 模板或 Bicep 文件创建模板规格。 模板规格允许你在 Azure 环境中存储模板及其版本,从而简化整个组织的模板共享。 通过部署堆栈,可以将模板规格定义或 ARM 模板/Bicep 文件部署到指定的目标范围。
示例
以下 Bicep 文件是一个示例迁移文件。
targetScope = 'subscription'
param roleAssignmentName string = 'myTestRoleAssignment'
param roleDefinitionId string = guid(roleAssignmentName)
param principalId string = guid('myTestId')
param policyAssignmentName string = 'myTestPolicyAssignment'
param policyDefinitionID string = '/providers/Microsoft.Authorization/policyDefinitions/06a78e20-9358-41c9-923c-fb736d382a4d'
param rgName string = 'myTestRg'
param rgLocation string = deployment().location
param templateSpecName string = 'myNetworkingTs'
// Step 1 - create role assignments
resource roleAssignment 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
name: guid(roleAssignmentName)
properties: {
principalId: principalId
roleDefinitionId: roleDefinitionId
}
}
// Step 2 - create policy assignments
resource policyAssignment 'Microsoft.Authorization/policyAssignments@2025-03-01' = {
name: policyAssignmentName
scope: subscriptionResourceId('Microsoft.Resources/resourceGroups', resourceGroup().name)
properties: {
policyDefinitionId: policyDefinitionID
}
}
// Step 3 - create template artifacts via modules (or template specs)
resource rg1 'Microsoft.Resources/resourceGroups@2025-04-01' = {
name: rgName
location: rgLocation
}
module vnet 'templates/bicep/vnet.bicep' = if (rgName == 'myTestRg') {
name: uniqueString(rgName)
scope: rg1
params: { location: rgLocation }
}