Opis struktury i składni szablonów usługi ARM

W tym artykule opisano strukturę szablonu usługi Azure Resource Manager (szablon usługi ARM). Przedstawia on różne sekcje szablonu i właściwości, które są dostępne w tych sekcjach.

Ten artykuł jest przeznaczony dla użytkowników, którzy znają szablony usługi ARM. Zawiera szczegółowe informacje o strukturze szablonu. Aby zapoznać się z samouczkiem krok po kroku, który przeprowadzi Cię przez proces tworzenia szablonu, zobacz Samouczek: tworzenie i wdrażanie pierwszego szablonu usługi ARM. Aby dowiedzieć się więcej o szablonach usługi ARM za pomocą zestawu z przewodnikiem modułów learn, zobacz Wdrażanie zasobów na platformie Azure i zarządzanie nimi przy użyciu szablonów usługi ARM.

Porada

Bicep to nowy język, który oferuje te same możliwości co szablony usługi ARM, ale ze składnią, która jest łatwiejsza do użycia. Jeśli rozważasz infrastrukturę jako opcje kodu, zalecamy zapoznanie się z kodem Bicep.

Aby dowiedzieć się więcej o elementach pliku Bicep, zobacz Omówienie struktury i składni plików Bicep.

Template format (Format szablonu)

W najprostszej strukturze szablon ma następujące elementy:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "",
  "apiProfile": "",
  "parameters": {  },
  "variables": {  },
  "functions": [  ],
  "resources": [  ],
  "outputs": {  }
}
Nazwa elementu Wymagane Opis
$schema Tak Lokalizacja pliku schematu JavaScript Object Notation (JSON), który opisuje wersję języka szablonu. Używany numer wersji zależy od zakresu wdrożenia i edytora JSON.

Jeśli używasz Visual Studio Code z rozszerzeniem narzędzi usługi Azure Resource Manager, użyj najnowszej wersji wdrożeń grup zasobów:
https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#

Inne edytory (w tym Visual Studio) mogą nie być w stanie przetworzyć tego schematu. W przypadku tych edytorów użyj:
https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#

W przypadku wdrożeń subskrypcji użyj:
https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#

W przypadku wdrożeń grup zarządzania użyj:
https://schema.management.azure.com/schemas/2019-08-01/managementGroupDeploymentTemplate.json#

W przypadku wdrożeń dzierżawy użyj:
https://schema.management.azure.com/schemas/2019-08-01/tenantDeploymentTemplate.json#
contentVersion Tak Wersja szablonu (na przykład 1.0.0.0). Możesz podać dowolną wartość dla tego elementu. Ta wartość służy do dokumentowania znaczących zmian w szablonie. Podczas wdrażania zasobów przy użyciu szablonu można użyć tej wartości, aby upewnić się, że jest używany właściwy szablon.
apiProfile Nie Wersja interfejsu API, która służy jako kolekcja wersji interfejsu API dla typów zasobów. Użyj tej wartości, aby uniknąć konieczności określania wersji interfejsu API dla każdego zasobu w szablonie. Po określeniu wersji profilu interfejsu API i nie określisz wersji interfejsu API dla typu zasobu, Resource Manager używa wersji interfejsu API dla tego typu zasobu zdefiniowanego w profilu.

Właściwość profilu interfejsu API jest szczególnie przydatna podczas wdrażania szablonu w różnych środowiskach, takich jak Azure Stack i globalna platforma Azure. Użyj wersji profilu interfejsu API, aby upewnić się, że szablon automatycznie używa wersji obsługiwanych w obu środowiskach. Aby uzyskać listę bieżących wersji profilu interfejsu API i wersji interfejsu API zasobów zdefiniowanych w profilu, zobacz Profil interfejsu API.

Aby uzyskać więcej informacji, zobacz Śledzenie wersji przy użyciu profilów interfejsu API.
parameters Nie Wartości podane podczas wdrażania w celu dostosowania wdrożenia.
Zmiennych Nie Wartości, które są używane jako fragmenty JSON w szablonie, aby uprościć wyrażenia języka szablonu.
Funkcje Nie Funkcje zdefiniowane przez użytkownika, które są dostępne w szablonie.
Zasobów Tak Typy zasobów, które są wdrażane lub aktualizowane w grupie zasobów lub subskrypcji.
Wyjść Nie Wartości zwracane po wdrożeniu.

Każdy element ma właściwości, które można ustawić. W tym artykule opisano bardziej szczegółowo sekcje szablonu.

Parametry

parameters W sekcji szablonu określ wartości, które można wprowadzić podczas wdrażania zasobów. W szablonie są ograniczone do 256 parametrów . Liczbę parametrów można zmniejszyć przy użyciu obiektów zawierających wiele właściwości.

Dostępne są następujące właściwości parametrów:

"parameters": {
  "<parameter-name>" : {
    "type" : "<type-of-parameter-value>",
    "defaultValue": "<default-value-of-parameter>",
    "allowedValues": [ "<array-of-allowed-values>" ],
    "minValue": <minimum-value-for-int>,
    "maxValue": <maximum-value-for-int>,
    "minLength": <minimum-length-for-string-or-array>,
    "maxLength": <maximum-length-for-string-or-array-parameters>,
    "metadata": {
      "description": "<description-of-the parameter>"
    }
  }
}
Nazwa elementu Wymagane Opis
nazwa-parametru Tak Nazwa parametru. Musi być prawidłowym identyfikatorem języka JavaScript.
typ Tak Typ wartości parametru. Dozwolone typy i wartości to ciąg, securestring, int, bool, object, secureObject i array. Zobacz Typy danych w szablonach usługi ARM.
Defaultvalue Nie Wartość domyślna parametru, jeśli dla parametru nie zostanie podana żadna wartość.
Allowedvalues Nie Tablica dozwolonych wartości parametru, aby upewnić się, że podano odpowiednią wartość.
Minvalue Nie Minimalna wartość parametrów typu int, ta wartość jest inkluzywna.
Maxvalue Nie Maksymalna wartość parametrów typu int, ta wartość jest inkluzywna.
Minlength Nie Minimalna długość parametrów ciągu, bezpiecznego ciągu i typu tablicy, ta wartość jest inkluzywna.
Maxlength Nie Maksymalna długość parametrów ciągu, bezpiecznego ciągu i typu tablicy jest inkluzywna.
description (opis) Nie Opis parametru wyświetlanego użytkownikom za pośrednictwem portalu. Aby uzyskać więcej informacji, zobacz Komentarze w szablonach.

Aby zapoznać się z przykładami używania parametrów, zobacz Parametry w szablonach usługi ARM.

W pliku Bicep zobacz parametry.

Zmienne

variables W sekcji skonstruujesz wartości, które mogą być używane w całym szablonie. Nie trzeba definiować zmiennych, ale często upraszczają szablon przez zmniejszenie złożonych wyrażeń. Format każdej zmiennej jest zgodny z jednym z typów danych. W szablonie są ograniczone do 256 zmiennych .

W poniższym przykładzie przedstawiono dostępne opcje definiowania zmiennej:

"variables": {
  "<variable-name>": "<variable-value>",
  "<variable-name>": {
    <variable-complex-type-value>
  },
  "<variable-object-name>": {
    "copy": [
      {
        "name": "<name-of-array-property>",
        "count": <number-of-iterations>,
        "input": <object-or-value-to-repeat>
      }
    ]
  },
  "copy": [
    {
      "name": "<variable-array-name>",
      "count": <number-of-iterations>,
      "input": <object-or-value-to-repeat>
    }
  ]
}

Aby uzyskać informacje na temat używania copy metody do tworzenia kilku wartości dla zmiennej, zobacz Iteracja zmiennej.

Przykłady używania zmiennych można znaleźć w temacie Zmienne w szablonie usługi ARM.

W pliku Bicep zobacz zmienne.

Funkcje

W szablonie możesz utworzyć własne funkcje. Te funkcje są dostępne do użycia w szablonie. Zazwyczaj definiujesz skomplikowane wyrażenia, których nie chcesz powtarzać w całym szablonie. Funkcje zdefiniowane przez użytkownika są tworzone na podstawie wyrażeń i funkcji obsługiwanych w szablonach.

Podczas definiowania funkcji użytkownika istnieją pewne ograniczenia:

  • Funkcja nie może uzyskać dostępu do zmiennych.
  • Funkcja może używać tylko parametrów zdefiniowanych w funkcji. Jeśli używasz funkcji parameters w funkcji zdefiniowanej przez użytkownika, masz ograniczenie do parametrów dla tej funkcji.
  • Funkcja nie może wywoływać innych funkcji zdefiniowanych przez użytkownika.
  • Funkcja nie może używać funkcji reference.
  • Parametry funkcji nie mogą mieć wartości domyślnych.
"functions": [
  {
    "namespace": "<namespace-for-functions>",
    "members": {
      "<function-name>": {
        "parameters": [
          {
            "name": "<parameter-name>",
            "type": "<type-of-parameter-value>"
          }
        ],
        "output": {
          "type": "<type-of-output-value>",
          "value": "<function-return-value>"
        }
      }
    }
  }
],
Nazwa elementu Wymagane Opis
namespace Tak Przestrzeń nazw dla funkcji niestandardowych. Użyj polecenia , aby uniknąć konfliktów nazewnictwa z funkcjami szablonu.
nazwa-funkcji Tak Nazwa funkcji niestandardowej. Podczas wywoływania funkcji połącz nazwę funkcji z przestrzenią nazw. Aby na przykład wywołać funkcję o nazwie uniqueName w przestrzeni nazw contoso, użyj polecenia "[contoso.uniqueName()]".
nazwa-parametru Nie Nazwa parametru, który ma być używany w funkcji niestandardowej.
parametr-wartość Nie Typ wartości parametru. Dozwolone typy i wartości to ciąg, securestring, int, bool, object, secureObject i array.
typ danych wyjściowych Tak Typ wartości wyjściowej. Wartości wyjściowe obsługują te same typy co parametry wejściowe funkcji.
output-value Tak Wyrażenie języka szablonu, które jest oceniane i zwracane z funkcji.

Przykłady używania funkcji niestandardowych można znaleźć w temacie Funkcje zdefiniowane przez użytkownika w szablonie usługi ARM.

W aplikacji Bicep funkcje zdefiniowane przez użytkownika nie są obsługiwane. Bicep obsługuje różne funkcje i operatory.

Zasoby

resources W sekcji zdefiniujesz zasoby, które są wdrażane lub aktualizowane. W szablonie jest ograniczonych do 800 zasobów .

Zasoby są definiowane z następującą strukturą:

"resources": [
  {
      "condition": "<true-to-deploy-this-resource>",
      "type": "<resource-provider-namespace/resource-type-name>",
      "apiVersion": "<api-version-of-resource>",
      "name": "<name-of-the-resource>",
      "comments": "<your-reference-notes>",
      "location": "<location-of-resource>",
      "dependsOn": [
          "<array-of-related-resource-names>"
      ],
      "tags": {
          "<tag-name1>": "<tag-value1>",
          "<tag-name2>": "<tag-value2>"
      },
      "identity": {
        "type": "<system-assigned-or-user-assigned-identity>",
        "userAssignedIdentities": {
          "<resource-id-of-identity>": {}
        }
      },
      "sku": {
          "name": "<sku-name>",
          "tier": "<sku-tier>",
          "size": "<sku-size>",
          "family": "<sku-family>",
          "capacity": <sku-capacity>
      },
      "kind": "<type-of-resource>",
      "scope": "<target-scope-for-extension-resources>",
      "copy": {
          "name": "<name-of-copy-loop>",
          "count": <number-of-iterations>,
          "mode": "<serial-or-parallel>",
          "batchSize": <number-to-deploy-serially>
      },
      "plan": {
          "name": "<plan-name>",
          "promotionCode": "<plan-promotion-code>",
          "publisher": "<plan-publisher>",
          "product": "<plan-product>",
          "version": "<plan-version>"
      },
      "properties": {
          "<settings-for-the-resource>",
          "copy": [
              {
                  "name": ,
                  "count": ,
                  "input": {}
              }
          ]
      },
      "resources": [
          "<array-of-child-resources>"
      ]
  }
]
Nazwa elementu Wymagane Opis
Warunek Nie Wartość logiczna wskazująca, czy zasób zostanie zainicjowany podczas tego wdrożenia. Gdy truepodczas wdrażania zostanie utworzony zasób. Gdy falsezasób zostanie pominięty dla tego wdrożenia. Zobacz warunek.
typ Tak Typ zasobu. Ta wartość jest kombinacją przestrzeni nazw dostawcy zasobów i typu zasobu (na przykład Microsoft.Storage/storageAccounts). Aby określić dostępne wartości, zobacz dokumentację szablonu. W przypadku zasobu podrzędnego format typu zależy od tego, czy jest on zagnieżdżony w zasobie nadrzędnym, czy zdefiniowany poza zasobem nadrzędnym. Zobacz Ustawianie nazwy i typu dla zasobów podrzędnych.
apiVersion Tak Wersja interfejsu API REST do użycia do tworzenia zasobu. Podczas tworzenia nowego szablonu ustaw tę wartość na najnowszą wersję wdrażanego zasobu. O ile szablon działa zgodnie z potrzebami, nadal używasz tej samej wersji interfejsu API. Kontynuując korzystanie z tej samej wersji interfejsu API, można zminimalizować ryzyko zmiany sposobu działania szablonu przez nową wersję interfejsu API. Rozważ zaktualizowanie wersji interfejsu API tylko wtedy, gdy chcesz użyć nowej funkcji wprowadzonej w nowszej wersji. Aby określić dostępne wartości, zobacz dokumentację szablonu.
name Tak Nazwa zasobu. Nazwa musi być zgodna z ograniczeniami składników identyfikatora URI zdefiniowanymi w dokumencie RFC3986. Usługi platformy Azure, które uwidaczniają nazwę zasobu innym stronom, weryfikują nazwę, aby upewnić się, że nie jest to próba fałszowania innej tożsamości. W przypadku zasobu podrzędnego format nazwy zależy od tego, czy jest zagnieżdżona w zasobie nadrzędnym, czy zdefiniowana poza zasobem nadrzędnym. Zobacz Ustawianie nazwy i typu dla zasobów podrzędnych.
komentarze Nie Uwagi dotyczące dokumentowania zasobów w szablonie. Aby uzyskać więcej informacji, zobacz Komentarze w szablonach.
location Różnie Obsługiwane lokalizacje geograficzne dostarczonego zasobu. Możesz wybrać dowolną z dostępnych lokalizacji, ale zazwyczaj warto wybrać jedną, która znajduje się blisko użytkowników. Zwykle warto również umieścić zasoby, które współdziałają ze sobą w tym samym regionie. Większość typów zasobów wymaga lokalizacji, ale niektóre typy (takie jak przypisanie roli) nie wymagają lokalizacji. Zobacz Ustawianie lokalizacji zasobu.
dependsOn Nie Zasoby, które należy wdrożyć przed wdrożeniem tego zasobu. Resource Manager ocenia zależności między zasobami i wdraża je w odpowiedniej kolejności. Gdy zasoby nie są od siebie zależne, są wdrażane równolegle. Wartość może być rozdzielaną przecinkami listą nazw zasobów lub unikatowych identyfikatorów zasobów. Wyświetl listę tylko zasobów wdrożonych w tym szablonie. Zasoby, które nie są zdefiniowane w tym szablonie, muszą już istnieć. Unikaj dodawania niepotrzebnych zależności, ponieważ mogą spowalniać wdrażanie i tworzyć zależności cykliczne. Aby uzyskać wskazówki dotyczące ustawiania zależności, zobacz Definiowanie kolejności wdrażania zasobów w szablonach usługi ARM.
tags Nie Tagi skojarzone z zasobem. Stosowanie tagów w celu logicznego organizowania zasobów w ramach subskrypcji.
identity Nie Niektóre zasoby obsługują tożsamości zarządzane dla zasobów platformy Azure. Te zasoby mają obiekt tożsamości na poziomie głównym deklaracji zasobu. Można ustawić, czy tożsamość jest przypisana przez użytkownika, czy przypisana przez system. W przypadku tożsamości przypisanych przez użytkownika podaj listę identyfikatorów zasobów dla tożsamości. Ustaw klucz na identyfikator zasobu i wartość na pusty obiekt. Aby uzyskać więcej informacji, zobacz Konfigurowanie tożsamości zarządzanych dla zasobów platformy Azure na maszynie wirtualnej platformy Azure przy użyciu szablonów.
sku Nie Niektóre zasoby zezwalają na wartości definiujące jednostkę SKU do wdrożenia. Można na przykład określić typ nadmiarowości dla konta magazynu.
Rodzaju Nie Niektóre zasoby umożliwiają określenie typu wdrażanego zasobu. Można na przykład określić typ wystąpienia usługi Azure Cosmos DB do utworzenia.
scope Nie Właściwość zakresu jest dostępna tylko dla typów zasobów rozszerzeń. Użyj go podczas określania zakresu, który jest inny niż zakres wdrożenia. Zobacz Ustawianie zakresu dla zasobów rozszerzeń w szablonach usługi ARM.
kopiowanie Nie Jeśli potrzebne jest więcej niż jedno wystąpienie, liczba zasobów do utworzenia. Tryb domyślny jest równoległy. Określ tryb seryjny, jeśli nie chcesz, aby wszystkie zasoby zostały wdrożone w tym samym czasie. Aby uzyskać więcej informacji, zobacz Tworzenie kilku wystąpień zasobów w usłudze Azure Resource Manager.
plan Nie Niektóre zasoby zezwalają na wartości definiujące plan wdrożenia. Można na przykład określić obraz witryny Marketplace dla maszyny wirtualnej.
properties Nie Ustawienia konfiguracji specyficzne dla zasobu. Wartości właściwości są takie same jak wartości podane w treści żądania dla operacji interfejsu API REST (metoda PUT), aby utworzyć zasób. Można również określić tablicę kopiowania, aby utworzyć kilka wystąpień właściwości. Aby określić dostępne wartości, zobacz dokumentację szablonu.
zasoby Nie Zasoby podrzędne, które zależą od zdefiniowanego zasobu. Podaj tylko typy zasobów, które są dozwolone przez schemat zasobu nadrzędnego. Zależność od zasobu nadrzędnego nie jest dorozumiana. Należy jawnie zdefiniować zależność. Zobacz Ustawianie nazwy i typu dla zasobów podrzędnych.

W aplikacji Bicep zobacz zasoby.

Dane wyjściowe

outputs W sekcji określasz wartości zwracane z wdrożenia. Zazwyczaj zwracane są wartości z wdrożonych zasobów. W szablonie są ograniczone do 64 danych wyjściowych .

Poniższy przykład przedstawia strukturę definicji danych wyjściowych:

"outputs": {
  "<output-name>": {
    "condition": "<boolean-value-whether-to-output-value>",
    "type": "<type-of-output-value>",
    "value": "<output-value-expression>",
    "copy": {
      "count": <number-of-iterations>,
      "input": <values-for-the-variable>
    }
  }
}
Nazwa elementu Wymagane Opis
output-name Tak Nazwa wartości wyjściowej. Musi być prawidłowym identyfikatorem języka JavaScript.
Warunek Nie Wartość logiczna wskazująca, czy ta wartość wyjściowa jest zwracana. Gdy truewartość zostanie uwzględniona w danych wyjściowych wdrożenia. Gdy falsewartość wyjściowa zostanie pominięta dla tego wdrożenia. Jeśli nie zostanie określony, wartość domyślna to true.
typ Tak Typ wartości wyjściowej. Wartości wyjściowe obsługują te same typy co parametry wejściowe szablonu. Jeśli określisz ciąg securestring dla typu danych wyjściowych, wartość nie będzie wyświetlana w historii wdrożenia i nie można jej pobrać z innego szablonu. Aby użyć wartości wpisu tajnego w więcej niż jednym szablonie, zapisz wpis tajny w Key Vault i odwołaj się do wpisu tajnego w pliku parametrów. Aby uzyskać więcej informacji, zobacz Use Azure Key Vault to pass secure parameter value during deployment (Używanie usługi Azure Key Vault do przekazywania bezpiecznej wartości parametru podczas wdrażania).
wartość Nie Wyrażenie języka szablonu, które jest oceniane i zwracane jako wartość wyjściowa. Określ wartość lub kopię.
kopiowanie Nie Służy do zwracania więcej niż jednej wartości dla danych wyjściowych. Określ wartość lub kopię. Aby uzyskać więcej informacji, zobacz Iteracja danych wyjściowych w szablonach usługi ARM.

Przykłady użycia danych wyjściowych można znaleźć w temacie Outputs in ARM template (Dane wyjściowe w szablonie usługi ARM).

W aplikacji Bicep zobacz dane wyjściowe.

Komentarze i metadane

Istnieje kilka opcji dodawania komentarzy i metadanych do szablonu.

Komentarze

W przypadku komentarzy wbudowanych można użyć polecenia // lub /* ... */. W Visual Studio Code zapisz pliki parametrów z komentarzami jako typ pliku JSON z komentarzami (JSONC), w przeciwnym razie zostanie wyświetlony komunikat o błędzie z informacją "Komentarze nie są dozwolone w formacie JSON".

Uwaga

W przypadku wdrażania szablonów z komentarzami przy użyciu interfejsu wiersza polecenia platformy Azure użyj wersji 2.3.0 lub nowszej --handle-extended-json-format i określ przełącznik.

{
  "type": "Microsoft.Compute/virtualMachines",
  "apiVersion": "2018-10-01",
  "name": "[variables('vmName')]", // to customize name, change it in variables
  "location": "[parameters('location')]", //defaults to resource group location
  "dependsOn": [ /* storage account and network interface must be deployed first */
    "[resourceId('Microsoft.Storage/storageAccounts/', variables('storageAccountName'))]",
    "[resourceId('Microsoft.Network/networkInterfaces/', variables('nicName'))]"
  ],

W Visual Studio Code rozszerzenie Azure Resource Manager Tools może automatycznie wykrywać szablon usługi ARM i zmieniać tryb języka. Jeśli w prawym dolnym rogu Visual Studio Code zostanie wyświetlony szablon usługi Azure Resource Manager, możesz użyć komentarzy wbudowanych. Komentarze wbudowane nie są już oznaczone jako nieprawidłowe.

Visual Studio Code tryb szablonu usługi Azure Resource Manager

W aplikacji Bicep zobacz komentarze.

Metadane

Obiekt można dodać metadata niemal w dowolnym miejscu w szablonie. Resource Manager ignoruje obiekt, ale edytor JSON może wyświetlić ostrzeżenie, że właściwość jest nieprawidłowa. W obiekcie zdefiniuj potrzebne właściwości.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "metadata": {
    "comments": "This template was developed for demonstration purposes.",
    "author": "Example Name"
  },

W przypadku parameterselementu dodaj metadata obiekt z właściwością description .

"parameters": {
  "adminUsername": {
    "type": "string",
    "metadata": {
      "description": "User name for the Virtual Machine."
    }
  },

Podczas wdrażania szablonu za pośrednictwem portalu tekst w opisie jest automatycznie używany jako porada dla tego parametru.

Pokaż poradę parametru

W przypadku resourceselementu dodaj comments element lub metadata obiekt. W poniższym przykładzie pokazano zarówno element, jak commentsmetadata i obiekt.

"resources": [
  {
    "type": "Microsoft.Storage/storageAccounts",
    "apiVersion": "2018-07-01",
    "name": "[concat('storage', uniqueString(resourceGroup().id))]",
    "comments": "Storage account used to store VM disks",
    "location": "[parameters('location')]",
    "metadata": {
      "comments": "These tags are needed for policy compliance."
    },
    "tags": {
      "Dept": "[parameters('deptName')]",
      "Environment": "[parameters('environment')]"
    },
    "sku": {
      "name": "Standard_LRS"
    },
    "kind": "Storage",
    "properties": {}
  }
]

W przypadku outputselementu dodaj metadata obiekt do wartości wyjściowej.

"outputs": {
  "hostname": {
    "type": "string",
    "value": "[reference(variables('publicIPAddressName')).dnsSettings.fqdn]",
    "metadata": {
      "comments": "Return the fully qualified domain name"
    }
  },

Nie można dodać metadata obiektu do funkcji zdefiniowanych przez użytkownika.

Ciągi wielowierszowe

Ciąg można podzielić na wiele wierszy. Na przykład zobacz location właściwość i jeden z komentarzy w poniższym przykładzie JSON.

Uwaga

Aby wdrożyć szablony z ciągami wielowierszowymi, użyj Azure PowerShell lub interfejsu wiersza polecenia platformy Azure. W przypadku interfejsu wiersza polecenia użyj wersji 2.3.0 lub nowszej --handle-extended-json-format i określ przełącznik.

Ciągi wielowierszowe nie są obsługiwane podczas wdrażania szablonu za pośrednictwem Azure Portal, potoku DevOps lub interfejsu API REST.

{
  "type": "Microsoft.Compute/virtualMachines",
  "apiVersion": "2018-10-01",
  "name": "[variables('vmName')]", // to customize name, change it in variables
  "location": "[
    parameters('location')
    ]", //defaults to resource group location
  /*
    storage account and network interface
    must be deployed first
  */
  "dependsOn": [
    "[resourceId('Microsoft.Storage/storageAccounts/', variables('storageAccountName'))]",
    "[resourceId('Microsoft.Network/networkInterfaces/', variables('nicName'))]"
  ],

W pliku Bicep zobacz ciągi wielowierszowe.

Następne kroki