Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Artikel wird erläutert, wie Sie Python mit Azure Resource Manager-Vorlagen (ARM-Vorlagen) verwenden, um Ihre Ressourcen in Azure bereitzustellen. Wenn Sie nicht mit den Konzepten der Bereitstellung und Verwaltung Ihrer Azure-Lösungen vertraut sind, informieren Sie sich unter Übersicht über die Vorlagenbereitstellung.
Voraussetzungen
Eine zu bereitstellende Vorlage. Wenn Sie noch keine besitzen, laden Sie eine Beispielvorlage aus dem Repository der Azure-Schnellstartvorlagen herunter, und speichern Sie diese.
Python 3.8 oder höher ist installiert. Um die neueste Version zu installieren, besuchen Sie Python.org
Die folgenden Azure-Bibliothekspakete für Python wurden in Ihrer virtuellen Umgebung installiert. Um eines der Pakete zu installieren, verwenden Sie
pip install {package-name}- Azure-Identity
- azure-mgmt-resource
Wenn Sie ältere Versionen dieser Pakete bereits in Ihrer virtuellen Umgebung installiert haben, müssen Sie diese möglicherweise mit
pip install --upgrade {package-name}aktualisieren.In den Beispielen in diesem Artikel wird die CLI-basierte Authentifizierung (
AzureCliCredential) verwendet. Je nach Ihrer Umgebung müssen Sie möglicherweise zuerstaz loginausführen, um sich zu authentifizieren.
Erforderliche Berechtigungen
Zum Bereitstellen einer Bicep-Datei oder einer ARM-Vorlage (Azure Resource Manager) benötigen Sie Schreibzugriff auf die Ressourcen, die Sie bereitstellen, und Zugriff auf alle Vorgänge des Microsoft.Resources/deployments-Ressourcentyps. 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.
Azure CLI Version 2.76.0 oder höher und Azure PowerShell, Version 13.4.0 oder höher , führen den ValidationLevel-Switch ein, um zu bestimmen, wie gründlich ARM die Bicep-Vorlage während dieses Prozesses überprüft. Weitere Informationen finden Sie unter "Was-wäre-wenn"-Befehle
Eine Liste der Rollen und Berechtigungen finden Sie in den integrierten 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 verwenden Sie unterschiedliche Methoden.
Verwenden Sie ResourceManagementClient.deployments.begin_create_or_update, um sie in einer Ressourcengruppe bereitzustellen:
Um ein Abonnement bereitzustellen, verwenden Sie ResourceManagementClient.deployments.begin_create_or_update_at_subscription_scope:
Weitere Informationen zu Bereitstellungen auf Abonnementebene finden Sie unter Erstellen von Ressourcengruppen und Ressourcen auf Abonnementebene.
Um eine Verwaltungsgruppe bereitzustellen, verwenden Sie ResourceManagementClient.deployments.begin_create_or_update_at_management_group_scope.
Weitere Informationen zu Bereitstellungen auf Verwaltungsgruppenebene finden Sie unter Erstellen von Ressourcen auf der Verwaltungsgruppenebene.
Um einen Mandanten bereitzustellen, verwenden Sie ResourceManagementClient.deployments.begin_create_or_update_at_tenant_scope.
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.
import random
suffix = random.randint(1, 1000)
deployment_name = f"ExampleDeployment{suffix}"
Sie können auch einen Datumswert hinzufügen.
from datetime import datetime
today = datetime.now().strftime("%m-%d-%Y")
deployment_name = f"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.
import os
from azure.identity import AzureCliCredential
from azure.mgmt.resource import ResourceManagementClient
credential = AzureCliCredential()
subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]
resource_client = ResourceManagementClient(credential, subscription_id)
rg_result = resource_client.resource_groups.create_or_update(
"exampleGroup",
{
"location": "Central US"
}
)
print(f"Provisioned resource group with ID: {rg_result.id}")
Um eine ARM-Vorlage bereitzustellen, verwenden Sie ResourceManagementClient.deployments.begin_create_or_update. Im folgenden Beispiel ist eine lokale Vorlage mit dem Namen storage.json erforderlich.
import os
import json
from azure.identity import AzureCliCredential
from azure.mgmt.resource import ResourceManagementClient
from azure.mgmt.resource.resources.models import DeploymentMode
credential = AzureCliCredential()
subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]
resource_client = ResourceManagementClient(credential, subscription_id)
with open("storage.json", "r") as template_file:
template_body = json.load(template_file)
rg_deployment_result = resource_client.deployments.begin_create_or_update(
"exampleGroup",
"exampleDeployment",
{
"properties": {
"template": template_body,
"parameters": {
"storagePrefix": {
"value": "demostore"
},
},
"mode": DeploymentMode.incremental
}
}
)
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.
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.
import os
from azure.identity import AzureCliCredential
from azure.mgmt.resource import ResourceManagementClient
credential = AzureCliCredential()
subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]
resource_client = ResourceManagementClient(credential, subscription_id)
rg_result = resource_client.resource_groups.create_or_update(
"exampleGroup",
{
"location": "Central US"
}
)
print(f"Provisioned resource group with ID: {rg_result.id}")
Um eine ARM-Vorlage bereitzustellen, verwenden Sie ResourceManagementClient.deployments.begin_create_or_update. Im folgenden Beispiel wird eine Remotevorlage bereitgestellt. Mithilfe dieser Vorlage wird ein Speicherkonto erstellt.
import os
from azure.identity import AzureCliCredential
from azure.mgmt.resource import ResourceManagementClient
from azure.mgmt.resource.resources.models import DeploymentMode
credential = AzureCliCredential()
subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]
resource_client = ResourceManagementClient(credential, subscription_id)
resource_group_name = "exampleGroup"
location = "westus"
template_uri = "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.storage/storage-account-create/azuredeploy.json"
rg_deployment_result = resource_client.deployments.begin_create_or_update(
resource_group_name,
"exampleDeployment",
{
"properties": {
"templateLink": {
"uri": template_uri
},
"parameters": {
"location": {
"value": location
}
},
"mode": DeploymentMode.incremental
}
}
)
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 Ihre Vorlagen in einem Speicherkonto speichern, das keinen anonymen Zugriff zulässt, müssen Sie ein SAS-Token bereitstellen.
import os
from azure.identity import AzureCliCredential
from azure.mgmt.resource import ResourceManagementClient
from azure.mgmt.resource.resources.models import DeploymentMode
credential = AzureCliCredential()
subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]
sas_token = os.environ["SAS_TOKEN"]
resource_client = ResourceManagementClient(credential, subscription_id)
resource_group_name = "exampleGroup"
location = "westus"
template_uri = f"https://stage20230425.blob.core.windows.net/templates/storage.json?{sas_token}"
rg_deployment_result = resource_client.deployments.begin_create_or_update(
resource_group_name,
"exampleDeployment",
{
"properties": {
"templateLink": {
"uri": template_uri
},
"parameters": {
"location": {
"value": location
}
},
"mode": DeploymentMode.incremental
}
}
)
Weitere Informationen finden Sie unter Verwenden des relativen Pfads für verknüpfte Vorlagen.
Bereitstellen von Vorlagenspezifikationen
Anstatt eine lokale Vorlage oder eine 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.
In den folgenden Beispielen wird das Erstellen und Bereitstellen einer Vorlagenspezifikation veranschaulicht.
Als Erstes erstellen Sie die Vorlagenspezifikation, indem Sie die ARM-Vorlage angeben.
import os
import json
from azure.identity import AzureCliCredential
from azure.mgmt.resource.templatespecs import TemplateSpecsClient
from azure.mgmt.resource.templatespecs.models import TemplateSpecVersion, TemplateSpec
credential = AzureCliCredential()
subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]
template_specs_client = TemplateSpecsClient(credential, subscription_id)
template_spec = TemplateSpec(
location="westus2",
description="Storage Spec"
)
template_specs_client.template_specs.create_or_update(
"templateSpecsRG",
"storageSpec",
template_spec
)
with open("storage.json", "r") as template_file:
template_body = json.load(template_file)
version = TemplateSpecVersion(
location="westus2",
description="Storage Spec",
main_template=template_body
)
template_spec_result = template_specs_client.template_spec_versions.create_or_update(
"templateSpecsRG",
"storageSpec",
"1.0.0",
version
)
print(f"Provisioned template spec with ID: {template_spec_result.id}")
Rufen Sie anschließend die ID der Vorlagenspezifikation ab, und stellen Sie sie bereit.
import os
from azure.identity import AzureCliCredential
from azure.mgmt.resource import ResourceManagementClient
from azure.mgmt.resource.resources.models import DeploymentMode
from azure.mgmt.resource.templatespecs import TemplateSpecsClient
credential = AzureCliCredential()
subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]
resource_client = ResourceManagementClient(credential, subscription_id)
template_specs_client = TemplateSpecsClient(credential, subscription_id)
template_spec = template_specs_client.template_spec_versions.get(
"templateSpecsRg",
"storageSpec",
"1.0.0"
)
rg_deployment_result = resource_client.deployments.begin_create_or_update(
"exampleGroup",
"exampleDeployment",
{
"properties": {
"template_link": {
"id": template_spec.id
},
"mode": DeploymentMode.incremental
}
}
)
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.
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.