Bereitstellen von Ressourcen mit Azure Resource Manager-Vorlagen und Azure PowerShellDeploy resources with Resource Manager templates and Azure PowerShell

Erfahren Sie, wie Ihre Ressourcen mit Azure PowerShell und Resource Manager-Vorlagen in Azure bereitgestellt werden.Learn how to use Azure PowerShell with Resource Manager templates to deploy your resources to Azure. Weitere Informationen zu den Konzepten der Bereitstellung und Verwaltung Ihrer Azure-Lösungen finden Sie unter Übersicht über den Azure Resource Manager.For more information about the concepts of deploying and managing your Azure solutions, see Azure Resource Manager overview.

Hinweis

Dieser Artikel wurde aktualisiert und beinhaltet jetzt das neue Az-Modul von Azure PowerShell.This article has been updated to use the new Azure PowerShell Az module. Sie können das AzureRM-Modul weiterhin verwenden, das bis mindestens Dezember 2020 weiterhin Fehlerbehebungen erhält.You can still use the AzureRM module, which will continue to receive bug fixes until at least December 2020. Weitere Informationen zum neuen Az-Modul und zur Kompatibilität mit AzureRM finden Sie unter Introducing the new Azure PowerShell Az module (Einführung in das neue Az-Modul von Azure PowerShell).To learn more about the new Az module and AzureRM compatibility, see Introducing the new Azure PowerShell Az module. Anweisungen zur Installation des Az-Moduls finden Sie unter Install Azure PowerShell (Installieren von Azure PowerShell).For Az module installation instructions, see Install Azure PowerShell.

BereitstellungsumfangDeployment scope

Sie können Ihre Bereitstellung entweder auf ein Azure-Abonnement oder eine Ressourcengruppe innerhalb eines Abonnements ausrichten.You can target your deployment to either an Azure subscription or a resource group within a subscription. In den meisten Fällen wählen Sie die Bereitstellung in einer Ressourcengruppe aus.In most cases, you'll target deployment to a resource group. Verwenden Sie Abonnementbereitstellungen, um Richtlinien und Rollenzuweisungen im gesamten Abonnement anzuwenden.Use subscription deployments to apply policies and role assignments across the subscription. Sie verwenden Abonnementbereitstellungen auch, um eine Ressourcengruppe zu erstellen und Ressourcen für sie bereitzustellen.You also use subscription deployments to create a resource group and deploy resources to it. Abhängig vom Umfang der Bereitstellung verwenden Sie unterschiedliche Befehle.Depending on the scope of the deployment, you use different commands.

Verwenden Sie New-AzResourceGroupDeployment, um eine Ressourcengruppe bereitzustellen:To deploy to a resource group, use New-AzResourceGroupDeployment:

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

Verwenden Sie New-AzDeployment, um ein Abonnement bereitzustellen:To deploy to a subscription, use New-AzDeployment:

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

Derzeit werden Verwaltungsgruppenbereitstellungen nur über die REST-API unterstützt.Currently, management group deployments are only supported through the REST API. Weitere Informationen finden Sie unter Bereitstellen von Ressourcen mit Resource Manager-Vorlagen und Resource Manager-REST-API.See Deploy resources with Resource Manager templates and Resource Manager REST API.

Die Beispiele in diesem Artikel verwenden Ressourcengruppenbereitstellungen.The examples in this article use resource group deployments. Weitere Informationen zu Abonnementbereitstellungen finden Sie unter Erstellen von Ressourcengruppen und Ressourcen auf Abonnementebene.For more information about subscription deployments, see Create resource groups and resources at the subscription level.

VoraussetzungenPrerequisites

Sie benötigen eine Vorlage für die Bereitstellung.You need a template to deploy. Wenn Sie noch keine besitzen, laden Sie eine Beispielvorlage aus dem Repository der Azure-Schnellstartvorlagen herunter, und speichern Sie diese.If you don't already have one, download and save an example template from the Azure Quickstart templates repo. In diesem Artikel wird der lokale Dateiname c:\MyTemplates\azuredeploy.json verwendet.The local file name used in this article is c:\MyTemplates\azuredeploy.json.

Sofern Sie nicht Azure Cloud Shell zum Bereitstellen von Vorlagen verwenden, müssen Sie Azure PowerShell installieren und eine Verbindung mit Azure herstellen:Unless you use the Azure Cloud shell to deploy templates, you need to install Azure PowerShell and connect to Azure:

Bereitstellen einer lokalen VorlageDeploy local template

Im folgenden Beispiel wird eine Ressourcengruppe erstellt und eine Vorlage von Ihrem lokalen Computer aus bereitgestellt.The following example creates a resource group, and deploys a template from your local machine. Der Name einer Ressourcengruppe darf nur alphanumerische Zeichen, Punkte, Unterstriche, Bindestriche und Klammern enthalten.The name of the resource group can only include alphanumeric characters, periods, underscores, hyphens, and parenthesis. Der Name kann bis zu 90 Zeichen umfassen.It can be up to 90 characters. Der Name darf nicht mit einem Punkt enden.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

Die Bereitstellung kann einige Minuten dauern.The deployment can take a few minutes to complete.

Bereitstellen einer RemotevorlageDeploy remote template

Anstatt Resource Manager-Vorlagen auf dem lokalen Computer zu speichern, könnten Sie sie vorzugsweise an einem externen Speicherort speichern.Instead of storing Resource Manager templates on your local machine, you may prefer to store them in an external location. Sie können Vorlagen in einem Quellcodeverwaltungs-Repository (z.B. GitHub) speichern.You can store templates in a source control repository (such as GitHub). Für den gemeinsamen Zugriff in Ihrer Organisation können Sie sie auch in einem Azure-Speicherkonto speichern.Or, you can store them in an Azure storage account for shared access in your organization.

Verwenden Sie zum Bereitstellen einer externen Vorlage den TemplateUri-Parameter.To deploy an external template, use the TemplateUri parameter. Verwenden Sie den URI im Beispiel, um die Beispielvorlage aus GitHub bereitzustellen.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

Das obige Beispiel erfordert einen URI mit öffentlichem Zugriff für die Vorlage, was in den meisten Szenarien funktioniert, da die Vorlage keine vertraulichen Daten enthalten sollte.The preceding example requires a publicly accessible URI for the template, which works for most scenarios because your template shouldn't include sensitive data. Wenn Sie vertrauliche Daten (z.B. ein Administratorkennwort) angeben müssen, übergeben Sie diesen Wert als sicheren Parameter.If you need to specify sensitive data (like an admin password), pass that value as a secure parameter. Wenn Sie jedoch keinen öffentlichen Zugriff auf Ihre Vorlage wünschen, können Sie sie schützen, indem Sie sie in einem privaten Speichercontainer speichern.However, if you don't want your template to be publicly accessible, you can protect it by storing it in a private storage container. Informationen zum Bereitstellen einer Vorlage, die ein SAS-Token (Shared Access Signature) erfordert, finden Sie unter Bereitstellen einer privaten Vorlage mit SAS-Token.For information about deploying a template that requires a shared access signature (SAS) token, see Deploy private template with SAS token. Ein entsprechendes Tutorial finden Sie unter Tutorial: Integrieren von Azure Key Vault in die Resource Manager-Vorlagenbereitstellung.To go through a tutorial, see Tutorial: Integrate Azure Key Vault in Resource Manager Template deployment.

Bereitstellen über Azure Cloud ShellDeploy from Azure Cloud shell

Sie können Ihre Vorlage mithilfe von Azure Cloud Shell bereitstellen.You can use the Azure Cloud Shell to deploy your template. Geben Sie zum Bereitstellen einer externen Vorlage den URI der Vorlage an.To deploy an external template, provide the URI of the template. Um eine lokale Vorlage bereitzustellen, müssen Sie die Vorlage zuerst in das Speicherkonto für Ihre Cloud Shell-Instanz laden.To deploy a local template, you must first load your template into the storage account for your Cloud Shell. Wählen Sie zum Hochladen von Dateien in die Shell das Menüsymbol Dateien hochladen/herunterladen im Shell-Fenster aus.To upload files to the shell, select the Upload/Download files menu icon from the shell window.

Zum Öffnen der Cloudshell navigieren Sie zu https://shell.azure.com, oder wählen Sie aus dem folgenden Codeabschnitt Try-It aus: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

Um den Code in die Shell einzufügen, klicken Sie mit der rechten Maustaste in der Shell und wählen dann Einfügen aus.To paste the code into the shell, right-click inside the shell and then select Paste.

Erneute Bereitstellung bei BereitstellungsfehlernRedeploy when deployment fails

Dieses Feature ist auch bekannt als Rollback bei Fehler.This feature is also known as Rollback on error. Wenn eine Bereitstellung fehlschlägt, können Sie automatisch eine frühere, erfolgreiche Bereitstellung aus Ihrem Bereitstellungsverlauf bereitstellen.When a deployment fails, you can automatically redeploy an earlier, successful deployment from your deployment history. Zum Angeben einer erneuten Bereitstellung verwenden Sie entweder den Parameter -RollbackToLastDeployment oder -RollBackDeploymentName im Bereitstellungsbefehl.To specify redeployment, use either the -RollbackToLastDeployment or -RollBackDeploymentName parameter in the deployment command. Diese Funktionalität ist nützlich, wenn es einen bekannten guten Zustand für die Infrastrukturbereitstellung gibt, der wiederhergestellt werden soll.This functionality is useful if you've got a known good state for your infrastructure deployment and want to revert to this state. Es gibt eine Reihe von Vorbehalten und Einschränkungen:There are a number of caveats and restrictions:

  • Die Bereitstellung wird genauso wie zuvor mit denselben Parametern ausgeführt.The redeployment is run exactly as it was run previously with the same parameters. Sie können die Parameter nicht ändern.You can't change the parameters.
  • Die vorherige Bereitstellung wird im vollständigen Modus ausgeführt.The previous deployment is run using the complete mode. Alle in der vorherigen Bereitstellung nicht enthaltenen Ressourcen werden gelöscht, und alle Ressourcenkonfigurationen werden auf ihren vorherigen Zustand zurückgesetzt.Any resources not included in the previous deployment are deleted, and any resource configurations are set to their previous state. Sorgen Sie dafür, dass Sie die Bereitstellungsmodi vollständig verstehen.Make sure you fully understand the deployment modes.
  • Die erneute Bereitstellung wirkt sich nur auf die Ressourcen aus. Datenänderungen sind davon nicht betroffen.The redeployment only affects the resources, any data changes aren't affected.
  • Dieses Feature wird nur bei Bereitstellungen von Ressourcengruppen unterstützt, nicht bei Bereitstellungen auf Abonnementebene.This feature is only supported on Resource Group deployments, not subscription level deployments. Weitere Informationen zu Bereitstellungen auf Abonnementebene finden Sie unter Erstellen von Ressourcengruppen und Ressourcen auf Abonnementebene.For more information about subscription level deployment, see Create resource groups and resources at the subscription level.

Zur Verwendung dieser Option müssen die Bereitstellungen eindeutige Namen aufweisen, damit sie im Verlauf identifiziert werden können.To use this option, your deployments must have unique names so they can be identified in the history. Wenn die Bereitstellungen keine eindeutigen Namen aufweisen, wird die vorherige erfolgreich ausgeführte Bereitstellung im Verlauf möglicherweise durch die aktuelle fehlerhafte Bereitstellung überschrieben.If you don't have unique names, the current failed deployment might overwrite the previously successful deployment in the history. Diese Option kann nur für Bereitstellungen auf Stammebene verwendet werden.You can only use this option with root level deployments. Bereitstellungen aus einer geschachtelten Vorlage können nicht erneut bereitgestellt werden.Deployments from a nested template aren't available for redeployment.

Um die letzte erfolgreiche Bereitstellung erneut bereitzustellen, fügen Sie den Parameter -RollbackToLastDeployment als Flag hinzu.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

Um eine bestimmte Bereitstellung erneut bereitzustellen, verwenden den Parameter -RollBackDeploymentName und geben den Namen der Bereitstellung an.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

Die angegebene Bereitstellung muss erfolgreich ausgeführt worden sein.The specified deployment must have succeeded.

Übergeben von ParameterwertenPass parameter values

Zum Übergeben von Parameterwerten können Sie entweder Inlineparameter oder eine Parameterdatei verwenden.To pass parameter values, you can use either inline parameters or a parameter file.

InlineparameterInline parameters

Geben Sie zum Übergeben von Inlineparametern die Parameternamen mit dem Befehl New-AzResourceGroupDeployment an.To pass inline parameters, provide the names of the parameter with the New-AzResourceGroupDeployment command. Wenn Sie beispielsweise eine Zeichenfolge und ein Array an eine Vorlage in einer Vorlage übergeben möchten, verwenden Sie Folgendes: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

Sie können auch den Inhalt einer Datei abrufen und als Inlineparameter übergeben.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

Das Abrufen eines Parameterwerts aus einer Datei ist praktisch, wenn Sie Konfigurationswerte angeben müssen.Getting a parameter value from a file is helpful when you need to provide configuration values. Sie können beispielsweise cloud-init-Werte für einen virtuellen Linux-Computer angeben.For example, you can provide cloud-init values for a Linux virtual machine.

Wenn Sie ein Array von Objekten übergeben müssen, erstellen Sie Hashtabellen in PowerShell, und fügen Sie sie einem Array hinzu.If you need to pass in an array of objects, create hash tables in PowerShell and add them to an array. Übergeben Sie dieses Array während der Bereitstellung als Parameter.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

ParameterdateienParameter files

Anstatt Parameter als Inlinewerte in Ihrem Skript zu übergeben, ist es wohl einfacher, eine JSON-Datei zu verwenden, die die Parameterwerte enthält.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. Bei der Parameterdatei kann es sich um eine lokale Datei oder eine externe Datei mit einem erreichbaren URI handeln.The parameter file can be a local file or an external file with an accessible URI.

Weitere Informationen zur Parameterdatei finden Sie unter Erstellen einer Resource Manager-Parameterdatei.For more information about the parameter file, see Create Resource Manager parameter file.

Verwenden Sie den TemplateParameterFile-Parameter, um eine lokale Parameterdatei zu übergeben: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

Um eine externe Parameterdatei zu übergeben, verwenden Sie den TemplateParameterUri-Parameter: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

Testen von VorlagenbereitstellungenTest template deployments

Verwenden Sie Test-AzureRmResourceGroupDeployment, um die Vorlage und die Parameterwerte zu testen, ohne dabei Ressourcen bereitzustellen.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

Wenn keine Fehler erkannt werden, wird der Befehl ohne Antwort abgeschlossen.If no errors are detected, the command finishes without a response. Wenn ein Fehler erkannt wird, gibt der Befehl eine Fehlermeldung zurück.If an error is detected, the command returns an error message. Beispielsweise wird beim Übergeben eines falschen Werts für die Speicherkonto-SKU der folgende Fehler zurückgegeben: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 :

Wenn Ihre Vorlage einen Syntaxfehler aufweist, gibt der Befehl einen Fehler zurück, der angibt, dass die Vorlage nicht analysiert werden konnte.If your template has a syntax error, the command returns an error indicating it couldn't parse the template. Die Meldung gibt Zeilennummer und Position des Analysefehlers an.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.

Nächste SchritteNext steps