Azure Resource Manager specyfikacji szablonu

Specyfikacja szablonu to typ zasobu do przechowywania szablonu Azure Resource Manager (szablonu ARM) na platformie Azure do późniejszego wdrożenia. Ten typ zasobu umożliwia udostępnianie szablonów usługi ARM innym użytkownikom w organizacji. Podobnie jak w przypadku innych zasobów platformy Azure, możesz użyć kontroli dostępu na podstawie ról (RBAC) platformy Azure, aby udostępnić specyfikację szablonu.

Microsoft.Resources/templateSpecs to typ zasobu dla specyfikacji szablonu. Składa się on z głównego szablonu i dowolnej liczby połączonych szablonów. Platforma Azure bezpiecznie przechowuje specyfikacje szablonów w grupach zasobów. Specyfikacje szablonów obsługi wersji.

Aby wdrożyć specyfikację szablonu, należy użyć standardowych narzędzi platformy Azure, takich jak program PowerShell, interfejs wiersza polecenia platformy Azure, interfejs Azure Portal, rest i inne obsługiwane zestawy SDK i klienci. Użyj tych samych poleceń, co w przypadku szablonu.

Uwaga

Aby używać specyfikacji szablonu z Azure PowerShell, musisz zainstalować wersję 5.0.0 lub nowszą. Aby używać go z interfejsem wiersza polecenia platformy Azure, użyj wersji 2.14.2 lub nowszej.

Dlaczego warto używać specyfikacji szablonu?

Specyfikacje szablonu zapewniają następujące korzyści:

  • Używasz standardowych szablonów usługi ARM dla specyfikacji szablonu.
  • Dostępem można zarządzać za pośrednictwem kontroli RBAC platformy Azure, a nie tokenów SAS.
  • Użytkownicy mogą wdrożyć specyfikację szablonu bez dostępu do zapisu do szablonu.
  • Specyfikację szablonu można zintegrować z istniejącym procesem wdrażania, takim jak skrypt programu PowerShell lub potok DevOps.

Specyfikacje szablonów umożliwiają tworzenie szablonów kanonicznych i udostępnianie ich zespołom w organizacji. Specyfikacje szablonu są bezpieczne, ponieważ są dostępne do wdrożenia Azure Resource Manager, ale nie są dostępne dla użytkowników bez odpowiednich uprawnień. Użytkownicy potrzebują tylko dostępu do odczytu do specyfikacji szablonu, aby wdrożyć szablon, więc możesz udostępnić szablon bez zezwalania innym osobom na jego modyfikowanie.

Jeśli obecnie masz szablony w repozytorium GitHub lub na koncie magazynu, podczas próby udostępnienia szablonów i korzystania z nich może się dzieje kilka problemów. Aby wdrożyć szablon, należy publicznie udostępnić szablon lub zarządzać dostępem przy użyciu tokenów SAS. Aby ominąć to ograniczenie, użytkownicy mogą tworzyć kopie lokalne, które ostatecznie różnią się od oryginalnego szablonu. Specyfikacje szablonów upraszczają udostępnianie szablonów.

Szablony dołączane do specyfikacji szablonu powinny być weryfikowane przez administratorów w organizacji, aby spełnić wymagania i wskazówki organizacji.

Tworzenie specyfikacji szablonu

W poniższym przykładzie przedstawiono prosty szablon do tworzenia konta magazynu na platformie 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')]"
      }
    }
  ]
}

Podczas tworzenia specyfikacji szablonu polecenia programu PowerShell lub interfejsu wiersza polecenia są przekazywane do głównego pliku szablonu. Jeśli główny szablon odwołuje się do połączonych szablonów, polecenia znajdą je i spakują, aby utworzyć specyfikację szablonu. Aby dowiedzieć się więcej, zobacz Create a template spec with linked templates (Tworzenie specyfikacji szablonu za pomocą połączonych szablonów).

Utwórz specyfikację szablonu przy użyciu:

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

Wszystkie specyfikacje szablonu w ramach subskrypcji można wyświetlić przy użyciu:

Get-AzTemplateSpec

Szczegóły specyfikacji szablonu, w tym jej wersje, można wyświetlić za pomocą:

Get-AzTemplateSpec -ResourceGroupName templateSpecsRG -Name storageSpec

Wdrażanie specyfikacji szablonu

Po utworzeniu specyfikacji szablonu użytkownicy z dostępem do odczytu do specyfikacji szablonu mogą ją wdrożyć. Aby uzyskać informacje o udzielaniu dostępu, zobacz Samouczek:udzielanie grupie dostępu do zasobów platformy Azure przy użyciu Azure PowerShell .

Specyfikacje szablonu można wdrożyć za pośrednictwem portalu, programu PowerShell, interfejsu wiersza polecenia platformy Azure lub jako połączonego szablonu w większym wdrożeniu szablonu. Użytkownicy w organizacji mogą wdrożyć specyfikację szablonu w dowolnym zakresie na platformie Azure (grupa zasobów, subskrypcja, grupa zarządzania lub dzierżawa).

Zamiast przekazywania ścieżki lub identyfikatora URI dla szablonu, należy wdrożyć specyfikację szablonu, podając jego identyfikator zasobu. Identyfikator zasobu ma następujący format:

/subscriptions/{subscription-id}/resourceGroups/{grupa zasobów}/providers/Microsoft.Resources/templateSpecs/{nazwa-specyfikacji-szablonu}/versions/{template-spec-version}

Zwróć uwagę, że identyfikator zasobu zawiera nazwę wersji dla specyfikacji szablonu.

Na przykład wdrożysz specyfikację szablonu za pomocą następującego polecenia.

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

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

W praktyce zwykle uruchamiasz program lub , aby uzyskać identyfikator specyfikacji Get-AzTemplateSpec az ts show szablonu, którą chcesz wdrożyć.

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

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

Możesz również otworzyć adres URL w następującym formacie, aby wdrożyć specyfikację szablonu:

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

Przekazywanie parametrów do specyfikacji szablonu jest dokładnie takie samo jak przekazywanie parametrów do szablonu usługi ARM. Dodaj wartości parametrów w tekście lub w pliku parametrów.

Aby przekazać parametr w tekście, użyj:

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

Aby utworzyć lokalny plik parametrów, użyj:

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

Następnie przekaż ten plik parametrów za pomocą:

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

Przechowywanie wersji

Podczas tworzenia specyfikacji szablonu należy podać dla niego nazwę wersji. Podczas iterowania kodu szablonu możesz zaktualizować istniejącą wersję (w przypadku poprawek) lub opublikować nową wersję. Wersja jest ciągiem tekstowym. Możesz wybrać dowolny system wersjonarowania, w tym semantyczną wersję. Użytkownicy specyfikacji szablonu mogą podać nazwę wersji, której chcą używać podczas jej wdrażania.

Korzystanie z tagów

Tagi ułatwiają logiczne organizowanie zasobów. Tagi można dodawać do specyfikacji szablonu przy użyciu Azure PowerShell interfejsu wiersza polecenia platformy Azure:

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"}

Podczas tworzenia lub modyfikowania specyfikacji szablonu z określonym parametrem wersji, ale bez parametru tag/tags:

  • Jeśli specyfikacja szablonu istnieje i zawiera tagi, ale wersja nie istnieje, nowa wersja dziedziczy te same tagi co istniejąca specyfikacja szablonu.

Podczas tworzenia lub modyfikowania specyfikacji szablonu przy użyciu parametru tag/tags i określonego parametru wersji:

  • Jeśli zarówno specyfikacja szablonu, jak i wersja nie istnieją, tagi są dodawane zarówno do nowej specyfikacji szablonu, jak i nowej wersji.
  • Jeśli specyfikacja szablonu istnieje, ale wersja nie istnieje, tagi są dodawane tylko do nowej wersji.
  • Jeśli istnieje zarówno specyfikacja szablonu, jak i wersja, tagi mają zastosowanie tylko do wersji.

Podczas modyfikowania szablonu z określonym parametrem tag/tags, ale bez określonego parametru wersji tagi są dodawane tylko do specyfikacji szablonu.

Tworzenie specyfikacji szablonu z połączonymi szablonami

Jeśli główny szablon specyfikacji szablonu odwołuje się do połączonych szablonów, polecenia programu PowerShell i interfejsu wiersza polecenia mogą automatycznie znaleźć i spakować połączone szablony z dysku lokalnego. Nie trzeba ręcznie konfigurować kont magazynu ani repozytoriów w celu hostowanie specyfikacji szablonu — wszystko jest samodzielne w zasobie specyfikacji szablonu.

Poniższy przykład składa się z głównego szablonu z dwoma połączonymi szablonami. Przykład jest tylko fragmentem szablonu. Zwróć uwagę, że używa właściwości o nazwie relativePath , aby połączyć się z innymi szablonami. Dla zasobu apiVersion 2020-06-01 wdrożeń należy użyć programu lub nowszego.

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

Gdy polecenie programu PowerShell lub interfejsu wiersza polecenia w celu utworzenia specyfikacji szablonu jest wykonywane dla poprzedniego przykładu, polecenie znajduje trzy pliki — główny szablon, szablon aplikacji internetowej ( ) i szablon bazy danych ( ) — i pakuje je do specyfikacji webapp.json database.json szablonu.

Aby uzyskać więcej informacji, zobacz Samouczek: tworzenie specyfikacji szablonu za pomocą połączonych szablonów.

Wdrażanie specyfikacji szablonu jako połączonego szablonu

Po utworzeniu specyfikacji szablonu można łatwo użyć jej ponownie z szablonu USŁUGI ARM lub innej specyfikacji szablonu. Aby utworzyć link do specyfikacji szablonu, dodaj jego identyfikator zasobu do szablonu. Specyfikacja połączonego szablonu jest wdrażana automatycznie podczas wdrażania szablonu głównego. To zachowanie umożliwia opracowywanie modularnych specyfikacji szablonu i ponowne używanie ich w razie potrzeby.

Można na przykład utworzyć specyfikację szablonu, która wdraża zasoby sieciowe, oraz inną specyfikację szablonu, która wdraża zasoby magazynu. W szablonach usługi ARM możesz połączyć się z tymi dwiema specyfikacjami szablonu za każdym razem, gdy musisz skonfigurować zasoby sieciowe lub magazynowe.

Poniższy przykład jest podobny do wcześniejszego przykładu, ale za pomocą właściwości można połączyć się ze specyfikacją szablonu, a nie z właściwością , aby utworzyć id relativePath link do szablonu lokalnego. Użyj 2020-06-01 dla wersji interfejsu API dla zasobu wdrożeń. W tym przykładzie specyfikacje szablonu znajdują się w grupie zasobów o nazwie 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": {}
}

Aby uzyskać więcej informacji na temat łączenia specyfikacji szablonu, zobacz Samouczek: wdrażanie specyfikacji szablonu jako połączonego szablonu.

Następne kroki