Udostępnij za pośrednictwem


Samouczek: dodawanie parametrów do szablonu usługi ARM

W poprzednim samouczku przedstawiono sposób dodawania konta usługi Azure Storage do szablonu i wdrażania go. Z tego samouczka dowiesz się, jak ulepszyć szablon usługi Azure Resource Manager (szablon usługi ARM), dodając parametry. Wykonanie tej instrukcji trwa 14 minut .

Wymagania wstępne

Zalecamy ukończenie samouczka dotyczącego zasobów, ale nie jest to wymagane.

Musisz mieć zainstalowany Visual Studio Code i pracować z rozszerzeniem Azure Resource Manager Tools oraz interfejsem Azure PowerShell lub interfejsem azure Command-Line (CLI). Aby uzyskać więcej informacji, zobacz narzędzia szablonów.

Przeglądanie szablonu

Na końcu poprzedniego samouczka szablon ma następujący plik JSON:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2021-09-01",
      "name": "{provide-unique-name}",
      "location": "eastus",
      "sku": {
        "name": "Standard_LRS"
      },
      "kind": "StorageV2",
      "properties": {
        "supportsHttpsTrafficOnly": true
      }
    }
  ]
}

Możesz zauważyć, że występuje problem z tym szablonem. Nazwa konta magazynu jest zapisana w kodzie na stałe. Każdorazowe użycie tego szablonu spowoduje wdrożenie tego samego konta magazynu. Aby wdrożyć konto magazynu o innej nazwie, musisz utworzyć nowy szablon, który oczywiście nie jest praktycznym sposobem automatyzacji wdrożeń.

Utwórz szablon wielokrotnego użytku

Aby można było ponownie używać szablonu, dodajmy parametr, którego można użyć do przekazania nazwy konta magazynu. Wyróżniony plik JSON w poniższym przykładzie przedstawia zmiany w szablonie. Parametr storageName jest identyfikowany jako ciąg. Nazwa konta magazynu to wszystkie małe litery lub cyfry i ma limit 24 znaków.

Skopiuj cały plik i zastąp szablon jego zawartością.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storageName": {
      "type": "string",
      "minLength": 3,
      "maxLength": 24
    }
  },
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2021-09-01",
      "name": "[parameters('storageName')]",
      "location": "eastus",
      "sku": {
        "name": "Standard_LRS"
      },
      "kind": "StorageV2",
      "properties": {
        "supportsHttpsTrafficOnly": true
      }
    }
  ]
}

Wdrażanie szablonu

Wdróżmy szablon. Poniższy przykład wdraża szablon przy użyciu interfejsu wiersza polecenia platformy Azure lub programu PowerShell. Zwróć uwagę, że w poleceniu wdrażania podaj nazwę konta magazynu jako jedną z wartości. Jako nazwę konta magazynu podaj tę samą nazwę, która została użyta w poprzednim samouczku.

Jeśli grupa zasobów nie została utworzona, zobacz Tworzenie grupy zasobów. W przykładzie przyjęto założenie, że zmienna templateFile została ustawiona na ścieżkę pliku szablonu, jak pokazano w pierwszym samouczku.

New-AzResourceGroupDeployment `
  -Name addnameparameter `
  -ResourceGroupName myResourceGroup `
  -TemplateFile $templateFile `
  -storageName "{your-unique-name}"

Omówienie aktualizacji zasobów

Po wdrożeniu konta magazynu o tej samej nazwie, która została użyta wcześniej, możesz się zastanawiać, jak ponowne wdrożenie wpływa na zasób.

Jeśli zasób już istnieje i nie ma żadnych zmian we właściwościach, nie ma potrzeby dalszych działań. Jeśli zasób istnieje i właściwość ulegnie zmianie, zostanie ona zaktualizowana. Jeśli zasób nie istnieje, zostanie utworzony.

Ten sposób obsługi aktualizacji oznacza, że szablon może zawierać wszystkie zasoby potrzebne do rozwiązania platformy Azure. Możesz bezpiecznie ponownie wdrożyć szablon i wiedzieć, że zasoby zmieniają się lub są tworzone tylko w razie potrzeby. Jeśli na przykład dodasz pliki do konta magazynu, możesz ponownie wdrożyć konto magazynu bez utraty plików.

Dostosowywanie według środowiska

Parametry umożliwiają dostosowanie wdrożenia przez podanie wartości dostosowanych do określonego środowiska. Możesz na przykład przekazać różne wartości na podstawie tego, czy wdrażasz w środowisku deweloperskim, testowym, czy produkcyjnym.

Poprzedni szablon zawsze wdraża standardowe konto magazynu lokalnie nadmiarowego (LRS) Standard_LRS . W zależności od środowiska może być konieczna elastyczność wdrażania różnych jednostek MAGAZYNowych (SKU). W poniższym przykładzie przedstawiono zmiany w celu dodania parametru dla jednostki SKU. Skopiuj cały plik i wklej go w szablonie.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storageName": {
      "type": "string",
      "minLength": 3,
      "maxLength": 24
    },
    "storageSKU": {
      "type": "string",
      "defaultValue": "Standard_LRS",
      "allowedValues": [
        "Standard_LRS",
        "Standard_GRS",
        "Standard_RAGRS",
        "Standard_ZRS",
        "Premium_LRS",
        "Premium_ZRS",
        "Standard_GZRS",
        "Standard_RAGZRS"
      ]
    }
  },
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2021-09-01",
      "name": "[parameters('storageName')]",
      "location": "eastus",
      "sku": {
        "name": "[parameters('storageSKU')]"
      },
      "kind": "StorageV2",
      "properties": {
        "supportsHttpsTrafficOnly": true
      }
    }
  ]
}

Parametr storageSKU ma wartość domyślną. Użyj tej wartości, gdy wdrożenie nie określi go. Zawiera również listę dozwolonych wartości. Te wartości są zgodne z wartościami wymaganymi do utworzenia konta magazynu. Chcesz, aby użytkownicy szablonu przekazali jednostki SKU, które działają.

Ponowne wdrażanie szablonu

Wszystko jest gotowe do ponownego wdrożenia. Ponieważ domyślna jednostka SKU jest ustawiona na Standard_LRS, podano już wartość parametru.

New-AzResourceGroupDeployment `
  -Name addskuparameter `
  -ResourceGroupName myResourceGroup `
  -TemplateFile $templateFile `
  -storageName "{your-unique-name}"

Uwaga

Jeśli wdrożenie zakończy się niepowodzeniem, użyj przełącznika verbose , aby uzyskać informacje o tworzonych zasobach. Użyj przełącznika, debug aby uzyskać więcej informacji na temat debugowania.

Aby zobaczyć elastyczność szablonu, wdróżmy go ponownie. Tym razem ustaw parametr jednostki SKU na standardowy magazyn geograficznie nadmiarowy (GRS) Standard_GRS. Możesz przekazać nową nazwę, aby utworzyć inne konto magazynu lub użyć tej samej nazwy, aby zaktualizować istniejące konto magazynu. Obie opcje działają.

New-AzResourceGroupDeployment `
  -Name usenondefaultsku `
  -ResourceGroupName myResourceGroup `
  -TemplateFile $templateFile `
  -storageName "{your-unique-name}" `
  -storageSKU Standard_GRS

Na koniec uruchomimy jeszcze jeden test i zobaczmy, co się stanie po przekazaniu jednostki SKU, która nie jest jedną z dozwolonych wartości. W tym przypadku przetestujemy scenariusz, w którym użytkownik szablonu uważa, że podstawowa jest jedną z jednostek SKU.

New-AzResourceGroupDeployment `
  -Name testskuparameter `
  -ResourceGroupName myResourceGroup `
  -TemplateFile $templateFile `
  -storageName "{your-unique-name}" `
  -storageSKU basic

Polecenie kończy się niepowodzeniem z komunikatem o błędzie, który daje dozwolone wartości. Procesor ARM znajduje błąd przed rozpoczęciem wdrażania.

Czyszczenie zasobów

Jeśli przejdziesz do następnego samouczka, nie musisz usuwać grupy zasobów.

Jeśli zatrzymasz się teraz, możesz wyczyścić wdrożone zasoby, usuwając grupę zasobów.

  1. W Azure Portal wybierz pozycję Grupa zasobów z menu po lewej stronie.
  2. Wpisz nazwę grupy zasobów w polu Filtruj dla dowolnego pola ... tekstowego.
  3. Zaznacz pole wyboru obok pozycji myResourceGroup i wybierz pozycję myResourceGroup lub nazwę grupy zasobów.
  4. Wybierz pozycję Usuń grupę zasobów z górnego menu.

Następne kroki

Ulepszono szablon utworzony w pierwszym samouczku przez dodanie parametrów. W następnym samouczku poznasz funkcje szablonu.