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

W tym artykule wyjaśniono, jak używać Azure PowerShell z szablonami usługi Azure Resource Manager (ARM) do wdrażania zasobów na platformie Azure. 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.

Porada

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 Deploy resources with Bicep and Azure PowerShell (Wdrażanie zasobów przy użyciu Bicep i Azure PowerShell).

Wymagania wstępne

Do wdrożenia potrzebny jest szablon. Jeśli jeszcze go nie masz, pobierz i zapisz przykładowy szablon z repozytorium szablonów Szybkiego startu platformy Azure. Nazwa pliku lokalnego używana w tym artykule to C:\MyTemplates\azuredeploy.json.

Musisz zainstalować Azure PowerShell i połączyć się z platformą Azure:

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

Wymagane uprawnienia

Aby wdrożyć plik Bicep lub szablon usługi ARM, potrzebujesz dostępu do zapisu w zasobach wdrażanych i dostępu do wszystkich operacji w typie zasobu Microsoft.Resources/deployments. Na przykład do wdrożenia maszyny wirtualnej potrzebne Microsoft.Compute/virtualMachines/write są uprawnienia i Microsoft.Resources/deployments/* . Operacja analizy co-jeżeli ma te same wymagania dotyczące uprawnień.

Aby uzyskać listę ról i uprawnień, zobacz Role wbudowane platformy Azure.

Zakres wdrożenia

Wdrożenie można kierować do grupy zasobów, subskrypcji, grupy zarządzania lub dzierżawy. W zależności od zakresu wdrożenia używane są 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 pomóc w pobraniu wdrożenia z historii wdrożenia. Jeśli nie podasz nazwy wdrożenia, zostanie użyta nazwa pliku szablonu. Jeśli na przykład wdrożysz szablon o nazwie azuredeploy.json i nie określisz nazwy wdrożenia, wdrożenie ma nazwę azuredeploy.

Za każdym razem, gdy uruchamiasz wdrożenie, wpis jest dodawany do historii wdrożenia grupy zasobów z nazwą wdrożenia. Jeśli uruchomisz 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żna 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 uruchamiasz wdrożenia współbieżne do tej samej grupy zasobów o tej samej nazwie wdrożenia, zostanie ukończone tylko ostatnie wdrożenie. Wszystkie wdrożenia o tej samej nazwie, które nie zostały zakończone, są zastępowane ostatnim wdrożeniem. Jeśli na przykład uruchomisz wdrożenie o nazwie newStorage , które wdraża konto magazynu o nazwie storage1, a jednocześnie uruchom kolejne wdrożenie o nazwie newStorage , które wdraża konto magazynu o nazwie storage2, wdrażasz tylko jedno konto magazynu. Wynikowe konto magazynu nosi nazwę storage2.

Jeśli jednak uruchomisz wdrożenie o nazwie newStorage , które wdraża konto magazynu o nazwie , a natychmiast po zakończeniu zostanie uruchomione kolejne wdrożenie o nazwie newStorage , które wdraża konto magazynu o nazwie storage1storage2, oznacza to, że masz dwa konta magazynu. Jeden ma nazwę storage1, a drugi ma nazwę storage2. Jednak w historii wdrażania istnieje tylko jeden wpis.

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

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

Wdrażanie szablonu lokalnego

Szablon można wdrożyć na komputerze lokalnym lub na komputerze lokalnym, który jest przechowywany 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 zawierać maksymalnie 90 znaków. Nazwa nie może kończyć się kropką.

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

Aby wdrożyć szablon lokalny, użyj parametru -TemplateFile 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, warto 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 połączonego szablonu przechowywanego w prywatnym repozytorium GitHub, zobacz rozwiązanie niestandardowe udokumentowane w temacie Tworzenie oferty niestandardowej i bezpiecznej witryny Azure Portal. Możesz utworzyć funkcję platformy Azure, która ściąga token usługi GitHub z usługi Azure Key Vault.

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 zawierać maksymalnie 90 znaków. Nazwa nie może kończyć się kropką.

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

Powyższy przykład wymaga publicznie dostępnego identyfikatora URI dla szablonu, 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ż wartość 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 polecenia 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.

W poniższych przykładach pokazano, 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 wdróż go.

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

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

Aby uzyskać więcej informacji, zobacz Specyfikacje szablonu usługi Azure Resource Manager.

Podgląd zmian

Przed wdrożeniem szablonu możesz wyświetlić podgląd zmian w środowisku. Użyj operacji analizy co-jeżeli , aby sprawdzić, czy szablon wprowadza oczekiwane zmiany. Co-jeżeli weryfikuje również szablon pod kątem błędów.

Przekazywanie wartości parametrów

Aby przekazać wartości parametrów, możesz użyć parametrów wbudowanych lub pliku parametrów.

Parametry wbudowane

Aby przekazać parametry wbudowane, podaj nazwy parametru za New-AzResourceGroupDeployment pomocą 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ć jej zawartość jako wbudowany parametr.

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

Uzyskiwanie wartości parametru z pliku jest przydatne, gdy trzeba podać wartości konfiguracji. Można 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 plikiem zewnętrznym z dostępnym identyfikatorem 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 parametru TemplateParameterFile :

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 parametru TemplateParameterUri :

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