Udostępnij za pośrednictwem


Przykład: tworzenie usługi Azure Storage przy użyciu bibliotek platformy Azure dla języka Python

Z tego artykułu dowiesz się, jak za pomocą bibliotek zarządzania platformy Azure dla języka Python utworzyć grupę zasobów wraz z kontem usługi Azure Storage i kontenerem usługi Blob Storage.

Po aprowizacji tych zasobów zapoznaj się z sekcją Przykład: Używanie usługi Azure Storage do sprawdzenia, jak używać bibliotek klienckich platformy Azure w języku Python do przekazywania pliku do kontenera obiektów blob.

Równoważne polecenia Azure CLI dla bash i PowerShell są wymienione w dalszej części tego artykułu. Jeśli wolisz korzystać z witryny Azure Portal, zobacz Tworzenie konta usługi Azure Storage i Tworzenie kontenera obiektów blob.

1: Konfigurowanie lokalnego środowiska projektowego

Jeśli jeszcze tego nie zrobiono, skonfiguruj środowisko, w którym można uruchomić kod. Oto kilka opcji:

  • Skonfiguruj środowisko wirtualne języka Python przy użyciu venv lub wybranego narzędzia. Aby rozpocząć korzystanie ze środowiska wirtualnego, pamiętaj, aby go aktywować. Aby zainstalować język Python, zobacz Instalowanie języka 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)
    
  • Użyj środowiska Conda. Aby zainstalować aplikację Conda, zobacz Instalowanie narzędzia Miniconda.

  • Użyj kontenera deweloperskiego w Visual Studio Code lub GitHub Codespaces.

2: Instalowanie wymaganych pakietów bibliotek platformy Azure

  1. W konsoli utwórz plik requirements.txt zawierający listę bibliotek zarządzania używanych w tym przykładzie:

    azure-mgmt-resource
    azure-mgmt-storage
    azure-identity
    
  2. W konsoli z aktywowanym środowiskiem wirtualnym zainstaluj wymagania:

    pip install -r requirements.txt
    

3. Ustawianie zmiennych środowiskowych

W tym kroku ustawisz zmienne środowiskowe do użycia w kodzie w tym artykule. Kod używa os.environ metody do pobrania wartości.

#!/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

Napisz kod, aby utworzyć konto pamięci masowej i kontener obiektów blob

W tym kroku utworzysz plik w języku Python o nazwie provision_blob.py przy użyciu następującego kodu. Ten skrypt języka Python używa zestawu Azure SDK dla bibliotek zarządzania języka Python do tworzenia grupy zasobów, konta usługi Azure Storage i kontenera obiektów blob przy użyciu zestawu Azure SDK dla języka Python.

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
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: 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 = 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 }
)

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 = 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}")

Uwierzytelnianie w kodzie

W dalszej części tego artykułu zalogujesz się do platformy Azure przy użyciu interfejsu wiersza polecenia platformy Azure, aby wykonać przykładowy kod. Jeśli twoje konto ma wystarczające uprawnienia do tworzenia grup zasobów i zasobów magazynu w ramach subskrypcji platformy Azure, skrypt powinien zostać uruchomiony pomyślnie bez dodatkowej konfiguracji.

Aby użyć tego kodu w środowisku produkcyjnym, uwierzytelnij się przy użyciu jednostki usługi, ustawiając zmienne środowiskowe. Takie podejście umożliwia bezpieczny, zautomatyzowany dostęp bez konieczności polegania na interaktywnym logowaniu. Aby uzyskać szczegółowe wskazówki, zobacz Jak uwierzytelniać aplikacje języka Python za pomocą usług platformy Azure.

Upewnij się, że jednostka usługi ma przypisaną rolę z wystarczającymi uprawnieniami do tworzenia grup zasobów i kont magazynowych. Na przykład przypisanie roli Współautor na poziomie subskrypcji zapewnia niezbędny dostęp. Aby dowiedzieć się więcej na temat przypisań ról, zobacz Kontrola dostępu oparta na rolach (RBAC) na platformie Azure.

5. Uruchamianie skryptu

  1. Jeśli jeszcze tego nie zrobiono, zaloguj się do platformy Azure przy użyciu interfejsu wiersza polecenia platformy Azure:

    az login
    

  2. Uruchom skrypt:

    python provision_blob.py
    

    Wykonanie skryptu trwa minutę lub dwie.

6. Weryfikowanie zasobów

  1. Otwórz portal Azure aby sprawdzić, czy grupa zasobów i konto magazynu zostały utworzone zgodnie z oczekiwaniami. Może być konieczne odczekać minutę, a także wybrać pozycję Pokaż ukryte typy w grupie zasobów.

    Strona portalu Azure dla nowej grupy zasobów, pokazująca konto magazynowe

  2. Wybierz konto magazynu, a następnie w menu po lewej stronie wybierz Magazyn danych>Kontenery, aby sprawdzić, czy "blob-container-01" jest widoczny.

    Strona Azure Portal dla konta magazynowego wyświetlająca kontener BLOB

  3. Jeśli chcesz spróbować użyć tych zasobów z poziomu kodu aplikacji, przejdź do artykułu Przykład: Korzystanie z usługi Azure Storage.

Aby zapoznać się z innym przykładem korzystania z biblioteki zarządzania usługi Azure Storage, zobacz przykład Zarządzanie usługą Python Storage.

7. Czyszczenie zasobów

Pozostaw zasoby w miejscu, jeśli chcesz postępować zgodnie z artykułem Przykład: Użyj usługi Azure Storage , aby użyć tych zasobów w kodzie aplikacji. W przeciwnym razie uruchom polecenie az group delete , jeśli nie musisz przechowywać grupy zasobów i zasobów magazynu utworzonych w tym przykładzie.

Grupy zasobów nie generują żadnych bieżących opłat w ramach subskrypcji, ale zasoby, takie jak konta magazynu, w grupie zasobów mogą powodować naliczanie opłat. Dobrym rozwiązaniem jest wyczyszczenie każdej grupy, której nie używasz aktywnie. Argument --no-wait umożliwia polecenie natychmiastowego zwrócenia zamiast oczekiwania na zakończenie operacji.

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

W celach informacyjnych: równoważne polecenia Azure CLI

Następujące polecenia interfejsu wiersza polecenia platformy Azure umożliwiają wykonanie tych samych kroków tworzenia co skrypt języka Python:

#!/bin/bash
#!/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 -g $AZURE_RESOURCE_GROUP_NAME -l $LOCATION -n $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 -g $AZURE_RESOURCE_GROUP_NAME -n $STORAGE_ACCOUNT_NAME --query connectionString)

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

Zobacz także