Eksplorowanie składników szablonu
Szablony usługi Azure Resource Manager są zapisywane w formacie JSON, co umożliwia wyrażanie danych przechowywanych jako obiekt (np. maszyna wirtualna) w tekście.
Dokument JSON jest zasadniczo kolekcją par klucz-wartość. Każdy klucz jest ciągiem, który może mieć następujące wartości:
- Ciąg.
- Liczba.
- Wyrażenie logiczne.
- Lista wartości.
- Obiekt (który jest kolekcją innych par klucz-wartość).
Szablon usługi Resource Manager może zawierać sekcje wyrażone przy użyciu notacji JSON, ale nie są powiązane z samym językiem JSON:
{
"$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "",
"parameters": { },
"variables": { },
"functions": [ ],
"resources": [ ],
"outputs": { }
}
Przejrzyjmy każdą z tych sekcji w nieco bardziej szczegółowy sposób.
Parametry
W tej sekcji określasz, które wartości można konfigurować podczas uruchamiania szablonu.
Możesz na przykład zezwolić użytkownikom szablonu na ustawienie nazwy użytkownika, hasła lub nazwy domeny.
Oto przykład ilustrujący dwa parametry: jeden dla nazwy użytkownika maszyny wirtualnej i jeden dla jego hasła:
"parameters": {
"adminUsername": {
"type": "string",
"metadata": {
"description": "Username for the Virtual Machine."
}
},
"adminPassword": {
"type": "securestring",
"metadata": {
"description": "Password for the Virtual Machine."
}
}
}
Zmienne
W tej sekcji definiujesz wartości używane w całym szablonie.
Zmienne ułatwiają obsługę szablonów.
Możesz na przykład zdefiniować nazwę konta magazynu jednorazowo jako zmienną, a następnie użyć tej zmiennej w całym szablonie.
Jeśli nazwa konta magazynu zmieni się, musisz zaktualizować zmienną tylko raz.
Oto przykład ilustrujący kilka zmiennych opisujących funkcje sieciowe dla maszyny wirtualnej:
"variables": {
"nicName": "myVMNic",
"addressPrefix": "10.0.0.0/16",
"subnetName": "Subnet",
"subnetPrefix": "10.0.0.0/24",
"publicIPAddressName": "myPublicIP",
"virtualNetworkName": "MyVNET"
}
Funkcje
W tej sekcji zdefiniujesz procedury, których nie chcesz powtarzać w całym szablonie.
Funkcje (tak jak zmienne) ułatwiają obsługę szablonów.
Oto przykład, który tworzy funkcję służącą do tworzenia unikatowej nazwy do użycia podczas tworzenia zasobów, które mają globalnie unikatowe wymagania dotyczące nazewnictwa:
"functions": [
{
"namespace": "contoso",
"members": {
"uniqueName": {
"parameters": [
{
"name": "namePrefix",
"type": "string"
}
],
"output": {
"type": "string",
"value": "[concat(toLower(parameters('namePrefix')), uniqueString(resourceGroup().id))]"
}
}
}
}
],
Zasoby
W tej sekcji można zdefiniować zasoby platformy Azure zawarte we wdrożeniu.
Oto przykład, który tworzy zasób publicznego adresu IP:
{
"type": "Microsoft.Network/publicIPAddresses",
"name": "[variables('publicIPAddressName')]",
"location": "[parameters('location')]",
"apiVersion": "2018-08-01",
"properties": {
"publicIPAllocationMethod": "Dynamic",
"dnsSettings": {
"domainNameLabel": "[parameters('dnsLabelPrefix')]"
}
}
}
Typ zasobu w tym przykładzie to Microsoft.Network/publicIPAddresses
.
Nazwa jest odczytywana z sekcji zmiennych, a lokalizacja lub region świadczenia usługi Azure jest odczytywana z sekcji parametrów.
Typy zasobów mogą zmieniać się wraz z upływem czasu, dlatego element apiVersion
odnosi się do wersji typu zasobu, którego chcesz użyć.
W miarę rozwoju typów zasobów można modyfikować szablony tak, aby działały z najnowszymi funkcjami.
Dane wyjściowe
W tej sekcji zdefiniujesz wszelkie informacje, które chcesz otrzymywać po uruchomieniu szablonu.
Na przykład możesz chcieć otrzymać adres IP maszyny wirtualnej lub w pełni kwalifikowaną nazwę domeny (FQDN), informacje, które nie będą znane do momentu uruchomienia wdrożenia.
Oto przykład ilustrujący dane wyjściowe o nazwie nazwa hosta.
Wartość nazwy FQDN jest odczytywana z ustawień publicznego adresu IP maszyny wirtualnej:
"outputs": {
"hostname": {
"type": "string",
"value": "[reference(variables('publicIPAddressName')).dnsSettings.fqdn]"
}
}