Eksplorowanie struktury szablonu usługi Azure Resource Manager

Ukończone

W tej lekcji dowiesz się więcej na temat używania szablonów usługi Azure Resource Manager (szablonów usługi ARM) do implementowania infrastruktury jako kodu. Zapoznasz się z sekcjami szablonu usługi ARM, dowiesz się, jak wdrożyć szablon usługi ARM na platformie Azure i szczegółowo zapoznać się z sekcją zasobów szablonu usługi ARM.

Czym jest infrastruktura jako kod?

Infrastruktura jako kod umożliwia opisanie infrastruktury potrzebnej dla aplikacji za pomocą kodu.

Dzięki temu rozwiązaniu w centralnym repozytorium kodu można przechowywać zarówno kod aplikacji, jak i wszystkie elementy potrzebne do jej wdrożenia. Zalety infrastruktury jako kodu:

  • Spójne konfiguracje
  • Zwiększona skalowalność
  • Szybsze wdrożenia
  • Lepsza możliwość śledzenia

W tym filmie wideo opisano infrastrukturę jako kod:

Co to jest szablon usługi Resource Manager?

Szablony usługi ARM to pliki JavaScript Object Notation (JSON), które definiują infrastrukturę i konfigurację wdrożenia. Szablon używa składni deklaratywnej. Składnia deklaratywna to sposób tworzenia struktury i elementów, które opisują, jak wyglądają zasoby bez opisywania przepływu sterowania. Składnia deklaratywna różni się od składni imperatywnej, która korzysta z poleceń wykonywanych na komputerze. W przypadku składni imperatywnej najważniejsze jest określenie poszczególnych kroków wdrażania zasobów.

Szablony usługi Resource Manager umożliwiają deklarowanie elementów, które mają zostać wdrożone, bez konieczności pisania sekwencji poleceń programistycznych wymaganych do ich utworzenia. W szablonie usługi Resource Manager należy określić zasoby i właściwości dla tych zasobów. Usługa Azure Resource Manager następnie używa tych informacji do wdrażania zasobów w zorganizowany i spójny sposób.

Korzyści wynikające z używania szablonów usługi ARM

Szablony usługi Resource Manager umożliwiają zautomatyzowanie wdrożeń i skorzystanie z zalet infrastruktury jako kodu (IaC). Kod szablonu staje się częścią infrastruktury i projektów programistycznych. Podobnie jak w przypadku kodu aplikacji, pliki IaC można przechowywać w repozytorium źródłowym i kontrolować ich wersje.

Szablony usługi ARM są idempotentne, co oznacza, że ten sam szablon można wdrażać wiele razy, uzyskując takie same typy zasobów w identycznym stanie.

Usługa Resource Manager organizuje wdrażanie zasobów, aby były tworzone w odpowiedniej kolejności. Gdy jest to możliwe, zasoby są również tworzone równolegle, dlatego wdrożenia szablonów usługi Resource Manager zostają ukończone szybciej niż wdrożenia inicjowane przez skrypty.

Diagram showing a mapping of the template processing procedure. There's only one call to process a template as opposed to several calls to process scripts.

Usługa Resource Manager ma również wbudowaną funkcję sprawdzania poprawności. Sprawdza szablon przed rozpoczęciem wdrażania, aby upewnić się, że wdrożenie zostanie ukończone pomyślnie.

Jeśli wdrożenia stają się bardziej skomplikowane, można podzielić szablony usługi Resource Manager na mniejsze składniki do wielokrotnego użytku. Te mniejsze szablony można połączyć ze sobą podczas wdrażania. Szablony można także zagnieżdżać w innych szablonach.

W witrynie Azure Portal można przejrzeć historię wdrożeń i uzyskać informacje o stanie wdrożenia. W portalu są wyświetlane wartości wszystkich parametrów i danych wyjściowych.

Szablony usługi ARM można także integrować z narzędziami ciągłej integracji i ciągłego wdrażania (CI/CD), takimi jak usługa Azure Pipelines, która może automatyzować potoki wydań w celu wprowadzania szybkich i niezawodnych aktualizacji aplikacji oraz infrastruktury. Korzystając z usługi Azure DevOps i zadań szablonów usługi ARM, można w sposób ciągły kompilować i wdrażać projekty.

Struktura pliku szablonu usługi ARM

Podczas pisania szablonu usługi ARM musisz zrozumieć wszystkie części, które tworzą szablon i co robią. Pliki szablonów usługi ARM składają się z następujących elementów:

Element opis
Schematu Wymagana sekcja, w której definiowana jest lokalizacja pliku schematu JSON opisującego strukturę danych JSON. Używany numer wersji zależy od zakresu wdrożenia i edytora JSON.
contentVersion Wymagana sekcja, w której definiowana jest wersja szablonu (na przykład 1.0.0.0). Możesz użyć tej wartości podczas dokumentowania istotnych zmian dokonywanych w szablonie, dzięki czemu upewnisz się, że jest wdrażany właściwy szablon.
apiProfile Opcjonalna sekcja, która definiuje zbiór wersji interfejsu API dla typów zasobów. Dzięki tej wartości unikniesz konieczności określania wersji interfejsu API dla każdego zasobu w szablonie.
parameters Opcjonalna sekcja służąca do określania wartości dostępnych podczas wdrażania. Te wartości mogą być aprowizowane za pomocą pliku parametrów, za pomocą parametrów wiersza polecenia lub witryny Azure Portal.
Zmiennych Opcjonalna sekcja, w której definiowane są wartości upraszczające wyrażenia języka szablonu.
Funkcje Opcjonalna sekcja, w której można opisać dostępne w ramach szablonu funkcje definiowane przez użytkownika. Funkcje zdefiniowane przez użytkownika mogą uprościć szablon w przypadku wielokrotnego użycia wyrażeń w szablonie.
Zasobów Wymagana sekcja zawierająca definicje rzeczywistych elementów, które mają zostać wdrożone lub zaktualizowane w grupie zasobów bądź w ramach subskrypcji.
Wyjście Opcjonalna sekcja, w której można określić wartości zwracane na końcu wdrożenia.

Wdrażanie szablonu usługi Resource Manager na platformie Azure

Szablon usługi Resource Manager można wdrożyć na platformie Azure w jeden z następujących sposobów:

  • Wdrażanie szablonu lokalnego
  • Wdrażanie szablonu połączonego
  • Wdrażanie w potoku ciągłego wdrażania

W tym module przedstawiono szczegółowo wdrażanie lokalnego szablonu usługi Resource Manager. W przyszłych modułach usługi Learn dowiesz się, jak wdrożyć bardziej skomplikowaną infrastrukturę i jak przeprowadzić integrację z usługą Azure Pipelines.

Wdrażanie szablonu lokalnego wymaga zainstalowania programu Azure PowerShell lub interfejsu wiersza polecenia platformy Azure w środowisku lokalnym.

Najpierw należy zalogować się do platformy Azure przy użyciu interfejsu wiersza polecenia platformy Azure lub programu Azure PowerShell.

Następnie zdefiniuj grupę zasobów. Możesz użyć już zdefiniowanej grupy zasobów lub utworzyć nową za pomocą następującego polecenia. Dostępne wartości lokalizacji można uzyskać z: az account list-locations (interfejs wiersza polecenia) lub Get-AzLocation (PowerShell). Lokalizację domyślną można skonfigurować przy użyciu polecenia az configure --defaults location=<location>.

az group create \
  --name {name of your resource group} \
  --location "{location}"

Aby rozpocząć wdrażanie szablonu w grupie zasobów, użyj polecenia interfejsu wiersza polecenia platformy Azure az deployment group create lub polecenia programu Azure PowerShell New-AzResourceGroupDeployment.

Napiwek

Różnica między elementami az deployment group create i az group deployment create polega na tym, że jest to stare polecenie, które az group deployment create ma być przestarzałe i zostanie zastąpione przez az deployment group create. W związku z tym zalecamy wdrażanie zasobów w zakresie grupy zasobów przy użyciu polecenia az deployment group create .

Oba polecenia wymagają grupy zasobów, regionu i nazwy wdrożenia, aby można je było łatwo zidentyfikować w historii wdrożenia. Dla wygody ćwiczenia tworzą zmienną, która przechowuje ścieżkę do pliku szablonu. Ta zmienna ułatwia uruchamianie poleceń wdrażania, ponieważ nie trzeba ponownie wpisywać ścieżki za każdym razem, gdy wdrażasz. Oto przykład:

Aby uruchomić to polecenie wdrażania, musisz mieć najnowszą wersję interfejsu wiersza polecenia platformy Azure.

templateFile="{provide-the-path-to-the-template-file}"
az deployment group create \
  --name blanktemplate \
  --resource-group myResourceGroup \
  --template-file $templateFile

Szablony połączone są używane do wdrażania złożonych rozwiązań. Szablon można podzielić na wiele mniejszych szablonów wdrażanych za pośrednictwem głównego szablonu. Podczas wdrażania szablonu głównego wyzwala wdrożenie połączonego szablonu. Szablony połączone można przechowywać i zabezpieczać za pomocą tokenu SAS.

Potok ciągłej integracji/ciągłego wdrażania automatyzuje tworzenie i wdrażanie projektów deweloperskich, które obejmują projekty szablonów usługi Resource Manager. Dwa najpopularniejsze potoki używane do wdrażania szablonów to usługa Azure Pipelines i funkcja GitHub Actions.

Więcej informacji na temat tych dwóch typów wdrażania znajduje się w innych modułach.

Dodawanie zasobów do szablonu

Aby móc dodać zasób do szablonu, należy znać dostawcę zasobów i typy dostarczanych przez niego zasobów. Składnia dla tej kombinacji ma następującą postać: {dostawca-zasobu}/{typ-zasobu}. Przykładowo aby dodać do szablonu zasób konta magazynu, będzie potrzebny dostawca zasobów Microsoft.Storage. Jednym z typów zasobów tego dostawcy jest storageAccount. Ten typ zasobu będzie więc wyświetlany w postaci Microsoft.Storage/storageAccounts. Aby znaleźć potrzebnych dostawców, można skorzystać z listy dostawców zasobów dla usług platformy Azure.

Po zdefiniowaniu dostawcy i typu zasobu należy zrozumieć właściwości każdego typu zasobu, który ma być używany. Szczegółowe informacje zawiera artykuł Definiowanie zasobów w szablonie usługi Azure Resource Manager. Przejrzyj listę w kolumnie po lewej stronie, aby znaleźć zasób. Zauważ, że właściwości są sortowane według wersji interfejsu API.

Screenshot of a Microsoft documentation page showing the storage account documentation selected.

Oto przykład kilku z wymienionych właściwości na stronie dotyczącej kont magazynu:

Screenshot of a Microsoft documentation page showing some of the storage account properties.

W naszym przykładzie magazynu szablon może wyglądać następująco:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.1",
  "apiProfile": "",
  "parameters": {},
  "variables": {},
  "functions": [],
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2019-06-01",
      "name": "learntemplatestorage123",
      "location": "westus",
      "sku": {
        "name": "Standard_LRS"
      },
      "kind": "StorageV2",
      "properties": {
        "supportsHttpsTrafficOnly": true
      }
    }
  ],
  "outputs": {}
}