次の方法で共有


ブループリントをデプロイ スタックに移行する

この記事では、ブループリントの定義と割り当てをデプロイ スタックに変換する方法について説明します。 デプロイ スタックは Microsoft.Resources 名前空間内の新しいツールであり、Azure Blueprint 機能をこの領域に取り込みます。

移行の手順

  1. ブループリント定義を、Azure ポリシー、Azure ロールの割り当て、およびテンプレートの成果物を含むブループリント定義 JSON ファイルにエクスポートします。 詳細については、「ブループリント定義をエクスポートする」を参照してください。

  2. ブループリント定義 JSON ファイルを 1 つの ARM テンプレートまたは Bicep ファイルに変換し、デプロイ スタックを介してデプロイします。次の考慮事項があります。

    • ロールの割り当て: ロールの割り当てを変換します。
    • ポリシー: ポリシーの割り当てを Bicep (または ARM JSON テンプレート) 構文に変換し、メイン テンプレートに追加します。 policyDefinitions を JSON テンプレートに埋め込むこともできます。
    • テンプレート: 任意のテンプレートを、デプロイ スタックに送信するためのメイン テンプレートに変換します。 Bicep でモジュールを使用したり、テンプレートを入れ子になったテンプレートまたはテンプレート リンクとして埋め込んだり、必要に応じてテンプレート スペックを使用してテンプレートを Azure に格納したりすることができます。 デプロイ スタックを使用するのに Template Specs は必要ありません。
    • ロック: 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 }
}