Bereitstellen von Bicep-Dateien mit Azure PowerShell
In diesem Artikel wird erläutert, wie Ihre Ressourcen mithilfe von Azure PowerShell und Bicep-Dateien in Azure bereitgestellt werden. Wenn Sie mit der Bereitstellung und Verwaltung Ihrer Azure-Lösungen nicht vertraut sind, lesen Sie Was ist Bicep?.
Voraussetzungen
Sie benötigen für die Bereitstellung eine Bicep-Datei, die lokal gespeichert sein muss. Sie müssen auch über Azure PowerShell verfügen und mit Azure verbunden sein:
- Installieren Sie Azure PowerShell-Cmdlets auf Ihrem lokalen Computer. Zum Bereitstellen von BICEP-Dateien benötigen Sie Version 5.6.0 oder höher von Azure PowerShell. Weitere Informationen finden Sie unter Erste Schritte mit Azure PowerShell.
- Installieren Sie die Bicep CLI. Sie müssen die Bicep CLI manuell installieren, da sie von Azure PowerShell nicht automatisch installiert wird.
- Verwenden Sie
Connect-AzAccount
, um eine Verbindung mit Azure herzustellen. Wenn Sie über mehrere Azure-Abonnements verfügen, müssen Sie möglicherweise auchSet-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 Bicep-Dateien mit 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. Je nach Umfang der Bereitstellung müssen Sie unterschiedliche Befehle verwenden. Der Benutzer, der die Bicep-Datei bereitstellt, muss über die erforderlichen Berechtigungen verfügen, um Ressourcen für jeden Bereich zu erstellen.
Um eine Ressourcengruppe bereitzustellen, verwenden Sie
New-AzResourceGroupDeployment
:New-AzResourceGroupDeployment -ResourceGroupName <resource-group-name> -TemplateFile <path-to-bicep>
Zur Bereitstellung in einem Abonnement verwenden Sie
New-AzSubscriptionDeployment
, ein Alias des CmdletsNew-AzDeployment
:New-AzSubscriptionDeployment -Location <location> -TemplateFile <path-to-bicep>
Weitere Informationen zu Bereitstellungen auf Abonnementebene finden Sie unter Verwenden von Bicep zur Bereitstellung von Ressourcen in einem Abonnement.
Um eine Verwaltungsgruppe bereitzustellen, verwenden Sie
New-AzManagementGroupDeployment
.New-AzManagementGroupDeployment -ManagementGroupId <management-group-id> -Location <location> -TemplateFile <path-to-bicep>
Weitere Informationen zu Bereitstellungen auf Verwaltungsgruppenebene finden Sie unter Verwenden von Bicep zur Bereitstellung von Ressourcen in einer Verwaltungsgruppe.
Um einen Mandanten bereitzustellen, verwenden Sie
New-AzTenantDeployment
.New-AzTenantDeployment -Location <location> -TemplateFile <path-to-bicep>
Weitere Informationen zu Bereitstellungen auf Mandantenebene finden Sie unter Verwenden von Bicep zur Bereitstellung von Ressourcen in einem Mandanten.
Bereitstellen einer lokalen Bicep-Datei
In diesem Abschnitt wird beschrieben, wie eine lokale Bicep-Datei bereitgestellt wird. Sie können eine Bicep-Datei bereitstellen, die auf Ihrem lokalen Computer oder extern gespeichert ist.
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. Maximal 90 Zeichen sind zulässig, von denen das letzte kein Punkt sein darf.
New-AzResourceGroup -Name ExampleGroup -Location "Central US"
Verwenden Sie zum Bereitstellen einer lokalen Bicep-Datei den Schalter -TemplateFile
im Bereitstellungsbefehl:
New-AzResourceGroupDeployment `
-Name ExampleDeployment `
-ResourceGroupName ExampleGroup `
-TemplateFile <path-to-bicep>
Die Bereitstellung kann mehrere Minuten dauern.
Bereitstellen einer Bicep-Remotedatei
Derzeit wird die Bereitstellung von Bicep-Remotedateien von Azure PowerShell nicht unterstützt. Sie können die Bicep-Datei mithilfe der Bicep CLI in eine JSON-Vorlage erstellen und dann die JSON-Datei an einen Remotespeicherort laden. Weitere Informationen finden Sie unter Bereitstellen einer Remotevorlage.
Parameter
Zum Übergeben von Parameterwerten können Sie entweder Inlineparameter oder eine Parameterdatei verwenden. Die Parameterdatei kann eine Bicep-Parameterdatei 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 Bicep-Datei übergeben möchten, verwenden Sie Folgendes:
$arrayParam = "value1", "value2"
New-AzResourceGroupDeployment -ResourceGroupName testgroup `
-TemplateFile <path-to-bicep> `
-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-bicep> `
-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 Azure 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-bicep> `
-exampleArray $subnetArray
Bicep-Parameterdateien
Anstatt Parameter als Inlinewerte in Ihrem Skript zu übergeben, ist es eventuell einfacher, eine Bicep-Parameterdatei oder eine JSON-Parameterdatei zu verwenden, die die Parameterwerte enthält. Die Bicep-Parameterdatei muss lokal gespeichert sein sein, während sich die JSON-Vorlagendatei irgendwo online befinden kann. Weitere Informationen zu Parameterdateien finden Sie unter Erstellen von Parameterdateien für die Bicep-Bereitstellung.
Ab der Azure PowerShell-Version 10.4.0 und der Bicep CLI-Version 0.22.X können Sie eine Bicep-Datei mithilfe einer Bicep-Parameterdatei bereitstellen. Mit der using
-Anweisung in der Bicep-Parameterdatei müssen Sie den -TemplateFile
-Schalter nicht angeben, wenn Sie eine Bicep-Parameterdatei für den -TemplateParameterFile
-Schalter festlegen.
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
JSON-Parameterdateien
Die JSON-Parameterdatei kann eine lokale Datei sein oder eine externe Datei mit einem erreichbaren URI.
Um eine lokale Parameterdatei zu übergeben, verwenden Sie den Schalter TemplateParameterFile
mit einer JSON-Parameterdatei:
New-AzResourceGroupDeployment `
-Name ExampleDeployment `
-ResourceGroupName ExampleResourceGroup `
-TemplateFile c:\BicepFiles\storage.bicep `
-TemplateParameterFile c:\BicepFiles\storage.parameters.json
Um eine externe Parameterdatei zu übergeben, verwenden Sie den TemplateParameterUri
-Parameter:
New-AzResourceGroupDeployment `
-Name ExampleDeployment `
-ResourceGroupName ExampleResourceGroup `
-TemplateFile c:\BicepFiles\storage.bicep `
-TemplateParameterUri https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.storage/storage-account-create/azuredeploy.parameters.json
Da der TemplateParameterUri
-Parameter nur JSON-Parameterdateien unterstützt, werden .bicepparam
-Dateien nicht unterstützt.
Sie können Inlineparameter und eine Standortparameterdatei im selben Bereitstellungsvorgang verwenden. Weitere Informationen finden Sie unter Parameterrangfolge.
Vorschau der Änderungen
Vor dem Bereitstellen der Bicep-Datei können Sie die Änderungen, die von der Bicep-Datei an Ihrer Umgebung vorgenommen werden, in der Vorschau anzeigen. Überprüfen Sie anhand des Was-wäre-wenn-Vorgangs, ob die Bicep-Datei die erwarteten Änderungen vornimmt. Mit „Was-wäre-wenn“ wird die Bicep-Datei auch auf Fehler überprüft.
Bereitstellen von Vorlagenspezifikationen
Derzeit stellt die Azure PowerShell keine Bicep-Dateien bereit, um Vorlagenspezifikationen zu erstellen. Sie können jedoch eine Bicep-Datei mit der Microsoft.Resources/templateSpecs-Ressource erstellen, um eine Vorlagenspezifikation bereitzustellen. Das Beispiel „Erstellen einer Vorlagenspezifikation“ zeigt, wie eine Vorlagenspezifikation in einer Bicep-Datei erstellt wird. Sie können Ihre Bicep-Datei auch über die Bicep CLI im JSON-Format erstellen und dann eine Vorlagenspezifikation mit der JSON-Vorlage erstellen.
„Deployment name“ (Bereitstellungsname)
Wenn Sie eine Bicep-Datei 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, erhält sie den Namen der Bicep-Datei. Wenn Sie beispielsweise eine Bicep-Datei mit dem Namen main.bicep bereitstellen und keinen Bereitstellungsnamen angeben, erhält die Bereitstellung den Namen main
.
Bei jeder Ausführung 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 der ersten Bereitstellung 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 mit dem Namen newStorage1
ausführen, die ein Speicherkonto mit dem Namen storage1
bereitstellt, und gleichzeitig eine andere Bereitstellung mit dem Namen newStorage2
ausführen, die ein Speicherkonto mit dem Namen storage2
bereitstellt, erhalten Sie zwei Speicherkonten und zwei Einträge im Bereitstellungsverlauf.
Geben Sie jeder Bereitstellung einen eindeutigen Namen, um Konflikte mit gleichzeitigen Bereitstellungen zu vermeiden und eindeutige Einträge im Bereitstellungsverlauf zu gewährleisten.
Nächste Schritte
Um zu erfahren, wie Parameter in der Vorlage definiert werden, lesen Sie Verstehen der Struktur und Syntax von Bicep-Dateien.