了解 Azure 藍圖中的部署順序

重要

在 2026 年 7 月 11 日,藍圖 (預覽) 將會淘汰。 將現有的藍圖定義和指派移轉至範本規格部署堆疊。 藍圖成品會轉換成用來定義部署堆疊的 ARM JSON 範本或 Bicep 檔案。 若要了解如何將成品撰寫為 ARM 資源,請參閱:

Azure 藍圖會在處理藍圖定義指派時使用排序順序來判斷資源的建立順序。 本文說明下列概念:

  • 使用的預設排序順序
  • 如何自訂順序
  • 如何處理自訂的順序

在 JSON 範例中有一些變數。您需要使用自己的值取代它們:

  • {YourMG} - 以您的管理群組名稱取代

預設排序順序

若藍圖定義沒有包含用於部署成品的順序指示詞,或是指示詞為 Null,則會使用下列順序:

  • 訂用帳戶層級角色指派成品,依成品名稱排序
  • 訂用帳戶層級原則指派成品,依成品名稱排序
  • 訂閱層級 Azure Resource Manager 範本 (ARM 範本) 成品,依成品名稱排序
  • 資源群組成品 (包含子成品),依預留位置名稱排序

在每個資源群組成品中,下列排序順序會適用於要在該資源群組內建立的成品:

  • 資源群組子角色指派成品,依成品名稱排序
  • 資源群組子原則指派成品,依成品名稱排序
  • 資源群組子系 Azure Resource Manager 範本 (ARM 範本) 成品,依成品名稱排序

注意

使用 artifacts() 會在參考的成品上建立隱含相依性。

自訂排序順序

撰寫大型藍圖定義時,可能需要依照特定順序建立資源。 此情節最常見的使用模式是藍圖定義包含數個 ARM 範本時。 Azure 藍圖會藉由允許定義排序順序來處理此模式。

排序可透過在 JSON 中定義 dependsOn 屬性來完成。 適用於資源群組的藍圖定義及成品物件支援此屬性。 dependsOn 為成品名稱字串陣列,代表在其建立前必須建立的特定成品。

注意

建立藍圖物件時,如果使用 PowerShell,則每個成品資源的名稱都會來自檔案名稱;若使用 REST API,則成品資源名稱會來自 URL 端點。 成品中的 resourceGroup 參考必須符合藍圖定義中定義的參考。

範例:已排序的資源群組

此範例藍圖定義具備透過宣告 dependsOn 值來定義自訂排序順序的資源群組,以及一個標準資源群組。 在此範例中,名為 assignPolicyTags 的成品會在 ordered-rg 資源群組之前進行處理。 standard-rg 會根據預設排序順序進行處理。

{
    "properties": {
        "description": "Example blueprint with custom sequencing order",
        "resourceGroups": {
            "ordered-rg": {
                "dependsOn": [
                    "assignPolicyTags"
                ],
                "metadata": {
                    "description": "Resource Group that waits for 'assignPolicyTags' creation"
                }
            },
            "standard-rg": {
                "metadata": {
                    "description": "Resource Group that follows the standard sequence ordering"
                }
            }
        },
        "targetScope": "subscription"
    },
    "type": "Microsoft.Blueprint/blueprints"
}

範例 - 使用自訂順序的成品

此範例是相依於 ARM 範本的原則成品。 根據預設順序,原則成品會在 ARM 範本之前建立。 這順序可讓原則成品等待建立 ARM 範本。

{
    "properties": {
        "displayName": "Assigns an identifying tag",
        "policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/2a0e14a6-b0a6-4fab-991a-187a4f81c498",
        "resourceGroup": "standard-rg",
        "dependsOn": [
            "customTemplate"
        ]
    },
    "kind": "policyAssignment",
    "type": "Microsoft.Blueprint/artifacts"
}

範例:依存於資源群組的訂閱層級範本成品

此範例適用於部署在訂閱層級的 ARM 範本,以依存於資源群組。 在預設順序中,訂閱層級成品會在這些資源群組中任何資源群組和子成品之前建立。 資源群組是在藍圖定義中定義,如下所示:

"resourceGroups": {
    "wait-for-me": {
        "metadata": {
            "description": "Resource Group that is deployed prior to the subscription level template artifact"
        }
    }
}

依存於 wait-for-me 資源群組的訂閱層級範本成品定義如下:

{
    "properties": {
        "template": {
            ...
        },
        "parameters": {
            ...
        },
        "dependsOn": ["wait-for-me"],
        "displayName": "SubLevelTemplate",
        "description": ""
    },
    "kind": "template",
    "type": "Microsoft.Blueprint/blueprints/artifacts"
}

處理自訂順序

在建立過程期間,會使用拓撲排序來建立藍圖成品的相依性關係圖。 此檢查可確保支援資源群組與成品之間的每個相依性層級。

如果成品相依性宣告為不會改變預設順序,則不會進行任何變更。 有個範例是相依於訂用帳戶層級原則的資源群組。 另一個範例則是相依於資源群組 ’standard-rg’ 子角色指派的資源群組 ’standard-rg’ 子原則指派。 在這兩個案例中,dependsOn 皆不會改變預設排序順序,因此不會產生任何變更。

下一步