Resources implementeren met Resource Manager-sjablonen en Azure PowerShellDeploy resources with Resource Manager templates and Azure PowerShell

Meer informatie over het gebruik van Azure PowerShell met Resource Manager-sjablonen voor het implementeren van uw resources in Azure.Learn how to use Azure PowerShell with Resource Manager templates to deploy your resources to Azure. Zie Azure Resource Manager Overviewvoor meer informatie over de concepten van het implementeren en beheren van uw Azure-oplossingen.For more information about the concepts of deploying and managing your Azure solutions, see Azure Resource Manager overview.

Notitie

Dit artikel is bijgewerkt voor het gebruik van de nieuwe Azure PowerShell Az-module.This article has been updated to use the new Azure PowerShell Az module. De AzureRM-module kan nog worden gebruikt en krijgt bugoplossingen tot ten minste december 2020.You can still use the AzureRM module, which will continue to receive bug fixes until at least December 2020. Zie voor meer informatie over de nieuwe Az-module en compatibiliteit met AzureRM Introductie van de nieuwe Az-module van Azure PowerShell.To learn more about the new Az module and AzureRM compatibility, see Introducing the new Azure PowerShell Az module. Raadpleeg Azure PowerShell installeren voor instructies over de installatie van de Az-module.For Az module installation instructions, see Install Azure PowerShell.

Implementatie bereikDeployment scope

U kunt uw implementatie richten op een Azure-abonnement of een resource groep binnen een abonnement.You can target your deployment to either an Azure subscription or a resource group within a subscription. In de meeste gevallen moet u de implementatie richten op een resource groep.In most cases, you'll target deployment to a resource group. Gebruik abonnements implementaties om beleids regels en roltoewijzingen toe te passen op het abonnement.Use subscription deployments to apply policies and role assignments across the subscription. U kunt ook abonnements implementaties gebruiken voor het maken van een resource groep en het implementeren van resources.You also use subscription deployments to create a resource group and deploy resources to it. Afhankelijk van het bereik van de implementatie, gebruikt u verschillende opdrachten.Depending on the scope of the deployment, you use different commands.

Als u wilt implementeren in een resource groep, gebruikt u New-AzResourceGroupDeployment:To deploy to a resource group, use New-AzResourceGroupDeployment:

New-AzResourceGroupDeployment -ResourceGroupName <resource-group-name> -TemplateFile <path-to-template>

Als u wilt implementeren in een abonnement, gebruikt u New-AzDeployment:To deploy to a subscription, use New-AzDeployment:

New-AzDeployment -Location <location> -TemplateFile <path-to-template>

Op dit moment worden implementaties van beheer groepen alleen ondersteund via de REST API.Currently, management group deployments are only supported through the REST API. Zie resources implementeren met Resource Manager-sjablonen en resource manager rest API.See Deploy resources with Resource Manager templates and Resource Manager REST API.

In de voor beelden in dit artikel worden de implementaties van resource groepen gebruikt.The examples in this article use resource group deployments. Zie resource groepen en-resources op abonnements niveau makenvoor meer informatie over abonnements implementaties.For more information about subscription deployments, see Create resource groups and resources at the subscription level.

VereistenPrerequisites

U hebt een sjabloon nodig om te implementeren.You need a template to deploy. Als u er nog geen hebt, kunt u een voorbeeld sjabloon downloaden en opslaan vanuit de Azure Quick Start-sjablonen opslag plaats.If you don't already have one, download and save an example template from the Azure Quickstart templates repo. De lokale bestands naam die in dit artikel wordt gebruikt, is c:\MyTemplates\azuredeploy.json.The local file name used in this article is c:\MyTemplates\azuredeploy.json.

Tenzij u de Azure Cloud shell gebruikt om sjablonen te implementeren, moet u Azure PowerShell installeren en verbinding maken met Azure:Unless you use the Azure Cloud shell to deploy templates, you need to install Azure PowerShell and connect to Azure:

Lokale sjabloon implementerenDeploy local template

In het volgende voor beeld wordt een resource groep gemaakt en een sjabloon van uw lokale computer geïmplementeerd.The following example creates a resource group, and deploys a template from your local machine. De naam van de resource groep mag alleen alfanumerieke tekens, punten, onderstrepings teken, afbreek streepjes en haakjes bevatten.The name of the resource group can only include alphanumeric characters, periods, underscores, hyphens, and parenthesis. Het kan Maxi maal 90 tekens lang zijn.It can be up to 90 characters. Deze kan niet eindigen op een punt.It can't end in a period.

$resourceGroupName = Read-Host -Prompt "Enter the Resource Group name"
$location = Read-Host -Prompt "Enter the location (i.e. centralus)"

New-AzResourceGroup -Name $resourceGroupName -Location $location
New-AzResourceGroupDeployment -ResourceGroupName $resourceGroupName `
  -TemplateFile c:\MyTemplates\azuredeploy.json

De implementatie kan enkele minuten duren.The deployment can take a few minutes to complete.

Externe sjabloon implementerenDeploy remote template

In plaats van het opslaan van Resource Manager-sjablonen op de lokale computer, kunt u ze beter opslaan op een externe locatie.Instead of storing Resource Manager templates on your local machine, you may prefer to store them in an external location. U kunt sjablonen opslaan in een broncode beheer bibliotheek (zoals GitHub).You can store templates in a source control repository (such as GitHub). U kunt ze ook opslaan in een Azure-opslag account voor gedeelde toegang in uw organisatie.Or, you can store them in an Azure storage account for shared access in your organization.

Als u een externe sjabloon wilt implementeren, gebruikt u de para meter TemplateUri .To deploy an external template, use the TemplateUri parameter. Gebruik de URI in het voor beeld om de voorbeeld sjabloon te implementeren vanuit GitHub.Use the URI in the example to deploy the sample template from GitHub.

$resourceGroupName = Read-Host -Prompt "Enter the Resource Group name"
$location = Read-Host -Prompt "Enter the location (i.e. centralus)"

New-AzResourceGroup -Name $resourceGroupName -Location $location
New-AzResourceGroupDeployment -ResourceGroupName $resourceGroupName `
  -TemplateUri https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/101-storage-account-create/azuredeploy.json

In het voor gaande voor beeld is een openbaar toegankelijke URI vereist voor de sjabloon, die voor de meeste scenario's werkt, omdat uw sjabloon geen gevoelige gegevens mag bevatten.The preceding example requires a publicly accessible URI for the template, which works for most scenarios because your template shouldn't include sensitive data. Als u gevoelige gegevens (zoals een beheerders wachtwoord) moet opgeven, geeft u die waarde als een beveiligde para meter door.If you need to specify sensitive data (like an admin password), pass that value as a secure parameter. Als u niet wilt dat uw sjabloon openbaar toegankelijk is, kunt u deze beveiligen door deze op te slaan in een persoonlijke opslag container.However, if you don't want your template to be publicly accessible, you can protect it by storing it in a private storage container. Zie voor meer informatie over het implementeren van een sjabloon waarvoor een SAS-token (Shared Access Signature) is vereist een persoonlijke sjabloon implementeren met SAS-token.For information about deploying a template that requires a shared access signature (SAS) token, see Deploy private template with SAS token. Zie zelf studie als u een zelf studie wilt door lopen: Azure Key Vault integreren in de Resource Manager-sjabloonimplementatie voor meer informatie.To go through a tutorial, see Tutorial: Integrate Azure Key Vault in Resource Manager Template deployment.

Implementeren vanuit Azure Cloud shellDeploy from Azure Cloud shell

U kunt de Azure Cloud shell gebruiken om uw sjabloon te implementeren.You can use the Azure Cloud Shell to deploy your template. Als u een externe sjabloon wilt implementeren, geeft u de URI van de sjabloon op.To deploy an external template, provide the URI of the template. Als u een lokale sjabloon wilt implementeren, moet u uw sjabloon eerst laden in het opslag account voor uw Cloud Shell.To deploy a local template, you must first load your template into the storage account for your Cloud Shell. Als u bestanden naar de shell wilt uploaden, selecteert u het menu pictogram bestanden uploaden/downloaden in het shell-venster.To upload files to the shell, select the Upload/Download files menu icon from the shell window.

Als u de Cloud shell wilt openen, https://shell.azure.combladert u naar of selecteert u try-it in de volgende code sectie:To open the Cloud shell, browse to https://shell.azure.com, or select Try-It from the following code section:

$resourceGroupName = Read-Host -Prompt "Enter the Resource Group name"
$location = Read-Host -Prompt "Enter the location (i.e. centralus)"

New-AzResourceGroup -Name $resourceGroupName -Location $location
New-AzResourceGroupDeployment -ResourceGroupName $resourceGroupName `
  -TemplateUri https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/101-storage-account-create/azuredeploy.json

Als u de code in de shell wilt plakken, klikt u met de rechter muisknop in de shell en selecteert u Plakken.To paste the code into the shell, right-click inside the shell and then select Paste.

Opnieuw implementeren wanneer de implementatie misluktRedeploy when deployment fails

Deze functie wordt ook wel bekend als Rollback bij fout.This feature is also known as Rollback on error. Wanneer een implementatie mislukt, kunt u automatisch een eerdere, geslaagde implementatie uit de implementatie geschiedenis opnieuw implementeren.When a deployment fails, you can automatically redeploy an earlier, successful deployment from your deployment history. Als u een herimplementatie wilt opgeven, -RollbackToLastDeployment gebruikt -RollBackDeploymentName u de para meter of in de implementatie opdracht.To specify redeployment, use either the -RollbackToLastDeployment or -RollBackDeploymentName parameter in the deployment command. Deze functie is handig als u een bekende goede status hebt voor de implementatie van uw infra structuur en u wilt terugkeren naar deze status.This functionality is useful if you've got a known good state for your infrastructure deployment and want to revert to this state. Er zijn een aantal voor behoud en beperkingen:There are a number of caveats and restrictions:

  • De implementatie wordt precies zo uitgevoerd als deze eerder met dezelfde para meters is uitgevoerd.The redeployment is run exactly as it was run previously with the same parameters. U kunt de para meters niet wijzigen.You can't change the parameters.
  • De vorige implementatie wordt uitgevoerd met de volledige modus.The previous deployment is run using the complete mode. Alle resources die geen deel uitmaken van de vorige implementatie worden verwijderd en alle resource configuraties worden ingesteld op de vorige status.Any resources not included in the previous deployment are deleted, and any resource configurations are set to their previous state. Zorg ervoor dat u de implementatie modivolledig begrijpt.Make sure you fully understand the deployment modes.
  • De herimplementatie heeft alleen invloed op de resources, maar wijzigingen in de gegevens worden niet beïnvloed.The redeployment only affects the resources, any data changes aren't affected.
  • Deze functie wordt alleen ondersteund voor implementaties van resource groepen, geen implementaties op abonnements niveau.This feature is only supported on Resource Group deployments, not subscription level deployments. Zie resource groepen en-resources op abonnements niveau makenvoor meer informatie over de implementatie op abonnements niveau.For more information about subscription level deployment, see Create resource groups and resources at the subscription level.

Als u deze optie wilt gebruiken, moeten uw implementaties unieke namen hebben zodat deze in de geschiedenis kunnen worden geïdentificeerd.To use this option, your deployments must have unique names so they can be identified in the history. Als u geen unieke namen hebt, kan de huidige mislukte implementatie de eerder geslaagde implementatie in de geschiedenis overschrijven.If you don't have unique names, the current failed deployment might overwrite the previously successful deployment in the history. U kunt deze optie alleen gebruiken bij implementaties op hoofd niveau.You can only use this option with root level deployments. Implementaties van een geneste sjabloon zijn niet beschikbaar voor opnieuw implementeren.Deployments from a nested template aren't available for redeployment.

Als u de laatste geslaagde implementatie opnieuw wilt implementeren -RollbackToLastDeployment , voegt u de para meter toe als een vlag.To redeploy the last successful deployment, add the -RollbackToLastDeployment parameter as a flag.

New-AzResourceGroupDeployment -Name ExampleDeployment02 `
  -ResourceGroupName $resourceGroupName `
  -TemplateFile c:\MyTemplates\azuredeploy.json `
  -RollbackToLastDeployment

Als u een specifieke implementatie opnieuw wilt implementeren, -RollBackDeploymentName gebruikt u de para meter en geeft u de naam van de implementatie op.To redeploy a specific deployment, use the -RollBackDeploymentName parameter and provide the name of the deployment.

New-AzResourceGroupDeployment -Name ExampleDeployment02 `
  -ResourceGroupName $resourceGroupName `
  -TemplateFile c:\MyTemplates\azuredeploy.json `
  -RollBackDeploymentName ExampleDeployment01

De opgegeven implementatie moet zijn geslaagd.The specified deployment must have succeeded.

Parameter waarden door gevenPass parameter values

Als u parameter waarden wilt door geven, kunt u inline-para meters of een parameter bestand gebruiken.To pass parameter values, you can use either inline parameters or a parameter file.

Inline-para metersInline parameters

Als u inline-para meters wilt door geven, geeft u New-AzResourceGroupDeployment de namen van de para meter op met de opdracht.To pass inline parameters, provide the names of the parameter with the New-AzResourceGroupDeployment command. Als u bijvoorbeeld een teken reeks en een matrix wilt door geven aan een sjabloon, gebruikt u:For example, to pass a string and array to a template, use:

$arrayParam = "value1", "value2"
New-AzResourceGroupDeployment -ResourceGroupName testgroup `
  -TemplateFile c:\MyTemplates\demotemplate.json `
  -exampleString "inline string" `
  -exampleArray $arrayParam

U kunt ook de inhoud van het bestand ophalen en deze inhoud als een inline-para meter opgeven.You can also get the contents of file and provide that content as an inline parameter.

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

Het ophalen van een parameter waarde uit een bestand is handig wanneer u configuratie waarden moet opgeven.Getting a parameter value from a file is helpful when you need to provide configuration values. U kunt bijvoorbeeld Cloud-init-waarden opgeven voor een virtuele Linux-machine.For example, you can provide cloud-init values for a Linux virtual machine.

Als u een matrix met objecten wilt door geven, maakt u hash-tabellen in Power shell en voegt u deze toe aan een matrix.If you need to pass in an array of objects, create hash tables in PowerShell and add them to an array. Geef deze matrix als een para meter door tijdens de implementatie.Pass that array as a parameter during deployment.

$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 c:\MyTemplates\demotemplate.json `
  -exampleArray $subnetArray

Parameter bestandenParameter files

In plaats van para meters als inline waarden door te geven in uw script, is het wellicht eenvoudiger een JSON-bestand te gebruiken dat de parameter waarden bevat.Rather than passing parameters as inline values in your script, you may find it easier to use a JSON file that contains the parameter values. Het parameter bestand kan een lokaal bestand of een extern bestand met een toegankelijke URI zijn.The parameter file can be a local file or an external file with an accessible URI.

Zie voor meer informatie over het parameter bestand Resource Manager-parameter bestand maken.For more information about the parameter file, see Create Resource Manager parameter file.

Als u een lokaal parameter bestand wilt door geven, gebruikt u de para meter TemplateParameterFile :To pass a local parameter file, use the TemplateParameterFile parameter:

New-AzResourceGroupDeployment -Name ExampleDeployment -ResourceGroupName ExampleResourceGroup `
  -TemplateFile c:\MyTemplates\azuredeploy.json `
  -TemplateParameterFile c:\MyTemplates\storage.parameters.json

Als u een extern parameter bestand wilt door geven, gebruikt u de para meter TemplateParameterUri :To pass an external parameter file, use the TemplateParameterUri parameter:

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

Sjabloon implementaties testenTest template deployments

Als u uw sjabloon en parameter waarden wilt testen zonder daad werkelijk resources te implementeren, gebruikt u test-AzureRmResourceGroupDeployment.To test your template and parameter values without actually deploying any resources, use Test-AzureRmResourceGroupDeployment.

Test-AzResourceGroupDeployment -ResourceGroupName ExampleResourceGroup `
  -TemplateFile c:\MyTemplates\azuredeploy.json -storageAccountType Standard_GRS

Als er geen fouten worden gedetecteerd, wordt de opdracht zonder antwoord voltooid.If no errors are detected, the command finishes without a response. Als er een fout wordt gedetecteerd, retourneert de opdracht een fout bericht.If an error is detected, the command returns an error message. Als er bijvoorbeeld een onjuiste waarde voor de SKU van het opslag account wordt door gegeven, wordt de volgende fout geretourneerd:For example, passing an incorrect value for the storage account SKU, returns the following error:

Test-AzResourceGroupDeployment -ResourceGroupName testgroup `
  -TemplateFile c:\MyTemplates\azuredeploy.json -storageAccountType badSku

Code    : InvalidTemplate
Message : Deployment template validation failed: 'The provided value 'badSku' for the template parameter 'storageAccountType'
          at line '15' and column '24' is not valid. The parameter value is not part of the allowed value(s):
          'Standard_LRS,Standard_ZRS,Standard_GRS,Standard_RAGRS,Premium_LRS'.'.
Details :

Als uw sjabloon een syntaxis fout bevat, retourneert de opdracht een fout melding die aangeeft dat de sjabloon niet kan worden geparseerd.If your template has a syntax error, the command returns an error indicating it couldn't parse the template. Het bericht geeft het regel nummer en de positie van de Parseerfout aan.The message indicates the line number and position of the parsing error.

Test-AzResourceGroupDeployment : After parsing a value an unexpected character was encountered: 
  ". Path 'variables', line 31, position 3.

Volgende stappenNext steps