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

In dit artikel wordt uitgelegd hoe u Azure PowerShell gebruiken met Resource Manager-sjablonen voor het implementeren van uw resources naar Azure.This article explains how to use Azure PowerShell with Resource Manager templates to deploy your resources to Azure. Als u niet bekend bent met de concepten van het implementeren en beheren van uw Azure-oplossingen, Zie overzicht van Azure Resource Manager.If you aren't familiar with the concepts of deploying and managing your Azure solutions, see Azure Resource Manager overview.

De Resource Manager-sjabloon die u implementeert, kunnen een lokaal bestand op uw computer of een extern bestand dat in een opslagplaats, zoals GitHub bevindt zich.The Resource Manager template you deploy can either be a local file on your machine or an external file that is located in a repository like GitHub. De sjabloon die u in dit artikel implementeert is beschikbaar als sjabloon van de storage-account in GitHub.The template you deploy in this article is available as storage account template in GitHub.

Installeer zo nodig de Azure PowerShell-module door de instructies in de Azure PowerShell-handleiding uit te voeren en voer vervolgens Connect-AzureRmAccount uit om verbinding te maken met Azure.If needed, install the Azure PowerShell module using the instructions found in the Azure PowerShell guide, and then run Connect-AzureRmAccount to create a connection with Azure.

Een sjabloon implementeren vanuit uw lokale computerDeploy a template from your local machine

Bij het implementeren van resources naar Azure, u:When deploying resources to Azure, you:

  1. Aanmelden bij uw Azure-accountSign in to your Azure account
  2. Maak een resourcegroep die als de container voor de geïmplementeerde resources fungeert.Create a resource group that serves as the container for the deployed resources. De naam van de resourcegroep kan alleen alfanumerieke tekens, punten, onderstrepingstekens, afbreekstreepjes en haakjes bevatten.The name of the resource group can only include alphanumeric characters, periods, underscores, hyphens, and parenthesis. Het kan maximaal 90 tekens zijn.It can be up to 90 characters. Deze mag niet eindigen op een punt.It can't end in a period.
  3. Implementeren in de resourcegroep van de sjabloon die u de resources definieert te makenDeploy to the resource group the template that defines the resources to create

Een sjabloon kunt parameters waarmee u kunt het aanpassen van de implementatie bevatten.A template can include parameters that enable you to customize the deployment. U kunt bijvoorbeeld waarden die zijn toegesneden opgeven voor een bepaalde omgeving (zoals ontwikkelen, testen en productie).For example, you can provide values that are tailored for a particular environment (such as dev, test, and production). De voorbeeldsjabloon definieert een parameter voor de SKU van het opslagaccount.The sample template defines a parameter for the storage account SKU.

Het volgende voorbeeld wordt een resourcegroep en implementeert u een sjabloon van uw lokale computer:The following example creates a resource group, and deploys a template from your local machine:

Connect-AzureRmAccount

Select-AzureRmSubscription -SubscriptionName <yourSubscriptionName>

New-AzureRmResourceGroup -Name ExampleResourceGroup -Location "South Central US"
New-AzureRmResourceGroupDeployment -Name ExampleDeployment -ResourceGroupName ExampleResourceGroup `
  -TemplateFile c:\MyTemplates\storage.json -storageAccountType Standard_GRS

De implementatie kan enkele minuten duren.The deployment can take a few minutes to complete. Als deze is voltooid, ziet u een bericht dat het resultaat bevat:When it finishes, you see a message that includes the result:

ProvisioningState       : Succeeded

Een sjabloon implementeren vanuit een externe bronDeploy a template from an external source

In plaats van Resource Manager-sjablonen op uw lokale computer, wellicht kunt u beter om op te slaan in 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 opslagplaats voor bronbeheer (zoals GitHub).You can store templates in a source control repository (such as GitHub). Of u kunt ze opslaan in Azure storage-account voor gedeelde toegang in uw organisatie.Or, you can store them in an Azure storage account for shared access in your organization.

Voor het implementeren van een externe-sjabloon, gebruiken de TemplateUri parameter.To deploy an external template, use the TemplateUri parameter. Gebruik de URI in het voorbeeld om de voorbeeldsjabloon uit GitHub te implementeren.Use the URI in the example to deploy the sample template from GitHub.

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

Het vorige voorbeeld vereist een openbaar toegankelijke URI voor de sjabloon die voor de meeste scenario's, werkt omdat de sjabloon mag niet de gevoelige gegevens 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 nodig hebt om op te geven van gevoelige gegevens (zoals een beheerderswachtwoord), moet u die waarde als een beveiligde parameter.If you need to specify sensitive data (like an admin password), pass that value as a secure parameter. Echter, als u niet dat de sjabloon openbaar toegankelijk moeten zijn wilt, kunt u deze beschermen door in een persoonlijke opslagcontainer op te slaan.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 die de token van een shared access signature (SAS) is vereist, persoonlijke sjablonen 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.

Sjabloon implementeren vanuit Cloud ShellDeploy template from Cloud Shell

U kunt Cloud Shell gebruiken om uw sjabloon te implementeren.You can use Cloud Shell to deploy your template. U moet echter eerst uw sjabloon laden in het opslagaccount voor uw Cloud-Shell.However, you must first load your template into the storage account for your Cloud Shell. Als u Cloud Shell niet hebt gebruikt, raadpleegt u Overzicht van Azure Cloud Shell voor informatie over het instellen.If you have not used Cloud Shell, see Overview of Azure Cloud Shell for information about setting it up.

  1. Meld u aan bij Azure Portal.Sign in to the Azure portal.

  2. Selecteer de Cloud Shell-resourcegroep.Select your Cloud Shell resource group. Het naampatroon is cloud-shell-storage-<region>.The name pattern is cloud-shell-storage-<region>.

    Resourcegroep selecteren

  3. Selecteer het opslagaccount voor Cloud Shell.Select the storage account for your Cloud Shell.

    Opslagaccount selecteren

  4. Selecteer Blobs.Select Blobs.

    Selecteer de blobs

  5. Selecteer + Container.Select + Container.

    Container toevoegen

  6. Geef uw container een naam en een toegangsniveau.Give your container a name and an access level. De voorbeeldsjabloon in dit artikel bevat geen gevoelige informatie, dus toestaan anonieme leestoegang.The sample template in this article contains no sensitive information, so allow anonymous read access. Selecteer OK.Select OK.

    Container waarden opgeven

  7. Selecteer de container die u hebt gemaakt.Select the container you created.

    Selecteer de nieuwe container

  8. Selecteer Uploaden.Select Upload.

    Blob uploaden

  9. Zoek de sjabloon en upload deze.Find and upload your template.

    Bestand uploaden

  10. Nadat deze is geüpload, selecteer de sjabloon.After it has uploaded, select the template.

    Nieuwe sjabloon selecteren

  11. Kopieer de URL.Copy the URL.

    URL kopiëren

  12. Open de prompt.Open the prompt.

    Cloud Shell openen

Gebruik de volgende opdrachten in de Cloud Shell:In the Cloud Shell, use the following commands:

New-AzureRmResourceGroup -Name ExampleResourceGroup -Location "South Central US"
New-AzureRmResourceGroupDeployment -ResourceGroupName ExampleResourceGroup `
  -TemplateUri <copied URL> `
  -storageAccountType Standard_GRS

Implementeren naar meer dan één resourcegroep of abonnementDeploy to more than one resource group or subscription

Normaal gesproken implementeren u alle resources in uw sjabloon één resourcegroep bestaan.Typically, you deploy all the resources in your template to a single resource group. Er zijn echter scenario's waarin u wilt een set met resources samen te implementeren, maar plaats deze in verschillende resourcegroepen of abonnementen.However, there are scenarios where you want to deploy a set of resources together but place them in different resource groups or subscriptions. U kunt implementeren met slechts vijf resourcegroepen in een enkele implementatie.You can deploy to only five resource groups in a single deployment. Zie voor meer informatie, implementeren-Azure-resources aan meer dan één abonnement of resourcegroep.For more information, see Deploy Azure resources to more than one subscription or resource group.

ParametersParameters

Als u wilt doorgeven van parameterwaarden, kunt u parameters inline of een parameterbestand.To pass parameter values, you can use either inline parameters or a parameter file. De voorgaande voorbeelden in dit artikel weergeven inline parameters.The preceding examples in this article show inline parameters.

Inline-parametersInline parameters

Als u wilt in line-parameters kunt toevoegen, bevatten de namen van de parameter met de New-AzureRmResourceGroupDeployment opdracht.To pass inline parameters, provide the names of the parameter with the New-AzureRmResourceGroupDeployment command. Bijvoorbeeld: een tekenreeks of matrix doorgeven aan een sjabloon, gebruiken:For example, to pass a string and array to a template, use:

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

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

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

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

ParameterbestandenParameter files

In plaats van de parameters doorgeven als inline-waarden in het script, wellicht vindt u het eenvoudiger te gebruiken van een JSON-bestand met de parameterwaarden.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. De parameter-bestand kan een lokaal bestand of een extern bestand aan een URI die toegankelijk zijn.The parameter file can be a local file or an external file with an accessible URI.

De parameterbestand moet zich in de volgende indeling:The parameter file must be in the following format:

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
     "storageAccountType": {
         "value": "Standard_GRS"
     }
  }
}

U ziet dat de parametersectie bevat een parameternaam op die overeenkomt met de parameter die is gedefinieerd in uw sjabloon (parameter).Notice that the parameters section includes a parameter name that matches the parameter defined in your template (storageAccountType). Het parameterbestand bevat een waarde voor de parameter.The parameter file contains a value for the parameter. Deze waarde wordt automatisch doorgegeven aan de sjabloon tijdens de implementatie.This value is automatically passed to the template during deployment. U kunt meer dan één parameterbestand maken, en geeft u in de juiste parameter-bestand voor het scenario.You can create more than one parameter file, and then pass in the appropriate parameter file for the scenario.

Kopieer het voorgaande voorbeeld en sla deze op als een bestand met de naam storage.parameters.json.Copy the preceding example and save it as a file named storage.parameters.json.

Als u wilt een lokale parameterbestand doorgeven, gebruikt u de TemplateParameterFile parameter:To pass a local parameter file, use the TemplateParameterFile parameter:

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

Als u wilt een parameterbestand met externe doorgeven, gebruikt u de TemplateParameterUri parameter:To pass an external parameter file, use the TemplateParameterUri parameter:

New-AzureRmResourceGroupDeployment -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

Parameter-prioriteitParameter precedence

U kunt gebruiken in line-parameters en een lokale parameterbestand in dezelfde implementatiebewerking.You can use inline parameters and a local parameter file in the same deployment operation. U kunt bijvoorbeeld enkele waarden in de lokale parameterbestand opgeven en toevoegen van andere waarden inline tijdens de implementatie.For example, you can specify some values in the local parameter file and add other values inline during deployment. Als u waarden voor een parameter in de lokale parameterbestand en inline opgeeft, wordt de waarde inline voorrang.If you provide values for a parameter in both the local parameter file and inline, the inline value takes precedence.

Echter wanneer u een externe parameterbestand gebruikt, geeft u de kan geen andere waarden de inline of vanuit een lokaal bestand.However, when you use an external parameter file, you can't pass other values either inline or from a local file. Wanneer u een parameterbestand in de TemplateParameterUri parameter, alle inline parameters worden genegeerd.When you specify a parameter file in the TemplateParameterUri parameter, all inline parameters are ignored. Geef alle parameterwaarden in het externe bestand.Provide all parameter values in the external file. Als uw sjabloon een gevoelige waarde die u niet in het parameterbestand opnemen bevat, die waarde toevoegen aan een key vault of dynamisch alle parameter waarden inline opgeeft tussen.If your template includes a sensitive value that you can't include in the parameter file, either add that value to a key vault, or dynamically provide all parameter values inline.

Parameter naamconflictenParameter name conflicts

Als de sjabloon een parameter met dezelfde naam als een van de parameters in de PowerShell-opdracht bevat, PowerShell biedt de parameter van de sjabloon voor het achtervoegsel FromTemplate.If your template includes a parameter with the same name as one of the parameters in the PowerShell command, PowerShell presents the parameter from your template with the postfix FromTemplate. Bijvoorbeeld, een parameter met de naam ResourceGroupName in uw sjabloon veroorzaakt een conflict met de ResourceGroupName parameter in de New-AzureRmResourceGroupDeployment de cmdlet.For example, a parameter named ResourceGroupName in your template conflicts with the ResourceGroupName parameter in the New-AzureRmResourceGroupDeployment cmdlet. U wordt gevraagd om een waarde voor ResourceGroupNameFromTemplate.You're prompted to provide a value for ResourceGroupNameFromTemplate. In het algemeen moet u deze verwarring voorkomen door het niet naming parameters met dezelfde naam als parameters gebruikt voor implementatiebewerkingen.In general, you should avoid this confusion by not naming parameters with the same name as parameters used for deployment operations.

Een sjabloonimplementatie testenTest a template deployment

U kunt de waarden van uw sjabloon en de parameterbestanden testen zonder daadwerkelijk de resources te implementeren met Test-AzureRmResourceGroupDeployment.To test your template and parameter values without actually deploying any resources, use Test-AzureRmResourceGroupDeployment.

Test-AzureRmResourceGroupDeployment -ResourceGroupName ExampleResourceGroup `
  -TemplateFile c:\MyTemplates\storage.json -storageAccountType Standard_GRS

Als er geen fouten worden aangetroffen, wordt de opdracht is voltooid zonder een reactie.If no errors are detected, the command finishes without a response. Als er een fout wordt gedetecteerd, wordt de opdracht een foutbericht weergegeven.If an error is detected, the command returns an error message. Doorgeven van een onjuiste waarde voor het opslagaccount-SKU, retourneert bijvoorbeeld de volgende fout:For example, passing an incorrect value for the storage account SKU, returns the following error:

Test-AzureRmResourceGroupDeployment -ResourceGroupName testgroup `
  -TemplateFile c:\MyTemplates\storage.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 syntaxisfout heeft, retourneert de opdracht een foutbericht met dat de sjabloon kan niet worden geparseerd.If your template has a syntax error, the command returns an error indicating it couldn't parse the template. Het bericht geeft aan dat het regelnummer en de positie van de fout bij het parseren.The message indicates the line number and position of the parsing error.

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

Volgende stappenNext steps