Azure Resource Manager-sjabloonspecificaties

Een sjabloonspecificatie is een resourcetype voor het opslaan van een Azure Resource Manager-sjabloon (ARM-sjabloon) in Azure voor latere implementatie. Met dit resourcetype kunt u ARM-sjablonen delen met andere gebruikers in uw organisatie. Net als elke andere Azure-resource kunt u op rollen gebaseerd toegangsbeheer van Azure (Azure RBAC) gebruiken om de sjabloonspecificatie te delen.

Microsoft.Resources/templateSpecs is het resourcetype voor sjabloonspecificaties . Het bestaat uit een hoofdsjabloon en een willekeurig aantal gekoppelde sjablonen. In Azure worden sjabloonspecificaties veilig opgeslagen in resourcegroepen. Sjabloonspecificaties ondersteunen versiebeheer.

Als u de sjabloonspecificatie wilt implementeren, gebruikt u standaard Azure-hulpprogramma's zoals PowerShell, Azure CLI, Azure Portal, REST en andere ondersteunde SDK's en clients. U gebruikt dezelfde opdrachten als voor de sjabloon.

Notitie

Als u sjabloonspecificatie wilt gebruiken met Azure PowerShell, moet u versie 5.0.0 of hoger installeren. Voor gebruik met Azure CLI hebt u versie 2.14.2 of hoger nodig.

Houd bij het ontwerpen van uw implementatie altijd rekening met de levenscyclus van de resources en groepeer de resources die een vergelijkbare levenscyclus delen in één sjabloonspecificatie. Uw implementaties bevatten bijvoorbeeld meerdere exemplaren van Azure Cosmos DB, waarbij elk exemplaar een eigen database en containers bevat. Aangezien de databases en de containers niet veel veranderen, wilt u één sjabloonspecificatie maken om een Cosmos DB-exemplaar en de onderliggende databases en containers op te nemen. Vervolgens kunt u voorwaardelijke instructies in uw sjablonen gebruiken, samen met kopieerlussen om meerdere exemplaren van deze resources te maken.

Trainingsmateriaal

Zie Bibliotheken met herbruikbare infrastructuurcode publiceren met behulp van sjabloonspecificaties voor meer informatie over sjabloonspecificaties en voor praktische richtlijnen.

Tip

We raden Bicep aan omdat het dezelfde mogelijkheden biedt als ARM-sjablonen en de syntaxis gemakkelijker te gebruiken is. Zie de specificaties van azure Resource Manager-sjablonen in Bicep voor meer informatie.

Waarom sjabloonspecificaties gebruiken?

Sjabloonspecificaties bieden de volgende voordelen:

  • U gebruikt standaard ARM-sjablonen voor de sjabloonspecificatie.
  • U beheert de toegang via Azure RBAC in plaats van SAS-tokens.
  • Gebruikers kunnen de sjabloonspecificatie implementeren zonder schrijftoegang tot de sjabloon te hebben.
  • U kunt de sjabloonspecificatie integreren in een bestaand implementatieproces, zoals PowerShell-script of DevOps-pijplijn.

Met sjabloonspecificaties kunt u canonieke sjablonen maken en deze delen met teams in uw organisatie. De sjabloonspecificaties zijn veilig omdat ze beschikbaar zijn voor Azure Resource Manager voor implementatie, maar niet toegankelijk zijn voor gebruikers zonder de juiste machtiging. Gebruikers hebben alleen leestoegang tot de sjabloonspecificatie nodig om de sjabloon te implementeren, zodat u de sjabloon kunt delen zonder dat anderen deze mogen wijzigen.

Als u momenteel uw sjablonen in een GitHub-opslagplaats of opslagaccount hebt, ondervindt u verschillende uitdagingen bij het delen en gebruiken van de sjablonen. Als u de sjabloon wilt implementeren, moet u de sjabloon openbaar toegankelijk maken of toegang beheren met SAS-tokens. Om deze beperking te omzeilen, kunnen gebruikers lokale kopieën maken, die uiteindelijk afwijken van de oorspronkelijke sjabloon. Sjabloonspecificaties vereenvoudigen het delen van sjablonen.

De sjablonen die u in een sjabloonspecificatie opneemt, moeten worden geverifieerd door beheerders in uw organisatie om de vereisten en richtlijnen van de organisatie te volgen.

Vereiste machtigingen

Er zijn twee Azure-build-inrollen gedefinieerd voor sjabloonspecificatie:

Daarnaast hebt u ook de machtigingen nodig voor het implementeren van een Bicep-bestand. Zie Implementeren - CLI of Implementeren - PowerShell.

Sjabloonspecificatie maken

In het volgende voorbeeld ziet u een eenvoudige sjabloon voor het maken van een opslagaccount in Azure.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storageAccountType": {
      "type": "string",
      "defaultValue": "Standard_LRS",
      "allowedValues": [
        "Standard_LRS",
        "Standard_GRS",
        "Standard_ZRS",
        "Premium_LRS"
      ]
    }
  },
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2019-06-01",
      "name": "[concat('store', uniquestring(resourceGroup().id))]",
      "location": "[resourceGroup().location]",
      "kind": "StorageV2",
      "sku": {
        "name": "[parameters('storageAccountType')]"
      }
    }
  ]
}

Wanneer u de sjabloonspecificatie maakt, worden de PowerShell- of CLI-opdrachten doorgegeven aan het hoofdsjabloonbestand. Als de hoofdsjabloon verwijst naar gekoppelde sjablonen, worden deze door de opdrachten gevonden en verpakt om de sjabloonspecificatie te maken. Zie Een sjabloonspecificatie maken met gekoppelde sjablonen voor meer informatie.

Maak een sjabloonspecificatie met behulp van:

New-AzTemplateSpec -Name storageSpec -Version 1.0a -ResourceGroupName templateSpecsRg -Location westus2 -TemplateFile ./mainTemplate.json

U kunt ook sjabloonspecificaties maken met behulp van ARM-sjablonen. Met de volgende sjabloon wordt een sjabloonspecificatie gemaakt voor het implementeren van een opslagaccount:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "templateSpecName": {
      "type": "string",
      "defaultValue": "CreateStorageAccount"
    },
    "templateSpecVersionName": {
      "type": "string",
      "defaultValue": "0.1"
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]"
    }
  },
  "resources": [
    {
      "type": "Microsoft.Resources/templateSpecs",
      "apiVersion": "2021-05-01",
      "name": "[parameters('templateSpecName')]",
      "location": "[parameters('location')]",
      "properties": {
        "description": "A basic templateSpec - creates a storage account.",
        "displayName": "Storage account (Standard_LRS)"
      }
    },
    {
      "type": "Microsoft.Resources/templateSpecs/versions",
      "apiVersion": "2021-05-01",
      "name": "[format('{0}/{1}', parameters('templateSpecName'), parameters('templateSpecVersionName'))]",
      "location": "[parameters('location')]",
      "dependsOn": [
        "[resourceId('Microsoft.Resources/templateSpecs', parameters('templateSpecName'))]"
      ],
      "properties": {
        "mainTemplate": {
          "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
          "contentVersion": "1.0.0.0",
          "parameters": {
            "storageAccountType": {
              "type": "string",
              "defaultValue": "Standard_LRS",
              "allowedValues": [
                "Standard_LRS",
                "Standard_GRS",
                "Standard_ZRS",
                "Premium_LRS"
              ]
            }
          },
          "resources": [
            {
              "type": "Microsoft.Storage/storageAccounts",
              "apiVersion": "2019-06-01",
              "name": "[concat('store', uniquestring(resourceGroup().id))]",
              "location": "[resourceGroup().location]",
              "kind": "StorageV2",
              "sku": {
                "name": "[parameters('storageAccountType')]"
              }
            }
          ]
        }
      }
    }
  ]
}

De grootte van een sjabloonspecificatie is beperkt tot ongeveer 2 MB. Als een sjabloonspecificatie groter is dan de limiet, krijgt u de foutcode TemplateSpecTooLarge . Het foutbericht zegt:

The size of the template spec content exceeds the maximum limit. For large template specs with many artifacts, the recommended course of action is to split it into multiple template specs and reference them modularly via TemplateLinks.

U kunt alle sjabloonspecificaties in uw abonnement bekijken met behulp van:

Get-AzTemplateSpec

U kunt details van een sjabloonspecificatie bekijken, inclusief de versies met:

Get-AzTemplateSpec -ResourceGroupName templateSpecsRG -Name storageSpec

Sjabloonspecificatie implementeren

Nadat u de sjabloonspecificatie hebt gemaakt, kunnen gebruikers met de rol sjabloonspecificatielezer deze implementeren. Daarnaast hebt u ook de machtigingen nodig voor het implementeren van een ARM-sjabloon. Zie Implementeren - CLI of Implementeren - PowerShell.

Sjabloonspecificaties kunnen worden geïmplementeerd via de portal, PowerShell, Azure CLI of als een gekoppelde sjabloon in een grotere sjabloonimplementatie. Gebruikers in een organisatie kunnen een sjabloonspecificatie implementeren in elk bereik in Azure (resourcegroep, abonnement, beheergroep of tenant).

In plaats van een pad of URI voor een sjabloon door te geven, implementeert u een sjabloonspecificatie door de resource-id op te geven. De resource-id heeft de volgende indeling:

/subscriptions/{subscription-id}/resourceGroups/{resource-group}/providers/Microsoft.Resources/templateSpecs/{template-spec-name}/versions/{template-spec-version}

U ziet dat de resource-id een versienaam bevat voor de sjabloonspecificatie.

U implementeert bijvoorbeeld een sjabloonspecificatie met de volgende opdracht.

$id = "/subscriptions/11111111-1111-1111-1111-111111111111/resourceGroups/templateSpecsRG/providers/Microsoft.Resources/templateSpecs/storageSpec/versions/1.0a"

New-AzResourceGroupDeployment `
  -TemplateSpecId $id `
  -ResourceGroupName demoRG

In de praktijk voert u doorgaans uit Get-AzTemplateSpec of az ts show haalt u de id op van de sjabloonspecificatie die u wilt implementeren.

$id = (Get-AzTemplateSpec -Name storageSpec -ResourceGroupName templateSpecsRg -Version 1.0a).Versions.Id

New-AzResourceGroupDeployment `
  -ResourceGroupName demoRG `
  -TemplateSpecId $id

U kunt ook een URL in de volgende indeling openen om een sjabloonspecificatie te implementeren:

https://portal.azure.com/#create/Microsoft.Template/templateSpecVersionId/%2fsubscriptions%2f{subscription-id}%2fresourceGroups%2f{resource-group-name}%2fproviders%2fMicrosoft.Resources%2ftemplateSpecs%2f{template-spec-name}%2fversions%2f{template-spec-version}

Parameters

Het doorgeven van parameters aan sjabloonspecificatie is precies hetzelfde als het doorgeven van parameters aan een ARM-sjabloon. Voeg de parameterwaarden inline of in een parameterbestand toe.

Als u een parameter inline wilt doorgeven, gebruikt u:

New-AzResourceGroupDeployment `
  -TemplateSpecId $id `
  -ResourceGroupName demoRG `
  -StorageAccountType Standard_GRS

Als u een lokaal parameterbestand wilt maken, gebruikt u:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "StorageAccountType": {
      "value": "Standard_GRS"
    }
  }
}

Geef dat parameterbestand door met:

New-AzResourceGroupDeployment `
  -TemplateSpecId $id `
  -ResourceGroupName demoRG `
  -TemplateParameterFile ./mainTemplate.parameters.json

Versiebeheer

Wanneer u een sjabloonspecificatie maakt, geeft u er een versienaam voor op. Tijdens het herhalen van de sjablooncode kunt u een bestaande versie (voor hotfixes) bijwerken of een nieuwe versie publiceren. De versie is een tekenreeks. U kunt ervoor kiezen om elk versiebeheersysteem te volgen, inclusief semantische versiebeheer. Gebruikers van de sjabloonspecificatie kunnen de versienaam opgeven die ze willen gebruiken bij het implementeren ervan. U kunt een onbeperkt aantal versies hebben.

Tags gebruiken

Tags zijn een hulpmiddel bij het logisch ordenen van uw resources. U kunt tags toevoegen aan sjabloonspecificaties met behulp van Azure PowerShell en Azure CLI:

New-AzTemplateSpec `
  -Name storageSpec `
  -Version 1.0a `
  -ResourceGroupName templateSpecsRg `
  -Location westus2 `
  -TemplateFile ./mainTemplate.json `
  -Tag @{Dept="Finance";Environment="Production"}
Set-AzTemplateSpec `
  -Name storageSpec `
  -Version 1.0a `
  -ResourceGroupName templateSpecsRg `
  -Location westus2 `
  -TemplateFile ./mainTemplate.json `
  -Tag @{Dept="Finance";Environment="Production"}

Wanneer u een sjabloonspecificatie maakt of wijzigt met de opgegeven versieparameter, maar zonder de parameter tag/tags:

  • Als de sjabloonspecificatie bestaat en tags bevat, maar de versie niet bestaat, neemt de nieuwe versie dezelfde tags over als de bestaande sjabloonspecificatie.

Wanneer u een sjabloonspecificatie maakt of wijzigt met zowel de parameter tag/tags als de versieparameter die is opgegeven:

  • Als zowel de sjabloonspecificatie als de versie niet bestaat, worden de tags toegevoegd aan zowel de nieuwe sjabloonspecificatie als de nieuwe versie.
  • Als de sjabloonspecificatie bestaat, maar de versie niet bestaat, worden de tags alleen toegevoegd aan de nieuwe versie.
  • Als zowel de sjabloonspecificatie als de versie bestaan, zijn de tags alleen van toepassing op de versie.

Wanneer u een sjabloon wijzigt met de parameter tag/tags die is opgegeven, maar zonder de opgegeven versieparameter, worden de tags alleen toegevoegd aan de sjabloonspecificatie.

Een sjabloonspecificatie maken met gekoppelde sjablonen

Als de hoofdsjabloon voor de sjabloonspecificatie verwijst naar gekoppelde sjablonen, kunnen de PowerShell- en CLI-opdrachten automatisch de gekoppelde sjablonen vinden en inpakken vanaf uw lokale station. U hoeft geen opslagaccounts of opslagplaatsen handmatig te configureren om de sjabloonspecificaties te hosten. Alles staat op zichzelf in de sjabloonspecificatieresource.

Het volgende voorbeeld bestaat uit een hoofdsjabloon met twee gekoppelde sjablonen. Het voorbeeld is alleen een fragment van de sjabloon. U ziet dat er een eigenschap met de naam relativePath wordt gebruikt om een koppeling naar de andere sjablonen te maken. U moet of 2020-06-01 hoger gebruiken apiVersion voor de implementatieresource.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  ...
  "resources": [
    {
      "type": "Microsoft.Resources/deployments",
      "apiVersion": "2020-06-01",
      ...
      "properties": {
        "mode": "Incremental",
        "templateLink": {
          "relativePath": "artifacts/webapp.json"
        }
      }
    },
    {
      "type": "Microsoft.Resources/deployments",
      "apiVersion": "2020-06-01",
      ...
      "properties": {
        "mode": "Incremental",
        "templateLink": {
          "relativePath": "artifacts/database.json"
        }
      }
    }
  ],
  "outputs": {}
}

Wanneer de PowerShell- of CLI-opdracht voor het maken van de sjabloonspecificatie wordt uitgevoerd voor het vorige voorbeeld, vindt de opdracht drie bestanden: de hoofdsjabloon, de web-app-sjabloon (webapp.json) en de databasesjabloon (database.json) en verpakt deze in de sjabloonspecificatie.

Zie Zelfstudie: Een sjabloonspecificatie maken met gekoppelde sjablonen voor meer informatie.

Sjabloonspecificatie implementeren als een gekoppelde sjabloon

Nadat u een sjabloonspecificatie hebt gemaakt, kunt u deze eenvoudig opnieuw gebruiken vanuit een ARM-sjabloon of een andere sjabloonspecificatie. U koppelt een sjabloonspecificatie door de resource-id toe te voegen aan uw sjabloon. De gekoppelde sjabloonspecificatie wordt automatisch geïmplementeerd wanneer u de hoofdsjabloon implementeert. Met dit gedrag kunt u modulaire sjabloonspecificaties ontwikkelen en deze indien nodig opnieuw gebruiken.

U kunt bijvoorbeeld een sjabloonspecificatie maken waarmee netwerkresources worden geïmplementeerd en een andere sjabloonspecificatie waarmee opslagresources worden geïmplementeerd. In ARM-sjablonen koppelt u deze twee sjabloonspecificaties wanneer u netwerk- of opslagresources moet configureren.

Het volgende voorbeeld is vergelijkbaar met het vorige voorbeeld, maar u gebruikt de id eigenschap om een koppeling te maken naar een sjabloonspecificatie in plaats van de relativePath eigenschap om een koppeling naar een lokale sjabloon te maken. Gebruiken 2020-06-01 voor API-versie voor de implementatieresource. In het voorbeeld bevinden de sjabloonspecificaties zich in een resourcegroep met de naam templateSpecsRG.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  ...
  "resources": [
    {
      "type": "Microsoft.Resources/deployments",
      "apiVersion": "2020-06-01",
      "name": "networkingDeployment",
      ...
      "properties": {
        "mode": "Incremental",
        "templateLink": {
          "id": "[resourceId('templateSpecsRG', 'Microsoft.Resources/templateSpecs/versions', 'networkingSpec', '1.0a')]"
        }
      }
    },
    {
      "type": "Microsoft.Resources/deployments",
      "apiVersion": "2020-06-01",
      "name": "storageDeployment",
      ...
      "properties": {
        "mode": "Incremental",
        "templateLink": {
          "id": "[resourceId('templateSpecsRG', 'Microsoft.Resources/templateSpecs/versions', 'storageSpec', '1.0a')]"
        }
      }
    }
  ],
  "outputs": {}
}

Zie Zelfstudie: Een sjabloonspecificatie implementeren als een gekoppelde sjabloon voor meer informatie over het koppelen van sjabloonspecificaties.

Volgende stappen