Wdrażanie zasobów przy użyciu szablonów usługi ARM i Azure PowerShell

W tym artykule wyjaśniono, jak wdrażać zasoby na platformie Azure Azure PowerShell za pomocą szablonów Azure Resource Manager (ARM). Jeśli nie znasz pojęć związanych z wdrażaniem rozwiązań platformy Azure i zarządzaniem nimi, zobacz Omówienie wdrażania szablonów.

Wymagania wstępne

Do wdrożenia potrzebny jest szablon. Jeśli jeszcze go nie masz, pobierz i zapisz przykładowy szablon z portalu szablonów szybkiego startu platformy Azure. Nazwa pliku lokalnego używana w tym artykule jestC:\MyTemplates\azuredeploy.js na stronie.

Musisz zainstalować aplikację i Azure PowerShell nawiązać połączenie z platformą Azure:

Jeśli nie masz zainstalowanego programu PowerShell, możesz użyć Azure Cloud Shell. Aby uzyskać więcej informacji, zobacz Wdrażanie szablonów usługi ARM z Azure Cloud Shell.

Zakres wdrożenia

Wdrożenie można ukierunkować na grupę zasobów, subskrypcję, grupę zarządzania lub dzierżawę. W zależności od zakresu wdrożenia są dostępne różne polecenia.

Dla każdego zakresu użytkownik wdrażający szablon musi mieć wymagane uprawnienia do tworzenia zasobów.

Nazwa wdrożenia

Podczas wdrażania szablonu usługi ARM można nadać nazwę wdrożenia. Ta nazwa może ułatwić pobranie wdrożenia z historii wdrożenia. Jeśli nie po podaj nazwy wdrożenia, zostanie użyta nazwa pliku szablonu. Jeśli na przykład wdrożysz szablon o nazwie i nie określisz nazwy azuredeploy.json wdrożenia, wdrożenie będzie nosiło nazwę azuredeploy .

Za każdym razem, gdy uruchamiasz wdrożenie, do historii wdrażania grupy zasobów jest dodawany wpis o nazwie wdrożenia. Jeśli zostanie uruchomione inne wdrożenie i nadasz mu taką samą nazwę, wcześniejszy wpis zostanie zastąpiony bieżącym wdrożeniem. Jeśli chcesz zachować unikatowe wpisy w historii wdrażania, nadaj każdemu wdrożeniu unikatową nazwę.

Aby utworzyć unikatową nazwę, możesz przypisać liczbę losową.

$suffix = Get-Random -Maximum 1000
$deploymentName = "ExampleDeployment" + $suffix

Możesz też dodać wartość daty.

$today=Get-Date -Format "MM-dd-yyyy"
$deploymentName="ExampleDeployment"+"$today"

Jeśli współbieżne wdrożenia są uruchamiane w tej samej grupie zasobów o tej samej nazwie wdrożenia, ukończone jest tylko ostatnie wdrożenie. Wszystkie wdrożenia o tej samej nazwie, które nie zostały ukończone, są zastępowane przez ostatnie wdrożenie. Jeśli na przykład uruchamiasz wdrożenie o nazwie , które wdraża konto magazynu o nazwie , a jednocześnie uruchamiasz inne wdrożenie o nazwie , które wdraża konto magazynu o nazwie , wdrażasz tylko jedno newStorage storage1 konto newStorage storage2 magazynu. Wynikowe konto magazynu ma nazwę storage2 .

Jeśli jednak uruchamiasz wdrożenie o nazwie , które wdraża konto magazynu o nazwie , a natychmiast po jego zakończeniu uruchamiasz kolejne wdrożenie o nazwie , które wdraża konto magazynu o nazwie , wówczas masz newStorage dwa storage1 konta newStorage storage2 magazynu. Jedna nosi nazwę , a storage1 druga o nazwie storage2 . Jednak w historii wdrażania jest tylko jeden wpis.

Po określeniu unikatowej nazwy dla każdego wdrożenia można uruchomić je współbieżnie bez konfliktu. Jeśli uruchamiasz wdrożenie o nazwie , które wdraża konto magazynu o nazwie , a jednocześnie uruchamiasz inne wdrożenie o nazwie , które wdraża konto magazynu o nazwie , wówczas masz dwa konta magazynu i dwa wpisy w historii newStorage1 storage1 newStorage2 storage2 wdrażania.

Aby uniknąć konfliktów z wdrożeniami współbieżnych i zapewnić unikatowe wpisy w historii wdrażania, nadaj każdemu wdrożeniu unikatową nazwę.

Wdrażanie szablonu lokalnego

Szablon można wdrożyć z komputera lokalnego lub z komputera przechowywanego zewnętrznie. W tej sekcji opisano wdrażanie szablonu lokalnego.

Jeśli wdrażasz w grupie zasobów, która nie istnieje, utwórz grupę zasobów. Nazwa grupy zasobów może zawierać tylko znaki alfanumeryczne, kropki, podkreślenia, łączniki i nawiasy. Może mieć maksymalnie 90 znaków. Nazwa nie może kończyć się okresem.

New-AzResourceGroup -Name ExampleGroup -Location "Central US"

Aby wdrożyć szablon lokalny, użyj -TemplateFile parametru w poleceniu wdrażania. W poniższym przykładzie pokazano również, jak ustawić wartość parametru pochodzącą z szablonu.

New-AzResourceGroupDeployment `
  -Name ExampleDeployment `
  -ResourceGroupName ExampleGroup `
  -TemplateFile <path-to-template>

Wdrożenie może potrwać kilka minut.

Wdrażanie szablonu zdalnego

Zamiast przechowywać szablony usługi ARM na komputerze lokalnym, możesz wolisz przechowywać je w lokalizacji zewnętrznej. Szablony można przechowywać w repozytorium kontroli źródła (na przykład GitHub). Można je również przechowywać na koncie usługi Azure Storage w celu uzyskania dostępu współdzielonego w organizacji.

Uwaga

Aby wdrożyć szablon lub odwołać się do dołączonego szablonu, który jest przechowywany w prywatnym repozytorium GitHub, zobacz Niestandardowe rozwiązanie udokumentowane w blogu MVP. Można skonfigurować funkcję platformy Azure jako serwer proxy do KONSTRUOWANIA adresu URL potrzebnego do uzyskania dostępu do pliku szablonu w prywatnym repozytorium GitHub.

Jeśli wdrażasz w grupie zasobów, która nie istnieje, utwórz grupę zasobów. Nazwa grupy zasobów może zawierać tylko znaki alfanumeryczne, kropki, podkreślenia, łączniki i nawiasy. Może mieć maksymalnie 90 znaków. Nazwa nie może kończyć się okresem.

New-AzResourceGroup -Name ExampleGroup -Location "Central US"

Aby wdrożyć szablon zewnętrzny, użyj parametru -TemplateUri.

New-AzResourceGroupDeployment `
  -Name remoteTemplateDeployment `
  -ResourceGroupName ExampleGroup `
  -TemplateUri https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.storage/storage-account-create/azuredeploy.json

Poprzedni przykład wymaga publicznie dostępnego dla szablonu URI, który działa w większości scenariuszy, ponieważ szablon nie powinien zawierać poufnych danych. Jeśli musisz określić poufne dane (takie jak hasło administratora), przekaż te wartości jako bezpieczny parametr. Jeśli jednak chcesz zarządzać dostępem do szablonu, rozważ użycie specyfikacji szablonu.

Aby wdrożyć zdalne połączone szablony ze ścieżką względną przechowywaną na koncie magazynu, użyj , QueryString aby określić token SAS:

New-AzResourceGroupDeployment `
  -Name linkedTemplateWithRelativePath `
  -ResourceGroupName "myResourceGroup" `
  -TemplateUri "https://stage20210126.blob.core.windows.net/template-staging/mainTemplate.json" `
  -QueryString $sasToken

Aby uzyskać więcej informacji, zobacz Używanie ścieżki względnej dla połączonych szablonów.

Wdrażanie specyfikacji szablonu

Zamiast wdrażać szablon lokalny lub zdalny, można utworzyć specyfikację szablonu. Specyfikacja szablonu to zasób w subskrypcji platformy Azure, który zawiera szablon usługi ARM. Ułatwia bezpieczne udostępnianie szablonu użytkownikom w organizacji. Aby udzielić dostępu do specyfikacji szablonu, należy użyć kontroli dostępu opartej na rolach (RBAC) platformy Azure. Ta funkcja jest obecnie dostępna w wersji zapoznawczej.

Poniższe przykłady pokazują, jak utworzyć i wdrożyć specyfikację szablonu.

Najpierw utwórz specyfikację szablonu, podając szablon usługi ARM.

New-AzTemplateSpec `
  -Name storageSpec `
  -Version 1.0 `
  -ResourceGroupName templateSpecsRg `
  -Location westus2 `
  -TemplateJsonFile ./mainTemplate.json

Następnie pobierz identyfikator specyfikacji szablonu i wd wdrażaj go.

$id = (Get-AzTemplateSpec -Name storageSpec -ResourceGroupName templateSpecsRg -Version 1.0).Version.Id

New-AzResourceGroupDeployment `
  -ResourceGroupName demoRG `
  -TemplateSpecId $id

Aby uzyskać więcej informacji, zobacz Azure Resource Manager szablonu .

Podgląd zmian

Przed wdrożeniem szablonu można wyświetlić podgląd zmian wprowadzonych przez szablon w środowisku. Użyj operacji what-if, aby sprawdzić, czy szablon wprowadza spodziewane zmiany. What-if również weryfikuje szablon pod celu sprawdzenia, czy wystąpiły błędy.

Przekaż wartości parametrów

Aby przekazać wartości parametrów, można użyć parametrów w tekście lub pliku parametrów.

Parametry wbudowane

Aby przekazać parametry wbudowane, podaj nazwy parametru za pomocą New-AzResourceGroupDeployment polecenia . Aby na przykład przekazać ciąg i tablicę do szablonu, użyj:

$arrayParam = "value1", "value2"
New-AzResourceGroupDeployment -ResourceGroupName testgroup `
  -TemplateFile <path-to-template> `
  -exampleString "inline string" `
  -exampleArray $arrayParam

Możesz również pobrać zawartość pliku i podać ją jako parametr w tekście.

$arrayParam = "value1", "value2"
New-AzResourceGroupDeployment -ResourceGroupName testgroup `
  -TemplateFile <path-to-template> `
  -exampleString $(Get-Content -Path c:\MyTemplates\stringcontent.txt -Raw) `
  -exampleArray $arrayParam

Pobieranie wartości parametru z pliku jest przydatne, gdy trzeba podać wartości konfiguracji. Możesz na przykład podać wartości cloud-init dla maszyny wirtualnej z systemem Linux.

Jeśli musisz przekazać tablicę obiektów, utwórz tabele skrótów w programie PowerShell i dodaj je do tablicy. Przekaż tablicę jako parametr podczas wdrażania.

$hash1 = @{ Name = "firstSubnet"; AddressPrefix = "10.0.0.0/24"}
$hash2 = @{ Name = "secondSubnet"; AddressPrefix = "10.0.1.0/24"}
$subnetArray = $hash1, $hash2
New-AzResourceGroupDeployment -ResourceGroupName testgroup `
  -TemplateFile <path-to-template> `
  -exampleArray $subnetArray

Pliki parametrów

Zamiast przekazywania parametrów jako wartości śródwierszowych w skrypcie prostszym może się okazać użycie pliku JSON zawierającego wartości parametrów. Plik parametrów może być plikiem lokalnym lub zewnętrznym z dostępnym URI.

Aby uzyskać więcej informacji na temat pliku parametrów, zobacz Tworzenie pliku parametrów usługi Resource Manager.

Aby przekazać plik parametrów lokalnych, użyj TemplateParameterFile parametru :

New-AzResourceGroupDeployment -Name ExampleDeployment -ResourceGroupName ExampleResourceGroup `
  -TemplateFile <path-to-template> `
  -TemplateParameterFile c:\MyTemplates\storage.parameters.json

Aby przekazać plik parametrów zewnętrznych, użyj TemplateParameterUri parametru :

New-AzResourceGroupDeployment -Name ExampleDeployment -ResourceGroupName ExampleResourceGroup `
  -TemplateUri https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.storage/storage-account-create/azuredeploy.json `
  -TemplateParameterUri https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.storage/storage-account-create/azuredeploy.parameters.json

Następne kroki