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 w skry skryscie języka Python utworzyć grupę zasobów zawierającą konto usługi Azure Storage i kontener usługi Blob Storage.

Po utworzeniu zasobów zobacz Przykład: używanie usługi Azure Storage do używania bibliotek klienckich platformy Azure w kodzie aplikacji języka Python w celu przekazania pliku do kontenera usługi Blob Storage.

Wszystkie polecenia w tym artykule działają tak samo w powłokach poleceń systemu Linux/macOS i Windows, chyba że zostały zaznaczone.

Równoważne polecenia interfejsu wiersza polecenia platformy Azure 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. Środowisko wirtualne można utworzyć lokalnie lub w usłudze Azure Cloud Shell i uruchomić tam kod. Pamiętaj, aby aktywować środowisko wirtualne, aby rozpocząć korzystanie z niego.

  • Użyj środowiska conda.

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

2: Instalowanie wymaganych pakietów bibliotek platformy Azure

  1. 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 terminalu z aktywowanym środowiskiem wirtualnym zainstaluj wymagania:

    pip install -r requirements.txt
    

3. Pisanie kodu w celu utworzenia zasobów magazynu

Utwórz plik w języku Python o nazwie provision_blob.py przy użyciu następującego kodu. Komentarze wyjaśniają szczegóły. Skrypt odczytuje identyfikator subskrypcji ze zmiennej środowiskowej AZURE_SUBSCRIPTION_ID. Tę zmienną można ustawić w późniejszym kroku. Nazwa grupy zasobów, lokalizacja, nazwa konta magazynu i nazwa kontenera są definiowane jako stałe w kodzie.

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

Uwierzytelnianie w kodzie

W dalszej części tego artykułu zalogujesz się na platformie Azure przy użyciu interfejsu wiersza polecenia platformy Azure, aby uruchomić przykładowy kod. Jeśli Twoje konto ma uprawnienia do tworzenia grup zasobów i zasobów magazynu w ramach subskrypcji platformy Azure, kod zostanie uruchomiony pomyślnie.

Aby użyć takiego kodu w skryscie produkcyjnym, można ustawić zmienne środowiskowe, aby użyć metody opartej na jednostce usługi na potrzeby uwierzytelniania. Aby dowiedzieć się więcej, zobacz Jak uwierzytelniać aplikacje języka Python za pomocą usług platformy Azure. Musisz upewnić się, że jednostka usługi ma wystarczające uprawnienia do tworzenia grup zasobów i zasobów magazynu w ramach subskrypcji, przypisując jej odpowiednią rolę na platformie Azure, na przykład rolę Współautor w subskrypcji.

4. 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. Ustaw zmienną środowiskową AZURE_SUBSCRIPTION_ID na identyfikator subskrypcji. (Możesz uruchomić polecenie az account show i pobrać identyfikator subskrypcji z id właściwości w danych wyjściowych):

    set AZURE_SUBSCRIPTION_ID=00000000-0000-0000-0000-000000000000
    
  3. Uruchom skrypt:

    python provision_blob.py
    

Wykonanie skryptu potrwa minutę lub dwie.

5. Weryfikowanie zasobów

  1. Otwórz witrynę Azure Portal, 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 witryny Azure Portal dla nowej grupy zasobów z wyświetlonym kontem magazynu

  2. Wybierz konto magazynu, a następnie wybierz pozycję Kontenery magazynu>danych w menu po lewej stronie, aby sprawdzić, czy zostanie wyświetlony komunikat "blob-container-01":

    Strona witryny Azure Portal dla konta magazynu przedstawiająca kontener obiektów 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 dodatkowym przykładem korzystania z biblioteki zarządzania usługi Azure Storage, zobacz przykład Zarządzanie usługą Python Storage.

Aby uzyskać informacje ogólne: równoważne polecenia interfejsu wiersza polecenia platformy Azure

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

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. 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.

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

Możesz również użyć ResourceManagementClient.resource_groups.begin_delete metody , aby usunąć grupę zasobów z kodu. Kod w przykładzie: Tworzenie grupy zasobów demonstruje użycie.

Zobacz też