将蓝图迁移到部署堆栈
本文介绍如何将蓝图定义和分配转换为部署堆栈。 部署堆栈是 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@2022-06-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@2021-01-01' = {
name: rgName
location: rgLocation
}
module vnet 'templates/bicep/vnet.bicep' = if (rgName == 'myTestRg') {
name: uniqueString(rgName)
scope: rg1
params: { location: rgLocation }
}