將藍圖遷移至部署堆疊
本文說明如何將藍圖定義和指派轉換成部署堆疊。 部署堆疊是命名空間中的 Microsoft.Resources
新工具,可將 Azure 藍圖功能帶入此區域。
移轉步驟
將藍圖定義導出至藍圖定義 JSON 檔案,其中包含 Azure 原則、Azure 角色指派和範本的成品。 如需詳細資訊,請參閱 匯出您的藍圖定義。
使用下列考慮,將藍圖定義 JSON 檔案轉換成單一 ARM 範本或 Bicep 檔案,以透過部署堆疊部署:
- 角色指派:轉換任何 角色指派。
-
原則:將任何 原則指派 轉換成 Bicep (或 ARM JSON 範本) 語法,然後將它們新增至您的主要範本。 您也可以將 內嵌
policyDefinitions
至 JSON 範本。 - 範本:將任何範本轉換成提交至部署堆疊的主要範本。 您可以在 Bicep 中使用 模組 、將範本內嵌為巢狀範本或範本連結,並選擇性地使用 範本規格 將範本儲存在 Azure 中。 使用部署堆疊不需要範本規格。
-
Locks:部署堆疊 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 }
}