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.0
i 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
, apiVersion
i name
.
Następne kroki
- Aby warunkowo wdrożyć zasób, zobacz Wdrażanie warunkowe w szablonach usługi ARM.
- Aby ustawić zależności zasobów, zobacz Definiowanie kolejności wdrażania zasobów w szablonach usługi ARM.