Udostępnij przez


Deklaracja zasobu w szablonach Azure Resource Manager (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 dla 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.

Wskazówka

Zalecamy Bicep, ponieważ oferuje te same możliwości co szablony ARM, a składnia jest łatwiejsza do użycia. 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": "2025-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": "2025-06-01",
    "name": "[parameters('storageAccountName')]",
    ...
  }
]

Ustaw lokalizację

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": "2025-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 znajdziesz w Tagach szablonów 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 w celu określenia, 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 magazynowego.

{
  "$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": "2025-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 ARM, dodaj languageVersion w wersję o 2.0, i zmień definicję zasobu z tablicy na obiekt. Gdy languageVersion jest określone dla szablonu, nazwa symboliczna musi być określona dla zasobów na poziomie root. 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": "2025-06-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 wersji API 2020-09-01 lub nowszej.

Deklarowanie istniejących zasobów

Mając languageVersion 2.0 i używając nazwy symbolicznej do deklaracji zasobów, można zadeklarować istniejące zasoby. Właściwość zasobu najwyższego poziomu "existing": true powoduje, że usługa ARM odczytuje zasób zamiast go wdrażać, 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": "2025-06-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.

Dalsze kroki