共用方式為


將藍圖遷移至部署堆疊

本文說明如何將藍圖定義和指派轉換成部署堆疊。 部署堆疊是命名空間中的 Microsoft.Resources 新工具,可將 Azure 藍圖功能帶入此區域。

移轉步驟

  1. 將藍圖定義導出至藍圖定義 JSON 檔案,其中包含 Azure 原則、Azure 角色指派和範本的成品。 如需詳細資訊,請參閱 匯出您的藍圖定義

  2. 使用下列考慮,將藍圖定義 JSON 檔案轉換成單一 ARM 範本或 Bicep 檔案,以透過部署堆疊部署:

    • 角色指派:轉換任何 角色指派
    • 原則:將任何 原則指派 轉換成 Bicep (或 ARM JSON 範本) 語法,然後將它們新增至您的主要範本。 您也可以將 內嵌 policyDefinitions 至 JSON 範本。
    • 範本:將任何範本轉換成提交至部署堆疊的主要範本。 您可以在 Bicep 中使用 模組 、將範本內嵌為巢狀範本或範本連結,並選擇性地使用 範本規格 將範本儲存在 Azure 中。 使用部署堆疊不需要範本規格。
    • Locks:部署堆疊 DenySettingsMode 可讓您透過 DenySettingsMode 封鎖不必要的變更(類似於 藍圖鎖定)。 您可以透過 Azure CLI 或 Azure PowerShell 來設定這些設定。 若要這樣做,您需要對應的角色才能設定拒絕設定。 如需詳細資訊,請參閱 部署堆疊
  3. 您可以選擇性地建立已轉換 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 }
}