Specifikace šablon Azure Resource Manageru

Specifikace šablony je typ prostředku pro uložení šablony Azure Resource Manageru (š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 šablon. 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 u šablony.

Poznámka:

Pokud chcete použít specifikaci šablony s Azure PowerShellem, 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 navrhování nasazení vždy zvažte životní cyklus prostředků a seskupte prostředky, které sdílejí podobný životní cyklus, do specifikace jedné šablony. Vaše nasazení například zahrnují několik instancí služby Azure Cosmos DB, přičemž každá instance obsahuje vlastní databáze a kontejnery. Vzhledem k tomu, že databáze a kontejnery se moc nemění, chcete vytvořit jednu specifikaci šablony, která bude obsahovat instanci Cosmos DB a její podkladové databáze a kontejnery. Pak můžete v šablonách použít podmíněné příkazy spolu se smyčkami kopírování a vytvořit několik 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é možnosti jako šablony ARM a syntaxe se snadněji používá. Další informace najdete v tématu Specifikace šablon Azure Resource Manageru 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 místo tokenů SAS.
  • Uživatelé mohou nasadit specifikaci šablony, aniž by k šabloně měli přístup k zápisu.
  • 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 zabezpečené, protože jsou dostupné pro Azure Resource Manager pro nasazení, ale nejsou přístupné uživatelům bez správného oprávnění. Uživatelé potřebují ke specifikaci šablony přístup jen pro čtení, abyste mohli šablonu nasadit, abyste ji mohli sdílet bez toho, aby ji ostatní mohli upravovat.

Pokud aktuálně máte šablony v úložišti GitHubu nebo účtu úložiště, při pokusu o sdílení a používání šablon narazíte na několik problémů. Pokud chcete šablonu nasadit, musíte šablonu nastavit jako veřejně přístupnou nebo spravovat přístup pomocí tokenů SAS. Pokud chcete toto omezení obejít, můžou uživatelé vytvářet místní kopie, které se nakonec liší od původní šablony. Specifikace šablon zjednodušují sdílení šablon.

Šablony, které zahrnete do specifikace šablony, by měli ověřit správci ve vaší organizaci, aby postupovali podle požadavků a pokynů organizace.

Požadována oprávnění

Pro specifikaci šablony jsou definované dvě role sestavení 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ředávají hlavnímu souboru šablony. Pokud hlavní šablona odkazuje na propojené šablony, příkazy je najdou a zabalí k vytvoření specifikace š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žnou velikost 2 MB. Pokud velikost specifikace šablony překročí limit, získáte 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

Můžete zobrazit podrobnosti o specifikaci šablony, včetně jeho verzí:

Get-AzTemplateSpec -ResourceGroupName templateSpecsRG -Name storageSpec

Nasazení specifikace šablony

Po vytvoření specifikace šablony ji můžou uživatelé s rolí čtenáře specifikací šablony nasadit. 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 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 pro šablonu nasadíte specifikaci šablony zadáním ID prostředku. ID prostředku má následující formát:

/subscriptions/{subscription-id}/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 specifikace šablony.

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

$id = "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/templateSpecsRG/providers/Microsoft.Resources/templateSpecs/storageSpec/versions/1.0a"

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

V praxi obvykle spustíte Get-AzTemplateSpec nebo az ts show získáte ID specifikace šablony, kterou chcete nasadit.

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

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

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

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ávání parametrů do specifikace šablony se 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

Pokud chcete vytvořit místní soubor 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 takto:

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

Vytváření verzí

Když vytvoříte specifikaci šablony, zadáte pro ni název verze. Při iteraci kódu šablony můžete buď aktualizovat existující verzi (pro opravy hotfix), nebo publikovat novou verzi. Verze je textový řetězec. Můžete postupovat podle libovolného systému 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 nasazení. Můžete mít neomezený počet verzí.

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 PowerShellu 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 dědí stejné značky jako existující specifikace šablony.

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

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

Při úpravě šablony se zadaným parametrem tag/tags, ale bez zadaného parametru verze se značky přidají jenom 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 automaticky najít a zabalit propojené šablony z místního disku. Nemusíte ručně konfigurovat účty úložiště ani úložiště pro hostování specifikací šablony – všechno je v prostředku specifikace šablony samostatně obsažené.

Následující příklad se skládá z hlavní šablony se dvěma propojenými šablonami. Příklad je pouze výňatek šablony. Všimněte si, že používá vlastnost pojmenovanou relativePath k propojení s ostatními šablonami. Pro prostředek nasazení musíte použít apiVersion 2020-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": {}
}

Když se pro předchozí příklad spustí příkaz PowerShellu nebo rozhraní příkazového řádku pro vytvoření specifikace šablony, 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 použít z šablony ARM nebo jiné specifikace šablony. K specifikaci šablony se připojíte tak, že do šablony přidáte ID prostředku. Specifikace propojené šablony se automaticky nasadí při nasazení hlavní šablony. Toto chování umožňuje vyvíjet specifikace modulárních šablon 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á nasadí prostředky úložiště. V šablonách ARM propojtete tyto dvě specifikace šablon, 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, ale vlastnost použijete id k propojení se specifikací šablony místo relativePath vlastnosti pro propojení s místní šablonou. Používá se 2020-06-01 pro verzi rozhraní API pro prostředek nasazení. V 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