Partager via


Exemple : Créer un stockage Azure à l’aide des bibliothèques Azure pour Python

Dans cet article, vous allez apprendre à utiliser les bibliothèques de gestion Azure pour Python pour créer un groupe de ressources, ainsi qu’un compte de stockage Azure et un conteneur de stockage d’objets blob.

Après l’approvisionnement de ces ressources, reportez-vous à la section Exemple : Utilisez stockage Azure pour voir comment utiliser les bibliothèques clientes Azure dans Python pour charger un fichier dans le conteneur d’objets blob.

Les commandes Azure CLI équivalentes pour bash et PowerShell sont répertoriées plus loin dans cet article. Si vous préférez utiliser le portail Azure, consultez Créer un compte de stockage Azure et Créer un conteneur d’objets blob.

1 : Configurer votre environnement de développement local

Si ce n’est déjà fait, configurez un environnement dans lequel vous pouvez exécuter le code. Voici quelques options :

  • Configurez un environnement virtuel Python à l’aide de venv ou de votre outil de choix. Pour commencer à utiliser l’environnement virtuel, veillez à l’activer. Pour installer Python, consultez Installer 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)
    
  • Utilisez un environnement conda. Pour installer Conda, consultez Installer Miniconda.

  • Utilisez un conteneur de développement dans Visual Studio Code ou GitHub Codespaces.

2 : Installer les packages de bibliothèque Azure nécessaires

  1. Dans votre console, créez un fichier requirements.txt qui répertorie les bibliothèques de gestion utilisées dans cet exemple :

    azure-mgmt-resource
    azure-mgmt-storage
    azure-identity
    
  2. Dans votre console avec l’environnement virtuel activé, installez les conditions requises :

    pip install -r requirements.txt
    

3. Définir des variables d’environnement

Dans cette étape, vous définissez des variables d’environnement à utiliser dans le code de cet article. Le code utilise la os.environ méthode pour récupérer les valeurs.

#!/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 : Écrire du code pour créer un compte de stockage et un conteneur d’objets blob

Dans cette étape, vous créez un fichier Python nommé provision_blob.py avec le code suivant. Ce script Python utilise le Kit de développement logiciel (SDK) Azure pour les bibliothèques de gestion Python pour créer un groupe de ressources, un compte de stockage Azure et un conteneur d’objets blob à l’aide du Kit de développement logiciel (SDK) Azure pour 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}")

Authentification dans le code

Plus loin dans cet article, vous vous connectez à Azure à l’aide d’Azure CLI pour exécuter l’exemple de code. Si votre compte dispose des autorisations suffisantes pour créer des groupes de ressources et des ressources de stockage dans votre abonnement Azure, le script doit s’exécuter correctement sans configuration supplémentaire.

Pour utiliser ce code dans un environnement de production, authentifiez-vous à l’aide d’un principal de service en définissant des variables d’environnement. Cette approche permet un accès sécurisé et automatisé sans compter sur la connexion interactive. Pour obtenir des instructions détaillées, consultez Comment authentifier les applications Python avec les services Azure.

Vérifiez que le principal de service est affecté à un rôle disposant d’autorisations suffisantes pour créer des groupes de ressources et des comptes de stockage. Par exemple, l’attribution du rôle Contributeur au niveau de l’abonnement fournit l’accès nécessaire. Pour en savoir plus sur les attributions de rôles, consultez Contrôle d’accès en fonction du rôle (RBAC) dans Azure.

5. Exécuter le script

  1. Si ce n’est déjà fait, connectez-vous à Azure à l’aide d’Azure CLI :

    az login
    

  2. Exécutez le script :

    python provision_blob.py
    

    Le script prend une minute ou deux pour se terminer.

6 : Vérifier les ressources

  1. Ouvrez le portail Azure pour vérifier que le groupe de ressources et le compte de stockage ont été créés comme prévu. Vous devrez peut-être attendre une minute et sélectionner Afficher les types masqués dans le groupe de ressources.

    Page du portail Azure pour le nouveau groupe de ressources, affichant le compte de stockage

  2. Sélectionnez le compte de stockage, puis sélectionnezConteneurs> de données dans le menu de gauche pour vérifier que « blob-container-01 » s’affiche :

    Page du portail Azure pour le compte de stockage affichant le conteneur de blob

  3. Si vous souhaitez essayer d’utiliser ces ressources à partir du code d’application, poursuivez avec l’exemple : Utiliser stockage Azure.

Pour obtenir un autre exemple d’utilisation de la bibliothèque de gestion du stockage Azure, consultez l’exemple Gérer le stockage Python.

7 : Nettoyer les ressources

Laissez les ressources en place si vous souhaitez suivre l’article Exemple : Utilisez Stockage Azure pour utiliser ces ressources dans le code de l’application. Sinon, exécutez la commande az group delete si vous n’avez pas besoin de conserver le groupe de ressources et les ressources de stockage créées dans cet exemple.

Les groupes de ressources n’entraînent pas de frais continus dans votre abonnement, mais les ressources, comme les comptes de stockage, dans le groupe de ressources peuvent entraîner des frais. Il est recommandé de nettoyer n’importe quel groupe que vous n’utilisez pas activement. L’argument --no-wait permet à la commande de retourner immédiatement au lieu d’attendre la fin de l’opération.

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

Pour référence : commandes Azure CLI équivalentes

Les commandes Azure CLI suivantes effectuent les mêmes étapes de création que le script 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

Voir aussi