Azure Resource Manager specifikationer för mallar
En mallspecifikt är en resurstyp för lagring av en Azure Resource Manager (ARM-mall) i Azure för senare distribution. Med den här resurstypen kan du dela ARM-mallar med andra användare i din organisation. Precis som med andra Azure-resurser kan du använda rollbaserad åtkomstkontroll i Azure (Azure RBAC) för att dela mallspecifikationen.
Microsoft.Resources/templateSpecs är resurstypen för mallspecifikter. Den består av en huvudmall och val annat antal länkade mallar. Azure lagrar mallspecifikeringar i resursgrupper på ett säkert sätt. Mallspecifikationer stöd för versionshantering.
Om du vill distribuera mallspecifikationen använder du Azure-standardverktyg som PowerShell, Azure CLI, Azure Portal, REST och andra SDK:er och klienter som stöds. Du använder samma kommandon som för mallen.
Anteckning
Om du vill använda mallspecifik Azure PowerShell måste du installera version 5.0.0 eller senare. Om du vill använda den med Azure CLI använder du version 2.14.2 eller senare.
När du utformar distributionen bör du alltid tänka på livscykeln för resurserna och gruppera de resurser som delar en liknande livscykel i en enda mallspecifikt. Dina distributioner innehåller till exempel flera instanser av Cosmos DB där varje instans innehåller egna databaser och containrar. Med tanke på att databaserna och containrarna inte ändras så mycket vill du skapa en mallspecifikt för att inkludera en Cosmo DB-instans och dess underliggande databaser och containrar. Du kan sedan använda villkorssatser i mallarna tillsammans med kopieringsloopar för att skapa flera instanser av dessa resurser.
Microsoft Learn
Mer information om mallspecifikter och praktisk vägledning finns i Publicera bibliotek med återanvändbar infrastrukturkod med hjälp av mallspecifikter på Microsoft Learn.
Varför ska jag använda mallspecifikter?
Mallspecifikter ger följande fördelar:
- Du använder ARM-standardmallar för mallspecifikationen.
- Du hanterar åtkomst via Azure RBAC i stället för SAS-token.
- Användare kan distribuera mallspecifikationen utan att ha skrivbehörighet till mallen.
- Du kan integrera mallspecifikationen i en befintlig distributionsprocess, till exempel PowerShell-skript eller DevOps-pipeline.
Med mallspecifikt kan du skapa kanoniska mallar och dela dem med team i din organisation. Mallspecifikorna är säkra eftersom de är tillgängliga för Azure Resource Manager för distribution, men inte tillgängliga för användare utan rätt behörighet. Användarna behöver bara läsbehörighet till mallspecifikationen för att distribuera mallen, så du kan dela mallen utan att låta andra ändra den.
Om du för närvarande har mallar i en GitHub-lagringsplats eller lagringskonto får du flera utmaningar när du försöker dela och använda mallarna. Om du vill distribuera mallen måste du antingen göra mallen offentligt tillgänglig eller hantera åtkomst med SAS-token. För att komma runt den här begränsningen kan användarna skapa lokala kopior, som så småningom skiljer sig från den ursprungliga mallen. Mallspecifikter förenklar delningsmallar.
De mallar som du inkluderar i en mallspecifikt specifikation bör verifieras av administratörer i din organisation för att följa organisationens krav och vägledning.
Skapa mallspecifikt
I följande exempel visas en enkel mall för att skapa ett lagringskonto i 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')]"
}
}
]
}
När du skapar mallspecifikationen skickas PowerShell- eller CLI-kommandona till huvudmallfilen. Om huvudmallen refererar till länkade mallar hittar och paketerar kommandona dem för att skapa mallspecifikationen. Mer information finns i Skapa en mallspecifikt med länkade mallar.
Skapa en mallspecifikt genom att använda:
New-AzTemplateSpec -Name storageSpec -Version 1.0a -ResourceGroupName templateSpecsRg -Location westus2 -TemplateFile ./mainTemplate.json
Du kan visa alla mallspecifikationerna i din prenumeration med hjälp av:
Get-AzTemplateSpec
Du kan visa information om en mallspecifikt, inklusive dess versioner med:
Get-AzTemplateSpec -ResourceGroupName templateSpecsRG -Name storageSpec
Distribuera mallspecifikt
När du har skapat mallspecifikationen kan användare med läsbehörighet till mallspecifikationen distribuera den. Information om hur du beviljar åtkomst finns i Självstudie: Bevilja en grupp åtkomst till Azure-resurser med hjälp av Azure PowerShell.
Mallspecifikter kan distribueras via portalen, PowerShell, Azure CLI eller som en länkad mall i en större malldistribution. Användare i en organisation kan distribuera en mallspecifikation till val annat omfång i Azure (resursgrupp, prenumeration, hanteringsgrupp eller klient).
I stället för att skicka in en sökväg eller URI för en mall distribuerar du en mallspecifikt genom att ange dess resurs-ID. Resurs-ID:t har följande format:
/subscriptions/{subscription-id}/resourceGroups/{resource-group}/providers/Microsoft.Resources/templateSpecs/{template-spec-name}/versions/{template-spec-version}
Observera att resurs-ID:t innehåller ett versionsnamn för mallspecifikationen.
Du kan till exempel distribuera en mallspecifikt med följande kommando.
$id = "/subscriptions/11111111-1111-1111-1111-111111111111/resourceGroups/templateSpecsRG/providers/Microsoft.Resources/templateSpecs/storageSpec/versions/1.0a"
New-AzResourceGroupDeployment `
-TemplateSpecId $id `
-ResourceGroupName demoRG
I praktiken kör du vanligtvis eller hämtar Get-AzTemplateSpec az ts show ID:t för mallspecifikationen som du vill distribuera.
$id = (Get-AzTemplateSpec -Name storageSpec -ResourceGroupName templateSpecsRg -Version 1.0a).Versions.Id
New-AzResourceGroupDeployment `
-ResourceGroupName demoRG `
-TemplateSpecId $id
Du kan också öppna en URL i följande format för att distribuera en mallspecifikt:
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}
Parametrar
Att skicka parametrar till mallspecifikt är precis som att skicka parametrar till en ARM-mall. Lägg till parametervärdena antingen infogade eller i en parameterfil.
Om du vill skicka en infogade parameter använder du:
New-AzResourceGroupDeployment `
-TemplateSpecId $id `
-ResourceGroupName demoRG `
-StorageAccountType Standard_GRS
Om du vill skapa en lokal parameterfil använder du:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"StorageAccountType": {
"value": "Standard_GRS"
}
}
}
Och skicka parameterfilen med:
New-AzResourceGroupDeployment `
-TemplateSpecId $id `
-ResourceGroupName demoRG `
-TemplateParameterFile ./mainTemplate.parameters.json
Versionshantering
När du skapar en mallspecifikt anger du ett versionsnamn för den. När du itererar på mallkoden kan du antingen uppdatera en befintlig version (för snabbkorrigeringar) eller publicera en ny version. Versionen är en textsträng. Du kan välja att följa alla versionssystem, inklusive semantisk versionshantering. Användare av mallspecifikationen kan ange det versionsnamn som de vill använda när de distribuerar den.
Använd taggar
Taggar hjälper dig att organisera dina resurser logiskt. Du kan lägga till taggar i mallspecifikmen med hjälp Azure PowerShell och 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"}
När du skapar eller ändrar en mallspecifikt med versionsparametern angiven, men utan parametern tag/tags:
- Om mallspecifikationen finns och har taggar, men versionen inte finns, ärver den nya versionen samma taggar som den befintliga mallspecifikationen.
När du skapar eller ändrar en mallspecifikt med både tagg/taggar-parametern och versionsparametern angivna:
- Om både mallspecifikationen och versionen inte finns läggs taggarna till i både den nya mallspecifikationen och den nya versionen.
- Om mallspecifikationen finns, men versionen inte finns, läggs taggarna bara till i den nya versionen.
- Om både mallspecifikationen och versionen finns gäller taggarna endast för versionen.
När du ändrar en mall med tagg/taggar-parametern angiven men utan versionsparametern, läggs taggarna endast till i mallspecifikationen.
Skapa en mallspecifikt med länkade mallar
Om huvudmallen för mallspecifikationen refererar till länkade mallar kan PowerShell- och CLI-kommandona automatiskt hitta och paketera de länkade mallarna från den lokala enheten. Du behöver inte konfigurera lagringskonton eller lagringslager manuellt som värdar för mallspecifikt innehåll – allt är fristående i mallspecifikeringsresursen.
Följande exempel består av en huvudmall med två länkade mallar. Exemplet är bara ett utdrag av mallen. Observera att den använder en egenskap med namnet relativePath för att länka till de andra mallarna. Du måste använda apiVersion 2020-06-01 eller senare för distributionsresursen.
{
"$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": {}
}
När PowerShell- eller CLI-kommandot för att skapa mallspecifikationen körs för föregående exempel hittar kommandot tre filer – huvudmallen, webbappmallen ( ) och databasmallen ( ) – och paketerar dem i webapp.json database.json mallspecifikationen.
Mer information finns i Självstudie: Skapa en mallspecifikt med länkade mallar.
Distribuera mallspecifikt som en länkad mall
När du har skapat en mallspecifikt är det enkelt att återanvända den från en ARM-mall eller en annan mallspecifikt. Du länkar till en mallspecifikt genom att lägga till dess resurs-ID i mallen. Specifikationen för den länkade mallen distribueras automatiskt när du distribuerar huvudmallen. Med det här beteendet kan du utveckla modulära mallspecifikter och återanvända dem efter behov.
Du kan till exempel skapa en mallspecifikt som distribuerar nätverksresurser och en annan mallspecifikt som distribuerar lagringsresurser. I ARM-mallar länkar du till dessa två mallspecifikter varje gång du behöver konfigurera nätverks- eller lagringsresurser.
Följande exempel liknar det tidigare exemplet, men du använder egenskapen för att länka till en mallspecifikt i stället för egenskapen för att id länka till en lokal relativePath mall. Använd 2020-06-01 för API-version för distributionsresursen. I det här exemplet finns mallspecifikorna i en resursgrupp med namnet 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": {}
}
Mer information om hur du länkar mallspecifikter finns i Självstudie: Distribuera en mallspecifikt som en länkad mall.
Nästa steg
Information om hur du skapar och distribuerar en mallspecifikt finns i Snabbstart: Skapa och distribuera mallspecifikt.
Mer information om hur du länkar mallar i mallspecifikter finns i Självstudie: Skapa en mallspecifikt med länkade mallar.
Mer information om hur du distribuerar en mallspecifikt som en länkad mall finns i Självstudie: Distribuera en mallspecifikt som en länkad mall.