Bereitstellen von Ressourcen mit ARM-Vorlagen und Azure PowerShell
In diesem Artikel wird erläutert, wie Ihre Anwendung mit Azure PowerShell und Azure Resource Manager-Vorlagen (ARM) in Azure bereitgestellt wird. Wenn Sie nicht mit den Konzepten der Bereitstellung und Verwaltung Ihrer Azure-Lösungen vertraut sind, informieren Sie sich unter Übersicht über die Vorlagenbereitstellung.
Tipp
Wir empfehlen Bicep, weil es dieselben Funktionen wie ARM-Vorlagen bietet und die Syntax einfacher zu verwenden ist. Weitere Informationen finden Sie unter Bereitstellen von Ressourcen mit Bicep und Azure PowerShell.
Voraussetzungen
Sie benötigen eine Vorlage für die Bereitstellung. Wenn Sie noch keine besitzen, laden Sie eine Beispielvorlage aus dem Repository der Azure-Schnellstartvorlagen herunter, und speichern Sie diese. Der Name der lokalen Datei in diesem Artikel lautet C:\MyTemplates\azuredeploy.json.
Sie müssen Azure PowerShell installieren und eine Verbindung zu Azure herstellen:
- Installieren Sie Azure PowerShell-Cmdlets auf Ihrem lokalen Computer. Weitere Informationen finden Sie unter Erste Schritte mit Azure PowerShell.
- Stellen Sie mithilfe von Connect-AZAccount eine Verbindung mit Azure her. Wenn Sie über mehrere Azure-Abonnements verfügen, müssen Sie möglicherweise auch Set-AzContext ausführen. Weitere Informationen finden Sie unter Verwenden mehrerer Azure-Abonnements.
Wenn PowerShell nicht installiert ist, können Sie Azure Cloud Shell verwenden. Weitere Informationen finden Sie unter Bereitstellen von ARM-Vorlagen über Azure Cloud Shell.
Erforderliche Berechtigungen
Zum Bereitstellen einer Bicep-Datei oder ARM-Vorlage benötigen Sie Schreibzugriff auf die Ressourcen, die Sie bereitstellen, und Zugriff auf alle Vorgänge für den Ressourcentyp Microsoft.Resources/deployments. Um beispielsweise eine VM bereitstellen zu können, benötigen Sie die Berechtigungen Microsoft.Compute/virtualMachines/write
und Microsoft.Resources/deployments/*
. Für den Was-wäre-wenn-Vorgang gelten die gleichen Berechtigungsanforderungen.
Eine Liste der Rollen und Berechtigungen finden Sie unter Integrierte Azure-Rollen.
Bereitstellungsumfang
Sie können als Ziel für Ihre Bereitstellung eine Ressourcengruppe, ein Abonnement, eine Verwaltungsgruppe oder einen Mandanten verwenden. Abhängig vom Umfang der Bereitstellung verwenden Sie unterschiedliche Befehle.
Verwenden Sie New-AzResourceGroupDeployment, um eine Ressourcengruppe bereitzustellen:
New-AzResourceGroupDeployment -ResourceGroupName <resource-group-name> -TemplateFile <path-to-template>
Zur Bereitstellung in einem Abonnement verwenden Sie New-AzSubscriptionDeployment, ein Alias des Cmdlets
New-AzDeployment
:New-AzSubscriptionDeployment -Location <location> -TemplateFile <path-to-template>
Weitere Informationen zu Bereitstellungen auf Abonnementebene finden Sie unter Erstellen von Ressourcengruppen und Ressourcen auf Abonnementebene.
Verwenden Sie zum Bereitstellen in einer Verwaltungsgruppe das Cmdlet New-AzManagementGroupDeployment.
New-AzManagementGroupDeployment -Location <location> -TemplateFile <path-to-template>
Weitere Informationen zu Bereitstellungen auf Verwaltungsgruppenebene finden Sie unter Erstellen von Ressourcen auf der Verwaltungsgruppenebene.
Für die Bereitstellung in einem Mandanten verwenden Sie New-AzTenantDeployment.
New-AzTenantDeployment -Location <location> -TemplateFile <path-to-template>
Weitere Informationen zu Bereitstellungen auf Mandantenebene finden Sie unter Erstellen von Ressourcen auf der Mandantenebene.
Der Benutzer, der die Vorlage bereitstellt, muss für jeden Bereich über die erforderlichen Berechtigungen zum Erstellen von Ressourcen verfügen.
„Deployment name“ (Bereitstellungsname)
Wenn Sie eine ARM-Vorlage bereitstellen, können Sie der Bereitstellung einen Namen geben. Dieser Name kann das Abrufen der Bereitstellung aus dem Bereitstellungsverlauf vereinfachen. Wenn Sie keinen Namen für die Bereitstellung angeben, wird der Name der Vorlagendatei verwendet. Wenn Sie beispielsweise eine Vorlage mit dem Namen azuredeploy.json
bereitstellen und keinen Bereitstellungsnamen angeben, erhält die Bereitstellung den Namen azuredeploy
.
Bei jedem Ausführen einer Bereitstellung wird dem Bereitstellungsverlauf der Ressourcengruppe ein Eintrag mit dem Bereitstellungsnamen hinzugefügt. Wenn Sie eine andere Bereitstellung ausführen und denselben Namen vergeben, wird der vorherige Eintrag durch die aktuelle Bereitstellung ersetzt. Wenn Sie eindeutige Einträge im Bereitstellungsverlauf beibehalten möchten, müssen Sie jeder Bereitstellung einen eindeutigen Namen geben.
Um einen eindeutigen Namen zu erstellen, können Sie eine Zufallszahl zuweisen.
$suffix = Get-Random -Maximum 1000
$deploymentName = "ExampleDeployment" + $suffix
Sie können auch einen Datumswert hinzufügen.
$today=Get-Date -Format "MM-dd-yyyy"
$deploymentName="ExampleDeployment"+"$today"
Wenn Sie gleichzeitige Bereitstellungen in derselben Ressourcengruppe mit dem gleichen Bereitstellungsnamen ausführen, wird nur die letzte Bereitstellung abgeschlossen. Alle Bereitstellungen mit dem gleichen Namen, die noch nicht abgeschlossen wurden, werden durch die letzte Bereitstellung ersetzt. Wenn Sie z. B. eine Bereitstellung mit dem Namen newStorage
ausführen, die ein Speicherkonto mit dem Namen storage1
bereitstellt, und gleichzeitig eine andere Bereitstellung mit dem Namen newStorage
ausführen, die ein Speicherkonto mit dem Namen storage2
bereitstellt, wird nur ein Speicherkonto bereitgestellt. Das resultierende Speicherkonto hat den Namen storage2
.
Führen Sie jedoch eine Bereitstellung mit dem Namen newStorage
aus, die ein Speicherkonto mit dem Namen storage1
bereitstellt, und führen Sie direkt nach dem Abschluss eine andere Bereitstellung mit dem Namen newStorage
aus, die ein Speicherkonto mit dem Namen storage2
bereitstellt, erhalten Sie zwei Speicherkonten. Eines hat den Namen storage1
und das andere den Namen storage2
. Es ist jedoch nur ein Eintrag im Bereitstellungsverlauf vorhanden.
Wenn Sie für jede Bereitstellung einen eindeutigen Namen angeben, können Sie diese ohne Konflikt gleichzeitig ausführen. Wenn Sie eine Bereitstellung namens newStorage1
ausführen, die ein Speicherkonto namens storage1
bereitstellt, und gleichzeitig eine andere Bereitstellung namens newStorage2
ausführen, die ein Speicherkonto namens storage2
bereitstellt, erhalten Sie zwei Speicherkonten und zwei Einträge im Bereitstellungsverlauf.
Um Konflikte mit gleichzeitigen Bereitstellungen zu vermeiden und eindeutige Einträge im Bereitstellungsverlauf zu gewährleisten, geben Sie jeder Bereitstellung einen eindeutigen Namen.
Bereitstellen einer lokalen Vorlage
Sie können eine Vorlage bereitstellen, die auf Ihrem lokalen Computer oder extern gespeichert ist. In diesem Abschnitt wird die Bereitstellung einer lokalen Vorlage beschrieben.
Wenn eine Bereitstellung in einer Ressourcengruppe erfolgen soll, die nicht vorhanden ist, erstellen Sie zunächst die Ressourcengruppe. Der Name einer Ressourcengruppe darf nur alphanumerische Zeichen, Punkte, Unterstriche, Bindestriche und Klammern enthalten. Der Name kann bis zu 90 Zeichen umfassen. Der Name darf nicht mit einem Punkt enden.
New-AzResourceGroup -Name ExampleGroup -Location "Central US"
Verwenden Sie zum Bereitstellen einer lokalen Vorlage im Bereitstellungsbefehl den Parameter -TemplateFile
. Das folgende Beispiel zeigt auch, wie ein Parameterwert festgelegt wird, der aus der Vorlage stammt.
New-AzResourceGroupDeployment `
-Name ExampleDeployment `
-ResourceGroupName ExampleGroup `
-TemplateFile <path-to-template>
Die Bereitstellung kann mehrere Minuten dauern.
Bereitstellen einer Remotevorlage
Anstatt ARM-Vorlagen auf dem lokalen Computer zu speichern, könnten Sie sie auch an einem externen Speicherort speichern. Sie können Vorlagen in einem Quellcodeverwaltungs-Repository (z.B. GitHub) speichern. Für den gemeinsamen Zugriff in Ihrer Organisation können Sie sie auch in einem Azure-Speicherkonto speichern.
Hinweis
Um eine Vorlage bereitzustellen oder auf eine verknüpfte Vorlage zu verweisen, die in einem privaten GitHub-Repository gespeichert ist, können Sie eine der benutzerdefinierten Lösungen verwenden, die in Erstellen eines benutzerdefinierten und sicheren Azure Portal-Angebots dokumentiert sind. Sie können eine Azure-Funktion erstellen, die das GitHub-Token aus Azure Key Vault abruft.
Wenn eine Bereitstellung in einer Ressourcengruppe erfolgen soll, die nicht vorhanden ist, erstellen Sie zunächst die Ressourcengruppe. Der Name einer Ressourcengruppe darf nur alphanumerische Zeichen, Punkte, Unterstriche, Bindestriche und Klammern enthalten. Der Name kann bis zu 90 Zeichen umfassen. Der Name darf nicht mit einem Punkt enden.
New-AzResourceGroup -Name ExampleGroup -Location "Central US"
Verwenden Sie zum Bereitstellen einer externen Vorlage den -TemplateUri
-Parameter.
New-AzResourceGroupDeployment `
-Name remoteTemplateDeployment `
-ResourceGroupName ExampleGroup `
-TemplateUri https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.storage/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. Wenn Sie vertrauliche Daten (z.B. ein Administratorkennwort) angeben müssen, übergeben Sie diesen Wert als sicheren Parameter. Wenn Sie jedoch den Zugriff auf die Vorlage verwalten möchten, erwägen Sie den Einsatz von Vorlagenspezifikationen.
Wenn Sie remoteverknüpfte Vorlagen mit einem relativen Pfad bereitstellen möchten, die in einem Speicherkonto gespeichert sind, verwenden Sie QueryString
, um das SAS-Token anzugeben:
New-AzResourceGroupDeployment `
-Name linkedTemplateWithRelativePath `
-ResourceGroupName "myResourceGroup" `
-TemplateUri "https://stage20210126.blob.core.windows.net/template-staging/mainTemplate.json" `
-QueryString "$sasToken"
Weitere Informationen finden Sie unter Verknüpfte Vorlage.
Bereitstellen der Vorlagenspezifikationen
Anstatt eine lokale oder Remotevorlage bereitzustellen, können Sie eine Vorlagenspezifikation erstellen. Bei der Vorlagenspezifikation handelt es sich um eine Ressource im Azure-Abonnement, die eine ARM-Vorlage enthält. Sie vereinfacht die sichere Freigabe der Vorlage für Benutzer in Ihrer Organisation. Mit der rollenbasierten Zugriffssteuerung von Azure (Role-Based Access Control, Azure RBAC) können Sie Zugriff auf die Vorlagenspezifikation gewähren. Diese Funktion steht derzeit als Vorschau zur Verfügung.
In den folgenden Beispielen wird das Erstellen und Bereitstellen einer Vorlagenspezifikation veranschaulicht.
Als Erstes erstellen Sie die Vorlagenspezifikation, indem Sie die ARM-Vorlage angeben.
New-AzTemplateSpec `
-Name storageSpec `
-Version 1.0 `
-ResourceGroupName templateSpecsRg `
-Location westus2 `
-TemplateJsonFile ./mainTemplate.json
Rufen Sie anschließend die ID der Vorlagenspezifikation ab, und stellen Sie sie bereit.
$id = (Get-AzTemplateSpec -Name storageSpec -ResourceGroupName templateSpecsRg -Version 1.0).Versions.Id
New-AzResourceGroupDeployment `
-ResourceGroupName demoRG `
-TemplateSpecId $id
Weitere Informationen finden Sie unter Azure Resource Manager-Vorlagenspezifikationen.
Vorschau der Änderungen
Vor dem Bereitstellen der Vorlage können Sie die Änderungen, die von der Vorlage an Ihrer Umgebung vorgenommen werden, in der Vorschau anzeigen. Überprüfen Sie anhand des „Was-wäre-wenn“-Vorgangs, ob die Vorlage die erwarteten Änderungen vornimmt. „Was-wäre-wenn“ überprüft auch die Vorlage auf Fehler.
Übergeben von Parameterwerten
Zum Übergeben von Parameterwerten können Sie entweder Inlineparameter oder eine Parameterdatei verwenden. Die Parameterdatei kann eine Bicep- oder eine JSON-Parameterdatei sein.
Inlineparameter
Geben Sie zum Übergeben von Inlineparametern die Parameternamen mit dem Befehl New-AzResourceGroupDeployment
an. Wenn Sie beispielsweise eine Zeichenfolge und ein Array an eine Vorlage in einer Vorlage übergeben möchten, verwenden Sie Folgendes:
$arrayParam = "value1", "value2"
New-AzResourceGroupDeployment -ResourceGroupName testgroup `
-TemplateFile <path-to-template> `
-exampleString "inline string" `
-exampleArray $arrayParam
Sie können den TemplateParameterObject
-Parameter verwenden, um eine Hashtabelle zu durchlaufen, die die Parameter für die Vorlage enthält.
$params = @{
exampleString = "inline string"
exampleArray = "value1", "value2"
}
New-AzResourceGroupDeployment -ResourceGroupName testgroup `
-TemplateFile <path-to-bicep> `
-TemplateParameterObject $params
Sie können auch den Inhalt einer Datei abrufen und als Inlineparameter übergeben.
$arrayParam = "value1", "value2"
New-AzResourceGroupDeployment -ResourceGroupName testgroup `
-TemplateFile <path-to-template> `
-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. Sie können beispielsweise cloud-init-Werte für einen virtuellen Linux-Computer angeben.
Wenn Sie ein Array von Objekten übergeben müssen, erstellen Sie Hashtabellen in PowerShell, und fügen Sie sie einem Array hinzu. Übergeben Sie dieses Array während der Bereitstellung als Parameter.
$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
JSON-Parameterdateien
Anstatt Parameter als Inlinewerte in Ihrem Skript zu übergeben, ist es wohl einfacher, eine JSON-Datei zu verwenden, die die Parameterwerte enthält. Bei der Parameterdatei kann es sich um eine lokale Datei oder eine externe Datei mit einem erreichbaren URI handeln.
Weitere Informationen zur Parameterdatei finden Sie unter Erstellen einer Resource Manager-Parameterdatei.
Um eine lokale Parameterdatei zu übergeben, verwenden Sie den Parameter TemplateParameterFile
:
New-AzResourceGroupDeployment `
-Name ExampleDeployment `
-ResourceGroupName ExampleResourceGroup `
-TemplateFile <path-to-template> `
-TemplateParameterFile c:\MyTemplates\storage.parameters.json
Um eine externe Parameterdatei zu übergeben, verwenden Sie den TemplateParameterUri
-Parameter:
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
Weitere Informationen zur Parameterdatei finden Sie unter Erstellen einer Resource Manager-Parameterdatei.
Bicep-Parameterdateien
Mit Azure PowerShell Version 10.4.0 oder höher und Bicep CLI Version 0.22.6 oder höher können Sie eine ARM-Vorlagendatei mithilfe einer Bicep-Parameterdatei bereitstellen. Bei der using
-Anweisung in der Bicep-Parameterdatei muss die Option -TemplateFile
nicht angegeben werden, wenn Sie eine Bicep-Parameterdatei für die Option -TemplateParameterFile
angeben.
Das folgende Beispiel zeigt eine Parameterdatei namens storage.bicepparam. Die Datei befindet sich im selben Verzeichnis, in dem der Befehl ausgeführt wird.
New-AzResourceGroupDeployment `
-Name ExampleDeployment `
-ResourceGroupName ExampleResourceGroup `
-TemplateParameterFile storage.bicepparam
Weitere Informationen zu Bicep-Parameterdateien finden Sie unter Parameterdatei.
Nächste Schritte
- Informationen zum Rollback zu einer erfolgreiche Bereitstellung, wenn ein Fehler auftritt, finden Sie unter Rollback bei Fehler zu erfolgreicher Bereitstellung.
- Wenn Sie angeben möchten, wie Ressourcen behandelt werden sollen, die in der Ressourcengruppe enthalten sind, aber nicht in der Vorlage definiert wurden, lesen Sie die Informationen unter Azure Resource Manager-Bereitstellungsmodi.
- Um zu verstehen, wie Parameter in der Vorlage definiert werden, lesen Sie Verstehen der Struktur und Syntax von ARM-Vorlagen.
- Informationen zum Bereitstellen einer Vorlage, die ein SAS-Token erfordert, finden Sie unter Bereitstellen einer privaten ARM-Vorlage mit SAS-Token.