Beispiel: Erstellen von Azure Storage mithilfe der Azure-Bibliotheken für Python

In diesem Artikel erfahren Sie, wie Sie die Azure-Verwaltungsbibliotheken für Python verwenden, um eine Ressourcengruppe zusammen mit einem Azure Storage-Konto und einem Blob Storage-Container zu erstellen.

Lesen Sie nach der Bereitstellung dieser Ressourcen den Abschnitt "Beispiel: Verwenden von Azure Storage ", um zu sehen, wie Sie die Azure-Clientbibliotheken in Python verwenden, um eine Datei in den Blob-Container hochzuladen.

Die entsprechenden Azure CLI-Befehle für Bash und PowerShell werden weiter unten in diesem Artikel aufgeführt. Wenn Sie das Azure-Portal verwenden möchten, lesen Sie " Erstellen eines Azure-Speicherkontos " und "Erstellen eines BLOB-Containers".

1: Einrichten Ihrer lokalen Entwicklungsumgebung

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

  • Konfigurieren Sie eine virtuelle Python-Umgebung mit venv oder Ihrem Wahltool. Um mit der Verwendung der virtuellen Umgebung zu beginnen, müssen Sie sie aktivieren. Informationen zum Installieren von Python finden Sie unter Installieren von Python.

    #!/bin/bash
    # Create a virtual environment
    python -m venv .venv
    # Activate the virtual environment
    source .venv/Scripts/activate # only required for Windows (Git Bash)
    
  • Verwenden Sie eine conda-Umgebung. Informationen zum Installieren von Conda finden Sie unter Installieren von Miniconda.

  • Verwenden Sie einen Dev Container in Visual Studio Code oder GitHub Codespaces.

2: Installieren der erforderlichen Azure-Bibliothekspakete

  1. Erstellen Sie in der Konsole eine requirements.txt Datei, in der die in diesem Beispiel verwendeten Verwaltungsbibliotheken aufgelistet sind:

    azure-mgmt-resource
    azure-mgmt-storage
    azure-identity
    
  2. Installieren Sie in Ihrer Konsole mit aktivierter virtueller Umgebung die Anforderungen:

    pip install -r requirements.txt
    

3. Festlegen von Umgebungsvariablen

In diesem Schritt legen Sie Umgebungsvariablen für die Verwendung im Code in diesem Artikel fest. Der Code verwendet die os.environ Methode, um die Werte abzurufen.

#!/bin/bash
export AZURE_RESOURCE_GROUP_NAME="<ResourceGroupName>" # Change to your preferred resource group name
export LOCATION="<Location>" # Change to your preferred region
export AZURE_SUBSCRIPTION_ID=$(az account show --query id --output tsv)
export STORAGE_ACCOUNT_NAME="<StorageAccountName>" # Change to your preferred storage account name
export CONTAINER_NAME="<ContainerName>" # Change to your preferred container name

4: Schreiben von Code zum Erstellen eines Speicherkontos und blob-Containers

In diesem Schritt erstellen Sie eine Python-Datei mit dem Namen provision_blob.py mit dem folgenden Code. Dieses Python Skript verwendet die Azure SDK für Python-Verwaltungsbibliotheken, um eine Ressourcengruppe, Azure Storage Konto und Blob-Container zu erstellen.

import os

# Import the needed credential and management objects from the libraries.
from azure.identity import DefaultAzureCredential
from azure.mgmt.resource import ResourceManagementClient
from azure.mgmt.storage import StorageManagementClient
from azure.mgmt.storage.models import BlobContainer

# Acquire a credential object.
credential = DefaultAzureCredential()

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

# Retrieve resource group name and location from environment variables
RESOURCE_GROUP_NAME = os.environ["AZURE_RESOURCE_GROUP_NAME"]
LOCATION = os.environ["LOCATION"]

# Step 1: Provision the resource group.
resource_client = ResourceManagementClient(credential, subscription_id)

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: Create a resource group:
# https://learn.microsoft.com/azure/developer/python/sdk/examples/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 = os.environ["STORAGE_ACCOUNT_NAME"] 

# 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, "type": "Microsoft.Storage/storageAccounts" }
)

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("Retrieved the primary key for the storage account")

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 = os.environ["CONTAINER_NAME"]
container = storage_client.blob_containers.create(RESOURCE_GROUP_NAME, STORAGE_ACCOUNT_NAME, CONTAINER_NAME, BlobContainer())

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

Authentifizierung im Code

Später in diesem Artikel melden Sie sich mit dem Azure CLI zum Ausführen des Beispielcodes bei Azure an. Wenn Ihr Konto über ausreichende Berechtigungen zum Erstellen von Ressourcengruppen und Speicherressourcen in Ihrem Azure-Abonnement verfügt, wird das Skript ohne zusätzliche Konfiguration erfolgreich ausgeführt.

Um diesen Code in einer Produktionsumgebung zu verwenden, authentifizieren Sie sich mithilfe eines Dienstprinzipals, und legen Sie Umgebungsvariablen fest. Dieser Ansatz ermöglicht einen sicheren, automatisierten Zugriff, ohne sich auf die interaktive Anmeldung zu verlassen. Ausführliche Anleitungen finden Sie unter Authentifizieren von Python-Apps mit Azure-Diensten.

Stellen Sie sicher, dass dem Dienstprinzipal eine Rolle mit ausreichenden Berechtigungen zum Erstellen von Ressourcengruppen und Speicherkonten zugewiesen ist. Beispielsweise bietet das Zuweisen der Rolle "Mitwirkender" auf Abonnementebene den erforderlichen Zugriff. Weitere Informationen zu Rollenzuweisungen finden Sie unter Rollenbasierte Zugriffssteuerung (Role-based access control, RBAC) in Azure.

5. Ausführen des Skripts

  1. Falls noch nicht geschehen, melden Sie sich mit dem Azure CLI bei Azure an:

    az login
    

  2. Ausführen des Skripts:

    python provision_blob.py
    

    Das Skript benötigt ein oder zwei Minuten zur Ausführung.

6: Ü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 die Ressourcengruppenansicht aktualisieren.

  2. Wählen Sie das Speicherkonto und dann im linken Menü "Datenspeichercontainer>" aus, um zu überprüfen, ob der von Ihnen erstellte Container angezeigt wird:

    Azure-Portalseite für das Speicherkonto mit dem BLOB-Container

  3. Wenn Sie versuchen möchten, diese Ressourcen aus Dem Anwendungscode zu verwenden, fahren Sie mit Beispiel fort: Verwenden Sie Azure Storage.

Ein weiteres Beispiel für die Verwendung der Azure Storage-Verwaltungsbibliothek finden Sie im Beispiel "Python Storage verwalten".

7: Bereinigen von Ressourcen

Wenn Sie diese Ressourcen im App-Code verwenden möchten, folgen Sie dem Artikel Example: Verwenden Sie Azure Storage. Führen Sie andernfalls den Befehl " az group delete " aus, wenn Sie die in diesem Beispiel erstellten Ressourcengruppe und 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 empfiehlt sich, jede Ressourcengruppe zu bereinigen, die Sie nicht aktiv verwenden. Mit dem Argument --no-wait kann der Befehl sofort zurückgegeben werden, anstatt auf den Abschluss des Vorgangs zu warten.

#!/bin/bash
az group delete -n $AZURE_RESOURCE_GROUP_NAME --no-wait

Referenz: entsprechende Azure CLI-Befehle

Die folgenden Azure CLI-Befehle führen dieselben Erstellungsschritte wie das Python-Skript aus:

#!/bin/bash

# Set variables
export LOCATION="<Location>" # Change to your preferred region
export AZURE_RESOURCE_GROUP_NAME="<ResourceGroupName>" # Change to your preferred resource group name
export STORAGE_ACCOUNT_NAME="<StorageAccountName>" # Change to your preferred storage account name
export CONTAINER_NAME="<ContainerName>" # Change to your preferred container name

# Provision the resource group
echo "Creating resource group: $AZURE_RESOURCE_GROUP_NAME"
az group create \
    --location "$LOCATION" \
    --name "$AZURE_RESOURCE_GROUP_NAME"

# Provision the storage account
az storage account create \
    --resource-group "$AZURE_RESOURCE_GROUP_NAME" \
    --location "$LOCATION" \
    --name "$STORAGE_ACCOUNT_NAME" \
    --kind StorageV2 \
    --sku Standard_LRS

echo "Storage account name is $STORAGE_ACCOUNT_NAME"

# Retrieve the connection string
CONNECTION_STRING=$(az storage account show-connection-string \
    --resource-group "$AZURE_RESOURCE_GROUP_NAME" \
    --name "$STORAGE_ACCOUNT_NAME" \
    --query connectionString \
    --output tsv)

# Provision the blob container
az storage container create \
    --name "$CONTAINER_NAME" \
    --account-name "$STORAGE_ACCOUNT_NAME" \
    --connection-string "$CONNECTION_STRING"

Siehe auch