Azureアームテンプレート仕様
前の投稿では、テンプレートリンクのテクニックを使用してテンプレートをモジュール化する方法を示しました.目標は、これらの子テンプレートの展開を調整するいくつかの小さなARMテンプレートと中央のテンプレートを作成することです.
このテクニックには多くの制限があります.まず、GATHUBリポジトリやazasストレージアカウントのようなグローバルに利用可能な場所にあなたの子テンプレートをホストする必要があります.次に、リンクされたテンプレートを使用してAzureリソースマネージャーのロールベースコントロールを使用できません.
バージョン管理は、第3の制限です.外部ストレージにARMテンプレートを使用すると、バージョンコントロールはContentVersionプロパティによって管理されます.これは手動プロセスであり、呼び出しと子テンプレートの両方が同じバージョンを使用することを確認する必要があります.
テンプレート仕様はこれらの制限に対処します.テンプレート仕様はAzureリソースであり、外部ストレージではなく、他のリソースと同様に、ロールと認証を追加できます.
テンプレートspecは、アームJSONテンプレートとその異なるバージョンを格納できるオブジェクトです.このテンプレートのバージョンを展開する場合は、展開したいオブジェクトとバージョンへの参照を使用して、ARMテンプレートでそれを呼び出すことができます.
テンプレート仕様を作成するには、JSONテンプレートファイルとリソースグループが必要です.あなたがアップロードするテンプレートのバージョンに名前を付ける必要があります.
AZ PowerShellモジュールまたはAZ CLIの最新バージョンを使用する必要があります.
たとえば、このテンプレートを使用する場合は、vnetという名前を付けます.vsonリソースを作成する
また、テンプレートspecリソースにタグを追加することもできます.また、説明、バージョンの説明、およびdisplaynameを追加することができます.
vnetのtemplatespecを作成するには.JSONファイル.
このテンプレートを見てください.
Azureリソースとして、テンプレート仕様オブジェクトにロールを割り当てることができます.テンプレートを開発するチームと同じテンプレートを展開するために使用されるサービスプリンシパルを持っている状況をイメージします.貢献者役割をdevチームとリーダーロールにサービスプリンシパルに追加できます.
TemplateSpecオブジェクトに関する情報を得るには、get aztemplatespec cmdletを使用します.
私の例では、vnet template specの"vnet - 1 - subnet . 0.1 "バージョンを01 - tplspecsリソースグループで使用したい場合.参考文献は次のとおりです.
"ResourceID (' 01 - tplspecs '、'マイクロソフト. resources/templatespecs/version '、' vnet ', ' vnet - 1 - subnet . 0.1 ')"
すべてのパラメータを持つテンプレート
テンプレートSpecの中に複数のテンプレートの複数のバージョンを格納し、テンプレートテンプレートごとにテンプレート仕様を作成できます.また、プロジェクトごとに1つのテンプレート仕様を使用することができますし、必要に応じて任意の種類のテンプレートをホストします.
ARMテンプレート仕様の詳細については、Microsoft Doc Pageを参照してください
このテクニックには多くの制限があります.まず、GATHUBリポジトリやazasストレージアカウントのようなグローバルに利用可能な場所にあなたの子テンプレートをホストする必要があります.次に、リンクされたテンプレートを使用してAzureリソースマネージャーのロールベースコントロールを使用できません.
バージョン管理は、第3の制限です.外部ストレージにARMテンプレートを使用すると、バージョンコントロールはContentVersionプロパティによって管理されます.これは手動プロセスであり、呼び出しと子テンプレートの両方が同じバージョンを使用することを確認する必要があります.
テンプレート仕様はこれらの制限に対処します.テンプレート仕様はAzureリソースであり、外部ストレージではなく、他のリソースと同様に、ロールと認証を追加できます.
テンプレートspecは、アームJSONテンプレートとその異なるバージョンを格納できるオブジェクトです.このテンプレートのバージョンを展開する場合は、展開したいオブジェクトとバージョンへの参照を使用して、ARMテンプレートでそれを呼び出すことができます.
テンプレート仕様を作成するには、JSONテンプレートファイルとリソースグループが必要です.あなたがアップロードするテンプレートのバージョンに名前を付ける必要があります.
AZ PowerShellモジュールまたはAZ CLIの最新バージョンを使用する必要があります.
たとえば、このテンプレートを使用する場合は、vnetという名前を付けます.vsonリソースを作成する
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"vnetName": {
"type": "string"
},
"vnetPrefix": {
"type": "string"
},
"subnetName": {
"type": "string"
},
"subnetPrefix": {
"type": "string"
}
},
"variables": {},
"resources": [
{
"name": "[parameters('vnetName')]",
"type": "Microsoft.Network/virtualNetworks",
"apiVersion": "2019-11-01",
"location": "[resourceGroup().location]",
"properties": {
"addressSpace": {
"addressPrefixes": [
"[parameters('vnetPrefix')]"
]
},
"subnets": [
{
"name": "[parameters('subnetName')]",
"properties": {
"addressPrefix": "[parameters('subnetPrefix')]"
}
}
]
}
}
],
"outputs": {}
}
このテンプレートのために、私はバージョン名として「vnet - 1 - subnet . 0.1」を選びます.テンプレートspecを作成するには、テンプレートのスペックのためのリソースグループ、場所、および名前が必要になります.また、テンプレートspecリソースにタグを追加することもできます.また、説明、バージョンの説明、およびdisplaynameを追加することができます.
vnetのtemplatespecを作成するには.JSONファイル.
New-AzTemplateSpec -Name VNET -ResourceGroupName 01-TPLSPECS -Version "vnet-1-subnet.0.1" -location westeurope -TemplateFile ./storage.json -tags @{"project"="vnet design"} -Description "store VNET ARM Template" -VersionDescription "Vnet with one subnet" -DisplayName "Vnet deployment"
つのサブネットを1つの代わりに別のバージョンを格納したいと思います.テンプレートファイルの変更後に、バージョンとversiondescription修飾で同じコマンドを実行できますNew-AzTemplateSpec -Name VNET -ResourceGroupName 01-TPLSPECS -Version "vnet-2-subnet.0.1" -location westeurope -TemplateFile ./storage.json -tags @{"project"="vnet design"} -Description "store VNET ARM Template" -VersionDescription "Vnet with two subnet" -DisplayName "Vnet deployment"
Azureリソースとして、ARMテンプレートを使用してテンプレート仕様を作成することもできます.マイクロソフトの2つのARMテンプレートリソースがあります.リソース/templatespecsとその子リソースマイクロソフト.リソース/templatespecs/バージョン.このテンプレートを見てください.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"templateSpecsName": {
"type": "String"
}
},
"variables": {},
"resources": [
{
"type": "Microsoft.Resources/templateSpecs",
"apiVersion": "2019-06-01-preview",
"name": "[parameters('templateSpecsName')]",
"location": "westeurope",
"tags": {},
"properties": {
}
},
{
"type": "Microsoft.Resources/templateSpecs/versions",
"apiVersion": "2019-06-01-preview",
"name": "[concat(parameters('templateSpecsName'), '/1.0.0.b')]",
"location": "westeurope",
"dependsOn": [
"[resourceId('Microsoft.Resources/templateSpecs', parameters('templateSpecsName'))]"
],
"properties": {
"artifacts": [],
"template": {
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {},
"functions": [],
"variables": {},
"resources": [
{
"name": "udsiuisdudisudsi",
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2019-06-01",
"location": "[resourceGroup().location]",
"kind": "StorageV2",
"sku": {
"name": "Premium_LRS",
"tier": "Premium"
}
}
],
"outputs": {}
}
}
}
]
}
マイクロソフトの中でテンプレートバージョンを作成できます.リソース/templatespecs/バージョンAzureリソースとして、テンプレート仕様オブジェクトにロールを割り当てることができます.テンプレートを開発するチームと同じテンプレートを展開するために使用されるサービスプリンシパルを持っている状況をイメージします.貢献者役割をdevチームとリーダーロールにサービスプリンシパルに追加できます.
New-AzRoleAssignment -ObjectId (Get-AzADGroup -DisplayName 'arm-team').id -RoleDefinitionName "Contributor" -Scope "/subscriptions/XXXXX-6200-4226-bac3-XXXXXXXX/resourceGroups/01-TPLSPECS/providers/Microsoft.Resources/templateSpecs/testarm01"
New-AzRoleAssignment -ObjectId (Get-AzADServicePrincipal -DisplayName 'spArmTemplate').id -RoleDefinitionName "Reader" -Scope "/subscriptions/XXXXX-6200-4226-bac3-XXXXXXXX/resourceGroups/01-TPLSPECS/providers/Microsoft.Resources/templateSpecs/testarm01"
これらの2つのPowerShellコマンドは、ARTER TeamのメンバーにTestarm 01 Template Specオブジェクトの作成、更新、削除のバージョンを許可し、サービスオブジェクトSparmTemplateが同じオブジェクトからデータを取得できるようにします.TemplateSpecオブジェクトに関する情報を得るには、get aztemplatespec cmdletを使用します.
Get-AzTemplateSpec -Name VNET -ResourceGroupName 01-TPLSPECS
pstemplatespecオブジェクトを返すId : /subscriptions/XXXXXXXX/resourceGroups/01-TPLSPECS/providers/Microsoft.Resources/templateSpecs/VNET
Name : VNET
DisplayName : Vnet deployment
ResourceGroupName : 01-TPLSPECS
SubscriptionId : XXXXXXXXXXX
Location : westeurope
Tags : {[project, vnet design]}
Description : store VNET ARM Template
Versions : {vnet-1-subnet.0.1, vnet-2-subnet.0.1}
CreationTime(UTC) : 01/29/2021 21:49:33
LastModifiedTime(UTC) : 01/29/2021 22:16:51
また、エクスポートAtemtemplatespec Cmdletを使用して、テンプレートの仕様からテンプレートをエクスポートすることが可能です.テンプレートspecとバージョンの名前をローカルフォルダとともに提供する必要があります.cmdletは存在しない場合はフォルダを作成し、名前の下にJSONテンプレートをエクスポートします.JSONExport-AzTemplateSpec -Name VNET -ResourceGroupName 01-TPLSPECS -Version "vnet-1-subnet.0.1" -OutputFolder v1
テンプレート版が展開され、テンプレートspecオブジェクトにアップロードされると、展開時に使用できます.テンプレートを呼び出すと、伝統的なテンプレートのリンクテクニックで使用すると同じリソースタイプを使用しますマイクロソフト.リソース/展開.しかし、最新のAPIバージョンを使用してください.TemplateLinkプロパティのURIを使用する代わりに、使用するテンプレート仕様のバージョンオブジェクトの参照を持つIDを使用する必要があります.私の例では、vnet template specの"vnet - 1 - subnet . 0.1 "バージョンを01 - tplspecsリソースグループで使用したい場合.参考文献は次のとおりです.
"ResourceID (' 01 - tplspecs '、'マイクロソフト. resources/templatespecs/version '、' vnet ', ' vnet - 1 - subnet . 0.1 ')"
すべてのパラメータを持つテンプレート
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {},
"variables": {},
"resources": [
{
"apiVersion": "2020-06-01",
"name": "demo-tpl-spec01",
"type": "Microsoft.Resources/deployments",
"properties": {
"mode": "Incremental",
"templateLink": {
"id": "[resourceId('01-TPLSPECS', 'Microsoft.Resources/templateSpecs/versions', 'VNET', 'vnet-1-subnet.0.1')]"
},
"parameters": {
"vnetName": {
"value": "vnet01"
},
"vnetPrefix": {
"value": "10.0.0.0/21"
},
"subnetName": {
"value": "subnet01"
},
"subnetPrefix": {
"value": "10.0.0.0/24"
}
}
}
}
],
"outputs": {}
}
テンプレート仕様は、リンクされたテンプレートを管理する新しい方法を提供します.GitTubや他のインターネットに直面してストレージソリューションやazureストレージアカウントのような外部サービスに頼る代わりに、それはazureリソースを統合します.膨大な利点としてリンクされたテンプレートを管理するためにAzureリソースを使用して、統一アクセス管理システム、Azureロールベースのアクセス制御.テンプレートSpecの中に複数のテンプレートの複数のバージョンを格納し、テンプレートテンプレートごとにテンプレート仕様を作成できます.また、プロジェクトごとに1つのテンプレート仕様を使用することができますし、必要に応じて任意の種類のテンプレートをホストします.
ARMテンプレート仕様の詳細については、Microsoft Doc Pageを参照してください
Reference
この問題について(Azureアームテンプレート仕様), 我々は、より多くの情報をここで見つけました https://dev.to/omiossec/azure-template-specs-1h42テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol