Beispiel: Erstellen von Azure Storage mit den Azure-Bibliotheken für Python

In diesem Artikel erfahren Sie, wie Sie die Azure-Verwaltungsbibliotheken in einem Python-Skript verwenden, um eine Ressourcengruppe zu erstellen, die ein Azure Storage-Konto und einen Blob Storage-Container enthält.

Nachdem Sie die Ressourcen erstellt haben, siehe Beispiel: Verwenden von Azure Storage, um die Azure-Clientbibliotheken in Python-Anwendungscode zu verwenden, um eine Datei in den Blob Storage-Container hochzuladen.

Alle Befehle in diesem Artikel funktionieren in Linux-/macOS-Bash- und Windows-Befehlsshells identisch, sofern nicht anders angegeben.

Die äquivalenten Azure CLI-Befehle werden weiter unten in diesem Artikel aufgelistet. Wenn Sie das Azure-Portal bevorzugen, finden Sie weitere Informationen unter Erstellen eines Azure Storage-Kontos und Erstellen eines Blobcontainers.

1: Einrichten Ihrer lokalen Entwicklungsumgebung

Falls noch nicht geschehen, richten Sie eine Umgebung ein, in der Sie den Code ausführen können. Hier einige Optionen:

2: Installieren der erforderlichen Azure-Bibliothekspakete

  1. Erstellen Sie eine Datei requirements.txt, in der die in diesem Beispiel verwendeten Verwaltungsbibliotheken aufgeführt sind:

    azure-mgmt-resource
    azure-mgmt-storage
    azure-identity
    
  2. Installieren Sie in Ihrem Terminal bei aktivierter virtueller Umgebung die Voraussetzungen:

    pip install -r requirements.txt
    

3: Schreiben von Code zum Erstellen von Speicherressourcen

Erstellen Sie eine Python-Datei mit dem Namen provision_blob.py und dem folgenden Code. Die Details werden in den Kommentaren erläutert: Das Skript liest Ihre Abonnement-ID aus einer Umgebungsvariable, AZURE_SUBSCRIPTION_ID. Sie legen diese Variable in einem späteren Schritt fest. Der Name der Ressourcengruppe, der Speicherort, der Name des Speicherkontos und der Name des Containers sind alle als Konstanten im Code definiert.

import os, random

# Import the needed management objects from the libraries. The azure.common library
# is installed automatically with the other libraries.
from azure.identity import DefaultAzureCredential
from azure.mgmt.resource import ResourceManagementClient
from azure.mgmt.storage import StorageManagementClient

# Acquire a credential object.
credential = DefaultAzureCredential()

# Retrieve subscription ID from environment variable.
subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]

# Obtain the management object for resources.
resource_client = ResourceManagementClient(credential, subscription_id)

# Constants we need in multiple places: the resource group name and the region
# in which we provision resources. You can change these values however you want.
RESOURCE_GROUP_NAME = "PythonAzureExample-Storage-rg"
LOCATION = "centralus"

# Step 1: Provision the resource group.

rg_result = resource_client.resource_groups.create_or_update(RESOURCE_GROUP_NAME,
    { "location": LOCATION })

print(f"Provisioned resource group {rg_result.name}")

# For details on the previous code, see Example: Provision a resource group
# at https://docs.microsoft.com/azure/developer/python/azure-sdk-example-resource-group


# Step 2: Provision the storage account, starting with a management object.

storage_client = StorageManagementClient(credential, subscription_id)

STORAGE_ACCOUNT_NAME = f"pythonazurestorage{random.randint(1,100000):05}"

# You can replace the storage account here with any unique name. A random number is used
# by default, but note that the name changes every time you run this script.
# The name must be 3-24 lower case letters and numbers only.


# Check if the account name is available. Storage account names must be unique across
# Azure because they're used in URLs.
availability_result = storage_client.storage_accounts.check_name_availability(
    { "name": STORAGE_ACCOUNT_NAME }
)

if not availability_result.name_available:
    print(f"Storage name {STORAGE_ACCOUNT_NAME} is already in use. Try another name.")
    exit()

# The name is available, so provision the account
poller = storage_client.storage_accounts.begin_create(RESOURCE_GROUP_NAME, STORAGE_ACCOUNT_NAME,
    {
        "location" : LOCATION,
        "kind": "StorageV2",
        "sku": {"name": "Standard_LRS"}
    }
)

# Long-running operations return a poller object; calling poller.result()
# waits for completion.
account_result = poller.result()
print(f"Provisioned storage account {account_result.name}")


# Step 3: Retrieve the account's primary access key and generate a connection string.
keys = storage_client.storage_accounts.list_keys(RESOURCE_GROUP_NAME, STORAGE_ACCOUNT_NAME)

print(f"Primary key for storage account: {keys.keys[0].value}")

conn_string = f"DefaultEndpointsProtocol=https;EndpointSuffix=core.windows.net;AccountName={STORAGE_ACCOUNT_NAME};AccountKey={keys.keys[0].value}"

print(f"Connection string: {conn_string}")

# Step 4: Provision the blob container in the account (this call is synchronous)
CONTAINER_NAME = "blob-container-01"
container = storage_client.blob_containers.create(RESOURCE_GROUP_NAME, STORAGE_ACCOUNT_NAME, CONTAINER_NAME, {})

# The fourth argument is a required BlobContainer object, but because we don't need any
# special values there, so we just pass empty JSON.

print(f"Provisioned blob container {container.name}")

Authentifizierung im Code

Später in diesem Artikel melden Sie sich mit der Azure CLI bei Azure an, um den Beispielcode auszuführen. Wenn Ihr Konto über Berechtigungen zum Erstellen und Auflisten von Ressourcengruppen und Speicherressourcen in Ihrem Azure-Abonnement verfügt, wird der Code erfolgreich ausgeführt.

Zur Verwendung eines solchen Codes in einem Produktionsskript können Sie Umgebungsvariablen so festlegen, dass eine dienstprinzipalbasierte Methode zur Authentifizierung verwendet wird. Weitere Informationen finden Sie unter Authentifizieren von Python-Apps mit Azure-Diensten. Sie müssen sicherstellen, dass der Dienstprinzipal über ausreichende Berechtigungen zum Erstellen und Auflisten von Ressourcengruppen und Speicherressourcen in Ihrem Abonnement verfügt, indem Sie ihm eine entsprechende Rolle in Azure zuweisen, z. B. die Rolle „Mitwirkender“ in Ihrem Abonnement.

4: Ausführen des Skripts

  1. Wenn Sie das noch nicht getan haben, melden Sie sich mithilfe der Azure CLI bei Azure an:

    az login
    
  2. Legen Sie die AZURE_SUBSCRIPTION_ID Umgebungsvariable auf Ihre Abonnement-ID fest. (Sie können den Befehl az account show ausführen und Ihre Abonnement-ID aus der id Eigenschaft in der Ausgabe abrufen):

    set AZURE_SUBSCRIPTION_ID=00000000-0000-0000-0000-000000000000
    
  3. Ausführen des Skripts:

    python provision_blob.py
    

Es kann ein oder zwei Minuten dauern, bis das Skript abgeschlossen ist.

5: Überprüfen der Ressourcen

  1. Öffnen Sie das Azure-Portal, um zu überprüfen, ob die Ressourcengruppe und das Speicherkonto wie erwartet erstellt wurden. Möglicherweise müssen Sie eine Minute warten und dann auch Ausgeblendete Typen anzeigen in der Ressourcengruppe auswählen.

    Die Azure-Portal Seite für die neue Ressourcengruppe mit dem Speicherkonto

  2. Wählen Sie das Speicherkonto und dann im Menü auf der linken Seite die Option Datenspeicher>Container aus, um zu überprüfen, ob „blob-container-01“ angezeigt wird:

    Die Azure-Portal Seite für das Speicherkonto mit dem Blobcontainer

  3. Wenn Sie diese bereitgestellten Ressourcen über Anwendungscode verwenden möchten, fahren Sie mit Beispiel: Verwenden von Azure Storage fort.

Ein weiteres Beispiel mit der Azure Storage-Verwaltungsbibliothek finden Sie unter Erste Schritte mit der Azure Storage-Verwaltung in Python.

Zur Referenz: äquivalente Azure CLI-Befehle

Mit den folgenden Azure CLI-Befehlen können die gleichen Erstellungsschritte ausgeführt werden wie mit dem Python-Skript:

rem Provision the resource group

az group create ^
-n PythonAzureExample-Storage-rg ^
-l centralus

rem Provision the storage account

set account=pythonazurestorage%random%
echo Storage account name is %account%

az storage account create ^
-g PythonAzureExample-Storage-rg ^
-l centralus ^
-n %account% ^
--kind StorageV2 ^
--sku Standard_LRS

rem Retrieve the connection string

FOR /F %i IN ('az storage account show-connection-string -g PythonAzureExample-Storage-rg -n %account% --query connectionString') do (SET connstr=%i)

rem Provision the blob container

az storage container create ^
--name blob-container-01 ^
--account-name %account% ^
--connection-string %connstr%

6: Bereinigen von Ressourcen

Behalten Sie die Ressourcen bei, wenn Sie den Artikel Beispiel: Verwenden von Azure Storage befolgen möchten, um diese Ressourcen im App-Code zu verwenden. Andernfalls führen Sie den Befehl az group delete aus, wenn Sie die in diesem Beispiel erstellte Ressourcengruppe und die erstellten Speicherressourcen nicht beibehalten müssen.

Ressourcengruppen verursachen keine laufenden Gebühren in Ihrem Abonnement, aber Ressourcen wie Speicherkonten in der Ressourcengruppe können Gebühren verursachen. Es hat sich bewährt, jede Gruppe zu bereinigen, die Sie nicht aktiv verwenden. Das Argument --no-wait ermöglicht die direkte Rückgabe des Befehls, und es muss nicht auf den Abschluss des Vorgangs gewartet werden.

az group delete -n PythonAzureExample-Storage-rg  --no-wait

Sie können auch die ResourceManagementClient.resource_groups.begin_delete-Methode verwenden, um eine Ressourcengruppe aus dem Code zu löschen. Der Code unter Beispiel: Erstellen einer Ressourcengruppe veranschaulicht die Verwendung.

Weitere Informationen