Delen via


Voorbeeld: Azure Storage maken met behulp van de Azure-bibliotheken voor Python

In dit artikel leert u hoe u de Azure-beheerbibliotheken voor Python gebruikt om een resourcegroep te maken, samen met een Azure Storage-account en een Blob Storage-container.

Nadat u deze resources hebt ingericht, raadpleegt u het gedeelte Voorbeeld: Azure Storage gebruiken om te zien hoe u de Azure-clientbibliotheken in Python gebruikt om een bestand te uploaden naar de Blob-container.

De equivalente Azure CLI-opdrachten voor bash en PowerShell worden verderop in dit artikel vermeld. Als u liever Azure Portal gebruikt, raadpleegt u Een Azure-opslagaccount maken en een blobcontainer maken.

1: Uw lokale ontwikkelomgeving instellen

Als u dat nog niet hebt gedaan, stelt u een omgeving in waar u de code kunt uitvoeren. Hieronder volgen een aantal opties:

  • Configureer een virtuele Python-omgeving met behulp van venv of uw hulpprogramma naar keuze. Als u de virtuele omgeving wilt gaan gebruiken, moet u deze activeren. Om Python te installeren, raadpleeg Python installeren.

    #!/bin/bash
    # Create a virtual environment
    python -m venv .venv
    # Activate the virtual environment
    source .venv/Scripts/activate # only required for Windows (Git Bash)
    
  • Gebruik een Conda-omgeving. Zie Miniconda installeren om Conda te installeren.

  • Gebruik een Dev Container in Visual Studio Code of GitHub Codespaces.

2: De benodigde Azure-bibliotheekpakketten installeren

  1. Maak in uw console een requirements.txt bestand met de beheerbibliotheken die in dit voorbeeld worden gebruikt:

    azure-mgmt-resource
    azure-mgmt-storage
    azure-identity
    
  2. Installeer de vereisten in de console waarop de virtuele omgeving is geactiveerd:

    pip install -r requirements.txt
    

3. Omgevingsvariabelen instellen

In deze stap stelt u omgevingsvariabelen in voor gebruik in de code in dit artikel. De code gebruikt de os.environ methode om de waarden op te halen.

#!/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: Code schrijven om een opslagaccount en blobcontainer te maken

In deze stap maakt u een Python-bestand met de naam provision_blob.py met de volgende code. Dit Python-script maakt gebruik van de Azure SDK voor Python-beheerbibliotheken om een resourcegroep, Een Azure Storage-account en een Blob-container te maken met behulp van de Azure SDK voor 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}")

Verificatie in de code

Verderop in dit artikel meldt u zich aan bij Azure met behulp van de Azure CLI om de voorbeeldcode uit te voeren. Als uw account voldoende machtigingen heeft om resourcegroepen en opslagresources in uw Azure-abonnement te maken, moet het script zonder aanvullende configuratie worden uitgevoerd.

Als u deze code in een productieomgeving wilt gebruiken, moet u verifiëren met behulp van een service-principal door omgevingsvariabelen in te stellen. Met deze methode kunt u beveiligde, geautomatiseerde toegang krijgen zonder afhankelijk te zijn van interactieve aanmelding. Zie Python-apps verifiëren met Azure-services voor gedetailleerde richtlijnen.

Zorg ervoor dat aan de service-principal een rol is toegewezen met voldoende machtigingen voor het maken van resourcegroepen en opslagaccounts. Als u bijvoorbeeld de rol Inzender op abonnementsniveau toewijst, krijgt u de benodigde toegang. Zie op rollen gebaseerd toegangsbeheer (RBAC) in Azure voor meer informatie over roltoewijzingen.

5. Voer het script uit

  1. Als u dat nog niet hebt gedaan, meldt u zich aan bij Azure met behulp van de Azure CLI:

    az login
    

  2. Voer het script uit:

    python provision_blob.py
    

    Het duurt een paar minuten voordat het script is voltooid.

6: De resources controleren

  1. Open Azure Portal om te controleren of de resourcegroep en het opslagaccount zijn gemaakt zoals verwacht. Mogelijk moet u even wachten en ook verborgen typen weergeven selecteren in de resourcegroep.

    Azure Portal-pagina voor de nieuwe resourcegroep, met het opslagaccount

  2. Selecteer het opslagaccount en selecteer vervolgens Data Storage>Containers in het linkermenu om te controleren of de blob-container-01 wordt weergegeven:

    Azure Portal-pagina voor het opslagaccount met de blobcontainer

  3. Als u deze resources uit toepassingscode wilt gebruiken, gaat u verder met voorbeeld: Azure Storage gebruiken.

Zie het voorbeeld Python Storage beheren voor een ander voorbeeld van het gebruik van de Azure Storage-beheerbibliotheek.

7: Resources opschonen

Laat de resources staan als u het artikel Voorbeeld wilt volgen : Gebruik Azure Storage om deze resources in app-code te gebruiken. Voer anders de opdracht az group delete uit als u de resourcegroep en opslagresources die in dit voorbeeld zijn gemaakt, niet hoeft te behouden.

Voor resourcegroepen worden geen lopende kosten in uw abonnement in rekening gebracht, maar bronnen, zoals opslagaccounts, in de resourcegroep kunnen mogelijk kosten veroorzaken. Het is een goede gewoonte om een groep op te schonen die u niet actief gebruikt. Het --no-wait argument zorgt ervoor dat de opdracht onmiddellijk terugkeert in plaats van te wachten tot de bewerking is voltooid.

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

Ter referentie: equivalente Azure CLI-opdrachten

Met de volgende Azure CLI-opdrachten worden dezelfde stappen voor het maken voltooid als het Python-script:

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

Zie ook