Specifikace šablony Azure Resource Manager

Specifikace šablony je typ prostředku pro uložení šablony Azure Resource Manager (šablony ARM) v Azure pro pozdější nasazení. Tento typ prostředku umožňuje sdílet šablony ARM s ostatními uživateli ve vaší organizaci. Stejně jako jakýkoli jiný prostředek Azure můžete ke sdílení specifikace šablony použít řízení přístupu na základě role v Azure (Azure RBAC).

Microsoft.Resources/templateSpecs je typ prostředku pro specifikace šablony. Skládá se z hlavní šablony a libovolného počtu propojených šablon. Azure bezpečně ukládá specifikace šablon ve skupinách prostředků. Specifikace šablon podporují správu verzí.

K nasazení specifikace šablony použijete standardní nástroje Azure, jako jsou PowerShell, Azure CLI, Azure Portal, REST a další podporované sady SDK a klienti. Použijete stejné příkazy jako pro šablonu.

Poznámka

Pokud chcete s Azure PowerShell použít specifikaci šablony, musíte nainstalovat verzi 5.0.0 nebo novější. Pokud ho chcete použít s Azure CLI, použijte verzi 2.14.2 nebo novější.

Při návrhu nasazení vždy zvažte životní cyklus prostředků a seskupte prostředky, které sdílejí podobný životní cyklus, do jedné specifikace šablony. Vaše nasazení například zahrnují více instancí služby Azure Cosmos DB, přičemž každá instance obsahuje vlastní databáze a kontejnery. Vzhledem k tomu, že se databáze a kontejnery příliš nemění, chcete vytvořit jednu specifikaci šablony, která bude zahrnovat instanci databáze Cosmo a její podkladové databáze a kontejnery. V šablonách pak můžete použít podmíněné příkazy spolu se smyčkami kopírování k vytvoření více instancí těchto prostředků.

Školicí materiály

Další informace o specifikacích šablon a praktické pokyny najdete v tématu Publikování knihoven opakovaně použitelného kódu infrastruktury pomocí specifikací šablon.

Tip

Doporučujeme Bicep , protože nabízí stejné funkce jako šablony ARM a jeho použití je jednodušší. Další informace najdete v tématu Specifikace šablony Azure Resource Manager v bicep.

Proč používat specifikace šablon?

Specifikace šablon poskytují následující výhody:

  • Pro specifikaci šablony použijete standardní šablony ARM.
  • Přístup spravujete prostřednictvím Azure RBAC, nikoli prostřednictvím tokenů SAS.
  • Uživatelé můžou nasadit specifikaci šablony, aniž by k šabloně měli přístup pro zápis.
  • Specifikaci šablony můžete integrovat do existujícího procesu nasazení, jako je skript PowerShellu nebo kanál DevOps.

Specifikace šablon umožňují vytvářet kanonické šablony a sdílet je s týmy ve vaší organizaci. Specifikace šablon jsou bezpečné, protože jsou k dispozici pro Azure Resource Manager pro nasazení, ale nejsou přístupné uživatelům bez správného oprávnění. Uživatelé potřebují k nasazení šablony jenom přístup pro čtení specifikace šablony, takže můžete šablonu sdílet, aniž by ji ostatní mohli upravovat.

Pokud máte šablony aktuálně v úložišti Nebo účtu úložiště GitHub, při pokusu o jejich sdílení a používání narazíte na několik výzev. Pokud chcete šablonu nasadit, musíte ji buď nastavit jako veřejně přístupnou, nebo spravovat přístup pomocí tokenů SAS. Uživatelé můžou toto omezení obejít tak, že vytvoří místní kopie, které se nakonec liší od původní šablony. Specifikace šablon zjednodušují sdílení šablon.

Šablony, které zahrnete do specifikace šablon, by měli správci ve vaší organizaci ověřit, aby se řídily požadavky a pokyny organizace.

Požadovaná oprávnění

Pro specifikaci šablony jsou definované dvě předdefinované role Azure:

Kromě toho potřebujete také oprávnění k nasazení souboru Bicep. Viz Nasazení – rozhraní příkazového řádku nebo Nasazení – PowerShell.

Vytvoření specifikace šablony

Následující příklad ukazuje jednoduchou šablonu pro vytvoření účtu úložiště v 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')]"
      }
    }
  ]
}

Při vytváření specifikace šablony se příkazy PowerShellu nebo rozhraní příkazového řádku předají hlavnímu souboru šablony. Pokud hlavní šablona odkazuje na propojené šablony, příkazy je najdou a zabalí, aby vytvořily specifikaci šablony. Další informace najdete v tématu Vytvoření specifikace šablony s propojenými šablonami.

Vytvořte specifikaci šablony pomocí:

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

Specifikace šablon můžete vytvořit také pomocí šablon ARM. Následující šablona vytvoří specifikaci šablony pro nasazení účtu úložiště:

{
  "$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')]"
              }
            }
          ]
        }
      }
    }
  ]
}

Velikost specifikace šablony je omezená na přibližně 2 MB. Pokud velikost specifikace šablony překročí limit, zobrazí se kód chyby TemplateSpecTooLarge . Chybová zpráva říká:

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.

Všechny specifikace šablon ve vašem předplatném můžete zobrazit pomocí:

Get-AzTemplateSpec

Podrobnosti o specifikaci šablony, včetně jejích verzí, můžete zobrazit pomocí následujících možností:

Get-AzTemplateSpec -ResourceGroupName templateSpecsRG -Name storageSpec

Specifikace nasazení šablony

Po vytvoření specifikace šablony ji můžou nasadit uživatelé s rolí čtenáře specifikací šablony . Kromě toho potřebujete také oprávnění k nasazení šablony ARM. Viz Nasazení – rozhraní příkazového řádku nebo Nasazení – PowerShell.

Specifikace šablon je možné nasadit prostřednictvím portálu, PowerShellu, Azure CLI nebo jako propojené šablony ve větším nasazení šablony. Uživatelé v organizaci můžou nasadit specifikaci šablony do libovolného oboru v Azure (skupina prostředků, předplatné, skupina pro správu nebo tenant).

Místo předání cesty nebo identifikátoru URI šablony nasadíte specifikaci šablony zadáním ID jejího prostředku. ID prostředku má následující formát:

/subscriptions/{id-předplatného}/resourceGroups/{resource-group}/providers/Microsoft.Resources/templateSpecs/{template-spec-name}/versions/{template-spec-version}

Všimněte si, že ID prostředku obsahuje název verze pro specifikaci šablony.

Například pomocí následujícího příkazu nasadíte specifikaci šablony.

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

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

V praxi obvykle spustíte příkaz Get-AzTemplateSpec nebo az ts show , abyste získali ID specifikace šablony, kterou chcete nasadit.

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

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

Můžete také otevřít adresu URL v následujícím formátu a nasadit tak specifikaci šablony:

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}

Parametry

Předání parametrů do specifikace šablony se přesně podobá předávání parametrů šabloně ARM. Přidejte hodnoty parametrů buď vloženě, nebo do souboru parametrů.

Pokud chcete předat vložený parametr, použijte:

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

K vytvoření místního souboru parametrů použijte:

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

A tento soubor parametrů předejte pomocí:

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

Správa verzí

Při vytváření specifikace šablony zadáte název verze šablony. Při iteraci v kódu šablony můžete buď aktualizovat existující verzi (pro opravy hotfix), nebo publikovat novou verzi. Verze je textový řetězec. Můžete se rozhodnout, že budete používat jakýkoli systém správy verzí, včetně sémantické správy verzí. Uživatelé specifikace šablony můžou zadat název verze, kterou chtějí použít při nasazování šablony.

Použití značek

Značky pomáhají logicky uspořádat prostředky. Ke specifikacím šablon můžete přidat značky pomocí Azure PowerShell a 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"}

Při vytváření nebo úpravě specifikace šablony se zadaným parametrem verze, ale bez parametru tag/tags:

  • Pokud specifikace šablony existuje a obsahuje značky, ale verze neexistuje, nová verze zdědí stejné značky jako stávající specifikace šablony.

Při vytváření nebo úpravě specifikace šablony se zadaným parametrem tag/tags a parametrem version:

  • Pokud specifikace šablony i verze neexistují, přidají se značky do nové specifikace šablony i nové verze.
  • Pokud specifikace šablony existuje, ale verze neexistuje, značky se přidají jenom do nové verze.
  • Pokud existuje specifikace šablony i verze, značky platí pouze pro verzi.

Při úpravě šablony se zadaným parametrem tag/tags, ale bez zadaného parametru verze, se značky přidají pouze do specifikace šablony.

Vytvoření specifikace šablony s propojenými šablonami

Pokud hlavní šablona specifikace šablony odkazuje na propojené šablony, příkazy PowerShellu a rozhraní příkazového řádku můžou odkazované šablony automaticky najít a zabalit je z místního disku. Pro hostování specifikací šablony nemusíte účty úložiště ani úložiště ručně konfigurovat – vše je v prostředku specifikace šablony samostatné.

Následující příklad se skládá z hlavní šablony se dvěma propojenými šablonami. Příklad je pouze výňatek ze šablony. Všimněte si, že k propojení s ostatními šablonami používá vlastnost s názvem relativePath . Pro prostředek nasazení musíte použít apiVersion2020-06-01 nebo novější.

{
  "$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": {}
}

Při spuštění příkazu PowerShellu nebo rozhraní příkazového řádku pro vytvoření specifikace šablony pro předchozí příklad příkaz najde tři soubory – hlavní šablonu, šablonu webové aplikace (webapp.json) a šablonu databáze (database.json) – a zabalí je do specifikace šablony.

Další informace najdete v tématu Kurz: Vytvoření specifikace šablony s propojenými šablonami.

Nasazení specifikace šablony jako propojené šablony

Jakmile vytvoříte specifikaci šablony, můžete ji snadno znovu použít ze šablony ARM nebo jiné specifikace šablony. Ke specifikaci šablony se připojíte přidáním ID prostředku do šablony. Specifikace propojené šablony se automaticky nasadí při nasazení hlavní šablony. Toto chování umožňuje vyvíjet specifikace modulární šablony a podle potřeby je opakovaně používat.

Můžete například vytvořit specifikaci šablony, která nasadí síťové prostředky, a další specifikaci šablony, která nasazuje prostředky úložiště. V šablonách ARM tyto dvě specifikace šablon propojtete kdykoli potřebujete nakonfigurovat síťové prostředky nebo prostředky úložiště.

Následující příklad je podobný předchozímu příkladu id , ale vlastnost použijete k propojení se specifikací šablony místo relativePath vlastnosti pro propojení s místní šablonou. Použijte 2020-06-01 pro verzi rozhraní API pro prostředek nasazení. V tomto příkladu jsou specifikace šablony ve skupině prostředků s názvem 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": {}
}

Další informace o propojení specifikací šablon najdete v tématu Kurz: Nasazení specifikace šablony jako propojené šablony.

Další kroky