Samouczek: wdrażanie szablonu usługi ARM przy użyciu plików parametrów

Z tego samouczka dowiesz się, jak używać plików parametrów do przechowywania wartości przekazywanych podczas wdrażania. W poprzednich samouczkach użyto wbudowanych parametrów za pomocą polecenia wdrożenia. Takie podejście działało w przypadku testowania szablonu usługi Azure Resource Manager (szablonu usługi ARM), ale podczas automatyzowania wdrożeń można łatwiej przekazać zestaw wartości dla danego środowiska. Pliki parametrów ułatwiają pakowanie wartości parametrów dla określonego środowiska. W tym samouczku utworzysz pliki parametrów dla środowisk deweloperskich i produkcyjnych. Wykonanie tej instrukcji zajmuje 12 minut .

Wymagania wstępne

Zalecamy ukończenie samouczka dotyczącego tagów, ale nie jest to wymagane.

Musisz mieć Visual Studio Code z rozszerzeniem narzędzia Resource Manager oraz interfejsem Azure PowerShell lub interfejsem azure Command-Line (CLI). Aby uzyskać więcej informacji, zobacz narzędzia szablonu.

Przeglądanie szablonu

Szablon ma wiele parametrów, które można podać podczas wdrażania. Na końcu poprzedniego samouczka szablon miał następujący plik JSON:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storagePrefix": {
      "type": "string",
      "minLength": 3,
      "maxLength": 11
    },
    "storageSKU": {
      "type": "string",
      "defaultValue": "Standard_LRS",
      "allowedValues": [
        "Standard_LRS",
        "Standard_GRS",
        "Standard_RAGRS",
        "Standard_ZRS",
        "Premium_LRS",
        "Premium_ZRS",
        "Standard_GZRS",
        "Standard_RAGZRS"
      ]
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]"
    },
    "appServicePlanName": {
      "type": "string",
      "defaultValue": "exampleplan"
    },
    "webAppName": {
      "type": "string",
      "metadata": {
        "description": "Base name of the resource such as web app name and app service plan "
      },
      "minLength": 2
    },
    "linuxFxVersion": {
      "type": "string",
      "defaultValue": "php|7.0",
      "metadata": {
        "description": "The Runtime stack of current web app"
      }
    },
    "resourceTags": {
      "type": "object",
      "defaultValue": {
        "Environment": "Dev",
        "Project": "Tutorial"
      }
    }
  },
  "variables": {
    "uniqueStorageName": "[concat(parameters('storagePrefix'), uniqueString(resourceGroup().id))]",
    "webAppPortalName": "[concat(parameters('webAppName'), uniqueString(resourceGroup().id))]"
  },
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2021-09-01",
      "name": "[variables('uniqueStorageName')]",
      "location": "[parameters('location')]",
      "tags": "[parameters('resourceTags')]",
      "sku": {
        "name": "[parameters('storageSKU')]"
      },
      "kind": "StorageV2",
      "properties": {
        "supportsHttpsTrafficOnly": true
      }
    },
    {
      "type": "Microsoft.Web/serverfarms",
      "apiVersion": "2021-03-01",
      "name": "[parameters('appServicePlanName')]",
      "location": "[parameters('location')]",
      "tags": "[parameters('resourceTags')]",
      "sku": {
        "name": "B1",
        "tier": "Basic",
        "size": "B1",
        "family": "B",
        "capacity": 1
      },
      "kind": "linux",
      "properties": {
        "perSiteScaling": false,
        "reserved": true,
        "targetWorkerCount": 0,
        "targetWorkerSizeId": 0
      }
    },
    {
      "type": "Microsoft.Web/sites",
      "apiVersion": "2021-03-01",
      "name": "[variables('webAppPortalName')]",
      "location": "[parameters('location')]",
      "dependsOn": [
        "[parameters('appServicePlanName')]"
      ],
      "tags": "[parameters('resourceTags')]",
      "kind": "app",
      "properties": {
        "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', parameters('appServicePlanName'))]",
        "siteConfig": {
          "linuxFxVersion": "[parameters('linuxFxVersion')]"
        }
      }
    }
  ],
  "outputs": {
    "storageEndpoint": {
      "type": "object",
      "value": "[reference(variables('uniqueStorageName')).primaryEndpoints]"
    }
  }
}

Ten szablon działa dobrze, ale teraz chcesz łatwo zarządzać parametrami przekazywanymi dla szablonu.

Dodawanie plików parametrów

Pliki parametrów to pliki JSON ze strukturą podobną do szablonu. W pliku podaj wartości parametrów, które mają zostać przekazane podczas wdrażania.

W pliku parametrów należy podać wartości parametrów w szablonie. Nazwa każdego parametru w pliku parametrów musi być zgodna z nazwą parametru w szablonie. Nazwa nie uwzględnia wielkości liter, ale aby łatwo wyświetlić pasujące wartości, zalecamy dopasowanie wielkości liter z szablonu.

Nie musisz podawać wartości dla każdego parametru. Jeśli nieokreślony parametr ma wartość domyślną, ta wartość jest używana podczas wdrażania. Jeśli parametr nie ma wartości domyślnej i nie zostanie określony w pliku parametrów, zostanie wyświetlony monit o podanie wartości podczas wdrażania.

Nie można określić nazwy parametru w pliku parametrów, który nie jest zgodny z nazwą parametru w szablonie. Podczas podawania nieznanych parametrów występuje błąd.

W Visual Studio Code utwórz nowy plik z następującą zawartością. Zapisz plik o nazwie azuredeploy.parameters.dev.json.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storagePrefix": {
      "value": "devstore"
    },
    "storageSKU": {
      "value": "Standard_LRS"
    },
    "appServicePlanName": {
      "value": "devplan"
    },
    "webAppName": {
      "value": "devapp"
    },
    "resourceTags": {
      "value": {
        "Environment": "Dev",
        "Project": "Tutorial"
      }
    }
  }
}

Ten plik jest plikiem parametrów dla środowiska deweloperskiego. Zwróć uwagę, że używa Standard_LRS dla konta magazynu, nazw zasobów z prefiksem deweloperskimEnvironment i ustawia tag na Dev.

Ponownie utwórz nowy plik z następującą zawartością. Zapisz plik o nazwie azuredeploy.parameters.prod.json.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storagePrefix": {
      "value": "contosodata"
    },
    "storageSKU": {
      "value": "Standard_GRS"
    },
    "appServicePlanName": {
      "value": "contosoplan"
    },
    "webAppName": {
      "value": "contosowebapp"
    },
    "resourceTags": {
      "value": {
        "Environment": "Production",
        "Project": "Tutorial"
      }
    }
  }
}

Ten plik jest plikiem parametrów dla środowiska produkcyjnego. Zwróć uwagę, że używa Standard_GRS dla konta magazynu, nazw zasobów z prefiksem contoso i ustawia Environment tag na Production. W rzeczywistym środowisku produkcyjnym warto również użyć usługi app service z inną niż bezpłatną jednostkę SKU, ale na potrzeby tego samouczka używamy tej jednostki SKU.

Wdrażanie szablonu

Użyj interfejsu wiersza polecenia platformy Azure lub Azure PowerShell, aby wdrożyć szablon.

W ramach ostatniego testu szablonu utwórzmy dwie nowe grupy zasobów. Jeden dla środowiska deweloperskiego i drugi dla środowiska produkcyjnego.

W przypadku zmiennych szablonu i parametrów zastąp {path-to-the-template-file}zmienne , {path-to-azuredeploy.parameters.dev.json}, {path-to-azuredeploy.parameters.prod.json}i nawiasy klamrowe {} ścieżkami plików szablonu i parametrów.

Najpierw wdróżmy je w środowisku deweloperskim.

$templateFile = "{path-to-the-template-file}"
$parameterFile="{path-to-azuredeploy.parameters.dev.json}"
New-AzResourceGroup `
  -Name myResourceGroupDev `
  -Location "East US"
New-AzResourceGroupDeployment `
  -Name devenvironment `
  -ResourceGroupName myResourceGroupDev `
  -TemplateFile $templateFile `
  -TemplateParameterFile $parameterFile

Teraz wdrażamy je w środowisku produkcyjnym.

$parameterFile="{path-to-azuredeploy.parameters.prod.json}"
New-AzResourceGroup `
  -Name myResourceGroupProd `
  -Location "West US"
New-AzResourceGroupDeployment `
  -Name prodenvironment `
  -ResourceGroupName myResourceGroupProd `
  -TemplateFile $templateFile `
  -TemplateParameterFile $parameterFile

Uwaga

Jeśli wdrożenie zakończy się niepowodzeniem, użyj przełącznika verbose , aby uzyskać informacje o tworzonych zasobach. Użyj przełącznika debug , aby uzyskać więcej informacji na temat debugowania.

Weryfikowanie wdrożenia

Wdrożenie można zweryfikować, eksplorując grupy zasobów z Azure Portal.

  1. Zaloguj się w witrynie Azure Portal.
  2. W menu po lewej stronie wybierz pozycję Grupy zasobów.
  3. W tym samouczku zostaną wyświetlone dwie nowe grupy zasobów, które zostaną wdrożone.
  4. Wybierz grupę zasobów i wyświetl wdrożone zasoby. Zwróć uwagę, że są one zgodne z wartościami określonymi w pliku parametrów dla tego środowiska.

Czyszczenie zasobów

  1. W Azure Portal wybierz pozycję Grupy zasobów z menu po lewej stronie.

  2. Zaznacz nazwę grupy zasobów hiperlinku obok pola wyboru. Po ukończeniu tej serii masz trzy grupy zasobów do usunięcia — myResourceGroup, myResourceGroupDev i myResourceGroupProd.

  3. Wybierz ikonę Usuń grupę zasobów z górnego menu.

    Przestroga

    Usunięcie grupy zasobów jest nieodwracalne.

  4. Wpisz nazwę grupy zasobów w wyświetlonym oknie podręcznym i wybierz pozycję Usuń.

Następne kroki

Gratulacje. Ukończono to wprowadzenie do wdrażania szablonów na platformie Azure. Daj nam znać, jeśli masz jakiekolwiek komentarze i sugestie w sekcji opinii.

W następnej serii samouczków bardziej szczegółowo o wdrażaniu szablonów.