Azure ブループリントでのデプロイ シーケンスについてUnderstand the deployment sequence in Azure Blueprints

Azure Blueprints では、ブループリント定義の割り当てを処理するときに、シーケンス順序を使用してリソースの作成順序を決定します。Azure Blueprints uses a sequencing order to determine the order of resource creation when processing the assignment of a blueprint definition. この記事では、次の概念について説明します。This article explains the following concepts:

  • 使用される既定のシーケンス順序The default sequencing order that is used
  • 順序をカスタマイズする方法How to customize the order
  • カスタマイズされた順序を処理する方法How the customized order is processed

JSON の例では、次の変数を独自の値で置き換える必要があります。There are variables in the JSON examples that you need to replace with your own values:

  • {YourMG} - 実際の管理グループの名前に置き換えます{YourMG} - Replace with the name of your management group

既定のシーケンス順序Default sequencing order

ブループリント定義に成果物をデプロイする順序を指定するディレクティブが含まれていない場合、またはそのディレクティブが null の場合は、次の順序が使用されます。If the blueprint definition contains no directive for the order to deploy artifacts or the directive is null, then the following order is used:

  • サブスクリプション レベルのロールの割り当て成果物が、成果物の名前で並べ替えられますSubscription level role assignment artifacts sorted by artifact name
  • サブスクリプション レベルのポリシーの割り当て成果物が、成果物の名前で並べ替えられますSubscription level policy assignment artifacts sorted by artifact name
  • サブスクリプション レベルの Azure Resource Manager テンプレート成果物が、成果物の名前で並べ替えられますSubscription level Azure Resource Manager template artifacts sorted by artifact name
  • リソース グループ成果物 (子成果物を含む) が、プレースホルダーの名前で並べ替えられますResource group artifacts (including child artifacts) sorted by placeholder name

リソース グループ内では、そのリソース グループ内に作成される成果物に対して次のようなシーケンス順序が適用されます。Within each resource group artifact, the following sequence order is used for artifacts to be created within that resource group:

  • リソース グループの子のロールの割り当て成果物が、成果物の名前で並べ替えられますResource group child role assignment artifacts sorted by artifact name
  • リソース グループの子のポリシー割り当て成果物が、成果物の名前で並べ替えられますResource group child policy assignment artifacts sorted by artifact name
  • リソース グループの子のAzure Resource Manager テンプレート成果物が、成果物の名前で並べ替えられますResource group child Azure Resource Manager template artifacts sorted by artifact name

注意

artifacts() の使用により、参照される成果物の暗黙的な依存関係が作成されます。Use of artifacts() creates an implicit dependency on the artifact being referred to.

シーケンス順序のカスタマイズCustomizing the sequencing order

大規模なブループリント定義を作成するときは、リソースを特定の順序で作成することが必要になる場合があります。When composing large blueprint definitions, it may be necessary for resources to be created in a specific order. このシナリオの最も一般的な使用パターンは、ブループリント定義にいくつかの Azure Resource Manager テンプレートが含まれている場合です。The most common use pattern of this scenario is when a blueprint definition includes several Azure Resource Manager templates. ブループリントでは、シーケンス順序を定義することで、このパターンを処理します。Blueprints handles this pattern by allowing the sequencing order to be defined.

この順序は、JSON 内で dependsOn プロパティを定義することで実現します。The ordering is accomplished by defining a dependsOn property in the JSON. このプロパティは、リソース グループ用のブループリント定義、および成果物オブジェクトによってサポートされています。The blueprint definition, for resource groups, and artifact objects support this property. dependsOn は、特定の成果物が作成される前に作成する必要がある成果物の名前で構成される文字列配列です。dependsOn is a string array of artifact names that the particular artifact needs to be created before it's created.

例 - 順序指定されたリソース グループExample - ordered resource group

このブループリント定義の例には、dependsOn の値を宣言することでカスタムのシーケンス順序を定義されたリソース グループと、標準のリソース グループの両方が含まれています。This example blueprint definition has a resource group that has defined a custom sequencing order by declaring a value for dependsOn, along with a standard resource group. この場合、assignPolicyTags という名前の成果物が、ordered-rg リソース グループの前に処理されます。In this case, the artifact named assignPolicyTags will be processed before the ordered-rg resource group. standard-rg は、既定のシーケンス順序ごとに処理されます。standard-rg will be processed per the default sequencing order.

{
    "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"
    },
    "id": "/providers/Microsoft.Management/managementGroups/{YourMG}/providers/Microsoft.Blueprint/blueprints/mySequencedBlueprint",
    "type": "Microsoft.Blueprint/blueprints",
    "name": "mySequencedBlueprint"
}

例 - カスタムの順序で並べられた成果物Example - artifact with custom order

この例は、Azure Resource Manager テンプレートに依存するポリシー成果物です。This example is a policy artifact that depends on an Azure Resource Manager template. 既定の順序では、Azure Resource Manager テンプレートの前に、ポリシー成果物が作成されます。By default ordering, a policy artifact would be created before the Azure Resource Manager template. この順序では、ポリシー成果物は Azure Resource Manager テンプレートが作成されるまで待機します。This ordering allows the policy artifact to wait for the Azure Resource Manager template to be created.

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

例 - リソース グループに依存するサブスクリプション レベルのテンプレート成果物Example - subscription level template artifact depending on a resource group

この例は、サブスクリプション レベルでデプロイされた Resource Manager テンプレートを対象とし、リソース グループに依存します。This example is for a Resource Manager template deployed at the subscription level to depend on a resource group. 既定の順序付けでは、サブスクリプション レベルの成果物は、任意のリソース グループとそのリソース グループの子成果物の前に作成されます。In default ordering, the subscription level artifacts would be created prior to any resource groups and child artifacts in those resource groups. リソース グループは、次のようにブループリント定義で定義されます。The resource group is defined in the blueprint definition like this:

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

wait-for-me リソース グループに依存するサブスクリプション レベルのテンプレート成果物は、次のように定義されます。The subscription level template artifact depending on the wait-for-me resource group is defined like this:

{
    "properties": {
        "template": {
            ...
        },
        "parameters": {
            ...
        },
        "dependsOn": ["wait-for-me"],
        "displayName": "SubLevelTemplate",
        "description": ""
    },
    "kind": "template",
    "id": "/providers/Microsoft.Management/managementGroups/{YourMG}/providers/Microsoft.Blueprint/blueprints/mySequencedBlueprint/artifacts/subtemplateWaitForRG",
    "type": "Microsoft.Blueprint/blueprints/artifacts",
    "name": "subtemplateWaitForRG"
}

カスタマイズされたシーケンスの処理Processing the customized sequence

作成プロセスでは、トポロジカル ソートを使用して、ブループリント成果物の依存関係グラフが作成されます。During the creation process, a topological sort is used to create the dependency graph of the blueprints artifacts. この確認により、リソース グループと成果物の各レベルの依存関係がサポートされます。The check makes sure each level of dependency between resource groups and artifacts is supported.

成果物の依存関係が既定の順序を変更しないと宣言されている場合、変更は加えられません。If an artifact dependency is declared that wouldn't alter the default order, then no change is made. たとえば、サブスクリプション レベルのポリシーに依存するリソース グループです。An example is a resource group that depends on a subscription level policy. もう 1 つの例は、リソース グループ 'standard rg' 子ロールの割り当てに依存しているリソース グループ ' standard rg' 子ポリシーの割り当てです。Another example is a resource group 'standard-rg' child policy assignment that depends on resource group 'standard-rg' child role assignment. どちらの場合も、dependsOn によって既定のシーケンス順序が変更されることはなく、何の変更も加えられません。In both cases, the dependsOn wouldn't have altered the default sequencing order and no changes would be made.

次の手順Next steps