ブループリントをデプロイ スタックに移行する
この記事では、ブループリントの定義と割り当てをデプロイ スタックに変換する方法について説明します。 デプロイ スタックは Microsoft.Resources
名前空間内の新しいツールであり、Azure Blueprint 機能をこの領域に取り込みます。
移行の手順
ブループリント定義を、Azure ポリシー、Azure ロールの割り当て、およびテンプレートの成果物を含むブループリント定義 JSON ファイルにエクスポートします。 詳細については、「ブループリント定義をエクスポートする」を参照してください。
ブループリント定義 JSON ファイルを 1 つの ARM テンプレートまたは Bicep ファイルに変換し、デプロイ スタックを介してデプロイします。次の考慮事項があります。
- ロールの割り当て: ロールの割り当てを変換します。
-
ポリシー: ポリシーの割り当てを Bicep (または ARM JSON テンプレート) 構文に変換し、メイン テンプレートに追加します。
policyDefinitions
を JSON テンプレートに埋め込むこともできます。 - テンプレート: 任意のテンプレートを、デプロイ スタックに送信するためのメイン テンプレートに変換します。 Bicep でモジュールを使用したり、テンプレートを入れ子になったテンプレートまたはテンプレート リンクとして埋め込んだり、必要に応じてテンプレート スペックを使用してテンプレートを Azure に格納したりすることができます。 デプロイ スタックを使用するのに Template Specs は必要ありません。
-
ロック: 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 }
}