Deklaracja zasobu w szablonach usługi ARM

Aby wdrożyć zasób za pomocą szablonu usługi Azure Resource Manager (szablon usługi ARM), należy dodać deklarację zasobu. Użyj tablicy resources w szablonie JSON.

LanguageVersion 2.0 tworzy listę ulepszeń szablonów JSON usługi ARM, takich jak zmiana deklaracji zasobów z tablicy na obiekt. Większość przykładów pokazanych w tym artykule nadal używa resources tablicy. Aby uzyskać informacje specyficzne dla wersji languageVersion 2.0, zobacz Używanie nazwy symbolicznej.

Uwaga

Bieżąca wersja rozszerzenia Narzędzi usługi Azure Resource Manager dla programu Visual Studio Code nie rozpoznaje ulepszeń w wersji languageVersion 2.0.

Napiwek

Zalecamy Bicep , ponieważ oferuje te same możliwości co szablony usługi ARM, a składnia jest łatwiejsza w użyciu. Aby dowiedzieć się więcej, zobacz deklarację zasobu.

W szablonie jest ograniczonych do 800 zasobów. Aby uzyskać więcej informacji, zobacz Limity szablonów.

Ustawianie typu i wersji zasobu

Podczas dodawania zasobu do szablonu zacznij od ustawienia typu zasobu i wersji interfejsu API. Te wartości określają inne właściwości, które są dostępne dla zasobu.

W poniższym przykładzie pokazano, jak ustawić typ zasobu i wersję interfejsu API dla konta magazynu. W przykładzie nie jest wyświetlana pełna deklaracja zasobu.

"resources": [
  {
    "type": "Microsoft.Storage/storageAccounts",
    "apiVersion": "2019-06-01",
    ...
  }
]

Ustawianie nazwy zasobu

Każdy zasób ma nazwę. Podczas ustawiania nazwy zasobu należy zwrócić uwagę na reguły i ograniczenia nazw zasobów.

"parameters": {
  "storageAccountName": {
    "type": "string",
    "minLength": 3,
    "maxLength": 24
  }
},
"resources": [
  {
    "type": "Microsoft.Storage/storageAccounts",
    "apiVersion": "2019-06-01",
    "name": "[parameters('storageAccountName')]",
    ...
  }
]

Ustawianie lokalizacji

Wiele zasobów wymaga lokalizacji. Możesz określić, czy zasób potrzebuje lokalizacji za pomocą funkcji IntelliSense lub odwołania do szablonu. W poniższym przykładzie dodano parametr lokalizacji używany dla konta magazynu.

"parameters": {
  "storageAccountName": {
    "type": "string",
    "minLength": 3,
    "maxLength": 24
  },
  "location": {
    "type": "string",
    "defaultValue": "[resourceGroup().location]"
  }
},
"resources": [
  {
    "type": "Microsoft.Storage/storageAccounts",
    "apiVersion": "2019-06-01",
    "name": "[parameters('storageAccountName')]",
    "location": "[parameters('location')]",
    ...
  }
]

Aby uzyskać więcej informacji, zobacz Ustawianie lokalizacji zasobów w szablonie usługi ARM.

Ustawianie tagów

Tagi można stosować do zasobu podczas wdrażania. Tagi ułatwiają logiczne organizowanie wdrożonych zasobów. Przykłady różnych sposobów określania tagów można znaleźć w temacie Tagi szablonów usługi ARM.

Ustawianie właściwości specyficznych dla zasobu

Powyższe właściwości są ogólne dla większości typów zasobów. Po ustawieniu tych wartości należy ustawić właściwości specyficzne dla wdrażanych typów zasobów.

Użyj funkcji IntelliSense lub odwołania do szablonu, aby określić, które właściwości są dostępne i które są wymagane. W poniższym przykładzie ustawiono pozostałe właściwości dla konta magazynu.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storageAccountName": {
      "type": "string",
      "minLength": 3,
      "maxLength": 24
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]"
    }
  },
  "functions": [],
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2019-06-01",
      "name": "[parameters('storageAccountName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "Standard_LRS",
        "tier": "Standard"
      },
      "kind": "StorageV2",
      "properties": {
        "accessTier": "Hot"
      }
    }
  ]
}

Użyj nazwy symbolicznej

W Bicep każda definicja zasobu ma nazwę symboliczną. Nazwa symboliczna służy do odwołowania się do zasobu z innych części pliku Bicep. Aby obsługiwać nazwę symboliczną w szablonach JSON usługi ARM, dodaj languageVersion wersję 2.0i zmień definicję zasobu z tablicy na obiekt. Po languageVersion określeniu szablonu nazwa symboliczna musi być określona dla zasobów na poziomie głównym. Na przykład:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "resources": [
    {
      "type": "Microsoft.ContainerService/managedClusters",
      ...
    }
  ]
}

Powyższy kod JSON można zapisać w następującym formacie JSON:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "languageVersion": "2.0",
  "contentVersion": "1.0.0.0",
  "resources": {
    "aks": {
      "type": "Microsoft.ContainerService/managedClusters",
      ...
    }
  }
}

W nazwach symbolicznych jest rozróżniana wielkość liter. Dozwolone znaki dla nazw symbolicznych to litery, cyfry i _. Nazwy symboliczne muszą być unikatowe w szablonie, ale mogą nakładać się na nazwy zmiennych, nazwy parametrów i nazwy danych wyjściowych w szablonie. W poniższym przykładzie symboliczna nazwa zasobu konta magazynu ma taką samą nazwę jak dane wyjściowe.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "languageVersion": "2.0",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storageAccountName": {
      "type": "string",
      "defaultValue": "[format('storage{0}', uniqueString(resourceGroup().id))]"
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]"
    }
  },
  "resources": {
    "myStorage": {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2022-09-01",
      "name": "[parameters('storageAccountName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "Standard_LRS"
      },
      "kind": "Storage",
      "properties": {}
    }
  },
  "outputs": {
    "myStorage":{
      "type": "object",
      "value": "[reference('myStorage')]"
    }
  }
}

Funkcja referencyjna może używać symbolicznej nazwy zasobu, jak pokazano w poprzednim przykładzie. Funkcja referencyjna nie może już używać nazwy zasobu, na przykład reference(parameters('storageAccountName')) nie jest dozwolona.

Jeśli zasób Wdrożenia jest używany we wdrożeniu o nazwie symbolicznej, użyj elementu apiVersion 2020-09-01 lub nowszego.

Deklarowanie istniejących zasobów

W przypadku languageVersion 2.0 deklaracji zasobów i przy użyciu nazwy symbolicznej można zadeklarować istniejące zasoby. Właściwość zasobu najwyższego poziomu powoduje "existing": true , że usługa ARM odczytuje zamiast wdrażać zasób, jak pokazano w poniższym przykładzie:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "languageVersion": "2.0",

  "resources": {
    "storageAccount": {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2022-09-01",
      "name": "storageacct",
      "existing": true
    }
  },
  "outputs": {
    "saBlocksPlaintext": {
      "type": "bool",
      "value": "[ reference('storageAccount').supportsHttpsTrafficOnly]"
    }
  }
}

Istniejące zasoby nie muszą definiować żadnych właściwości innych niż type, apiVersioni name.

Następne kroki