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

In dit artikel wordt uitgelegd hoe u Azure PowerShell kunt gebruiken met Azure Resource Manager sjablonen (ARM-sjablonen) om uw resources te implementeren in Azure.This article explains how to use Azure PowerShell with Azure Resource Manager templates (ARM templates) to deploy your resources to Azure. Als u niet bekend bent met de concepten van het implementeren en beheren van uw Azure-oplossingen, raadpleegt u overzicht van sjabloon implementatie.If you aren't familiar with the concepts of deploying and managing your Azure solutions, see template deployment overview.

Implementatie bereikDeployment scope

U kunt uw implementatie richten op een resource groep, een abonnement, een beheer groep of een Tenant.You can target your deployment to a resource group, subscription, management group, or tenant. In de meeste gevallen moet u de implementatie richten op een resource groep.In most cases, you'll target deployment to a resource group. Als u beleids regels en roltoewijzingen wilt Toep assen in een groter bereik, gebruikt u abonnement, beheer groep of Tenant implementaties.To apply policies and role assignments across a larger scope, use subscription, management group, or tenant deployments. Wanneer u naar een abonnement implementeert, kunt u een resource groep maken en er resources op implementeren.When deploying to a subscription, you can 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.

In de voor beelden in dit artikel worden de implementaties van resource groepen gebruikt.The examples in this article use resource group deployments.

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.jsop.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 -Name ExampleDeployment `
  -ResourceGroupName $resourceGroupName `
  -TemplateFile c:\MyTemplates\azuredeploy.json

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

Naam van implementatieDeployment name

In het voor gaande voor beeld heet u de implementatie ExampleDeployment .In the preceding example, you named the deployment ExampleDeployment. Als u geen naam opgeeft voor de implementatie, wordt de naam van het sjabloon bestand gebruikt.If you don't provide a name for the deployment, the name of the template file is used. Als u bijvoorbeeld een sjabloon implementeert azuredeploy.json met de naam en u geen implementatie naam opgeeft, wordt de implementatie een naam genoemd azuredeploy .For example, if you deploy a template named azuredeploy.json and don't specify a deployment name, the deployment is named azuredeploy.

Telkens wanneer u een implementatie uitvoert, wordt een item toegevoegd aan de implementatie geschiedenis van de resource groep met de naam van de implementatie.Every time you run a deployment, an entry is added to the resource group's deployment history with the deployment name. Als u een andere implementatie uitvoert en deze dezelfde naam geeft, wordt de vorige vermelding vervangen door de huidige implementatie.If you run another deployment and give it the same name, the earlier entry is replaced with the current deployment. Als u de unieke vermeldingen in de implementatie geschiedenis wilt behouden, geeft u elke implementatie een unieke naam.If you want to maintain unique entries in the deployment history, give each deployment a unique name.

Als u een unieke naam wilt maken, kunt u een wille keurig getal toewijzen.To create a unique name, you can assign a random number.

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

U kunt ook een datum waarde toevoegen.Or, add a date value.

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

Als u gelijktijdige implementaties uitvoert naar dezelfde resource groep met dezelfde implementatie naam, wordt alleen de laatste implementatie voltooid.If you run concurrent deployments to the same resource group with the same deployment name, only the last deployment is completed. Implementaties met dezelfde naam die nog niet zijn voltooid, worden vervangen door de laatste implementatie.Any deployments with the same name that haven't finished are replaced by the last deployment. Als u bijvoorbeeld een implementatie uitvoert met de naam newStorage die een opslag account implementeert storage1 en tegelijkertijd een andere implementatie uitvoert met de naam newStorage die een opslag account implementeert storage2 , implementeert u slechts één opslag account.For example, if you run a deployment named newStorage that deploys a storage account named storage1, and at the same time run another deployment named newStorage that deploys a storage account named storage2, you deploy only one storage account. De naam van het resulterende opslag account is storage2 .The resulting storage account is named storage2.

Als u echter een implementatie uitvoert met de naam newStorage die een opslag account implementeert storage1 en direct nadat de implementatie is voltooid, voert u newStorage storage2 twee opslag accounts uit met een naam die een opslag account implementeert.However, if you run a deployment named newStorage that deploys a storage account named storage1, and immediately after it completes you run another deployment named newStorage that deploys a storage account named storage2, then you have two storage accounts. Een heeft storage1 de naam en de andere heet storage2 .One is named storage1, and the other is named storage2. Maar u hebt slechts één vermelding in de implementatie geschiedenis.But, you only have one entry in the deployment history.

Wanneer u een unieke naam voor elke implementatie opgeeft, kunt u deze gelijktijdig zonder conflict uitvoeren.When you specify a unique name for each deployment, you can run them concurrently without conflict. Als u een implementatie uitvoert met de naam newStorage1 die een opslag account implementeert storage1 en tegelijkertijd een andere implementatie uitvoert met de naam newStorage2 die een opslag account implementeert storage2 , hebt u twee opslag accounts en twee vermeldingen in de implementatie geschiedenis.If you run a deployment named newStorage1 that deploys a storage account named storage1, and at the same time run another deployment named newStorage2 that deploys a storage account named storage2, then you have two storage accounts and two entries in the deployment history.

Geef elke implementatie een unieke naam om conflicten met gelijktijdige implementaties te voor komen en te zorgen voor unieke vermeldingen in de implementatie geschiedenis.To avoid conflicts with concurrent deployments and to ensure unique entries in the deployment history, give each deployment a unique name.

Externe sjabloon implementerenDeploy remote template

In plaats van ARM-sjablonen op uw lokale computer op te slaan, kunt u ze beter opslaan op een externe locatie.Instead of storing ARM 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. Als u een zelf studie wilt door lopen, raadpleegt u zelf studie: Azure Key Vault integreren in arm-sjabloon implementatie.To go through a tutorial, see Tutorial: Integrate Azure Key Vault in ARM template deployment.

Preview-wijzigingenPreview changes

Voordat u uw sjabloon implementeert, kunt u een voor beeld bekijken van de wijzigingen die door de sjabloon in uw omgeving worden aangebracht.Before deploying your template, you can preview the changes the template will make to your environment. Gebruik de bewerking What-if om te controleren of de sjabloon de wijzigingen aanbrengt die u verwacht.Use the what-if operation to verify that the template makes the changes that you expect. Wat-als ook de sjabloon voor fouten valideert.What-if also validates the template for errors.

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, bladert u naar https://shell.azure.com 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.

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 de namen van de para meter op met de New-AzResourceGroupDeployment 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

Volgende stappenNext steps