Créer un conteneur d’objets blob en Python
Les objets BLOB dans le stockage Azure sont organisés en conteneurs. Avant de pouvoir télécharger un objet BLOB, vous devez d’abord créer un conteneur. Cet article montre comment créer des conteneurs à l’aide de la bibliothèque de client Stockage Azure pour Python.
Pour en savoir plus sur la création des conteneurs d’objets Blob à l’aide d’API asynchrones, consultez Créer un conteneur de manière asynchrone.
Prérequis
- Abonnement Azure : créez-en un gratuitement
- Compte de stockage Azure : créez un compte de stockage
- Python 3.8+
Paramétrer votre environnement
Si vous n’avez aucun projet existant, cette section vous montre comment configurer un projet de façon à utiliser la bibliothèque de client Stockage Blob Azure pour Python. Pour plus d’informations, consultez Bien démarrer avec le service Stockage Blob Azure et Python.
Pour utiliser les exemples de code de cet article, effectuez les étapes suivantes pour configurer votre projet.
Installer des packages
Installez les packages suivants en utilisant pip install
:
pip install azure-storage-blob azure-identity
Ajouter des instructions import
Ajoutez les instructions import
suivantes :
from azure.core.exceptions import ResourceExistsError
from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient
Autorisation
Le mécanisme d’autorisation doit disposer des autorisations nécessaires pour créer un conteneur. Pour l’autorisation avec Microsoft Entra ID (recommandé), vous devez disposer au minimum du rôle RBAC Azure intégré Contributeur aux données Blob du stockage. Pour en savoir plus, consultez les conseils d’autorisation pour l’opération Create Container (API REST).
Créer un objet client
Pour connecter une application au Stockage Blob, créez une instance de BlobServiceClient. L’exemple suivant montre comment créer un objet client à l’aide de DefaultAzureCredential
pour l’autorisation :
# TODO: Replace <storage-account-name> with your actual storage account name
account_url = "https://<storage-account-name>.blob.core.windows.net"
credential = DefaultAzureCredential()
# Create the BlobServiceClient object
blob_service_client = BlobServiceClient(account_url, credential=credential)
Vous pouvez également créer des objets clients pour des conteneurs ou des objets blob spécifiques, directement ou à partir de l’objet BlobServiceClient
. Pour en savoir plus sur la création et la gestion d’objets clients, consultez Créer et gérer des objets clients qui interagissent avec des ressources de données.
À propos de la dénomination des conteneurs
Un nom de conteneur doit être un nom DNS valide, car il fait partie de l’URI unique utilisé pour adresser le conteneur ou ses objets BLOB. Suivez ces règles lorsque vous nommez un conteneur :
- Les noms de conteneur doivent comprendre entre 3 et 63 caractères.
- Les noms de conteneur doivent commencer par une lettre ou un chiffre, et peuvent comporter uniquement des lettres minuscules, des chiffres et des tirets (-).
- Deux tirets consécutifs ne sont pas autorisés dans les noms de conteneurs.
L’URI d’une ressource de conteneur est mis en forme comme suit :
https://my-account-name.blob.core.windows.net/my-container-name
Créez un conteneur.
Pour créer un conteneur, appelez la méthode suivante à partir de la classe BlobServiceClient :
Vous pouvez également créer un conteneur en utilisant la méthode suivante de la classe ContainerClient :
Les conteneurs sont créés immédiatement sous le compte de stockage. Il n’est pas possible d’imbriquer un conteneur sous un autre. Une exception est levée s’il existe un conteneur portant le même nom.
L’exemple suivant crée un conteneur à partir d’un objet BlobServiceClient
:
def create_blob_container(self, blob_service_client: BlobServiceClient, container_name):
try:
container_client = blob_service_client.create_container(name=container_name)
except ResourceExistsError:
print('A container with this name already exists')
Créer le conteneur racine
Un conteneur racine sert de conteneur par défaut pour votre compte de stockage. Chaque compte de stockage peut avoir un conteneur racine, qui doit être nommé $root. Le conteneur racine doit être créé ou supprimé de manière explicite.
Vous pouvez référencer un objet BLOB stocké dans le conteneur racine sans inclure le nom du conteneur racine. Le conteneur racine vous permet de référencer un objet BLOB au niveau supérieur de la hiérarchie du compte de stockage. Par exemple, vous pouvez référencer un objet blob situé dans le conteneur racine de la façon suivante :
https://accountname.blob.core.windows.net/default.html
L’exemple suivant crée un objet ContainerClient
avec le nom de conteneur $root, puis crée le conteneur s’il n’existe pas déjà dans le compte de stockage :
def create_blob_root_container(self, blob_service_client: BlobServiceClient):
container_client = blob_service_client.get_container_client(container="$root")
# Create the root container if it doesn't already exist
if not container_client.exists():
container_client.create_container()
Créer un conteneur de manière asynchrone
La bibliothèque cliente du stockage Blob Azure pour Python prend en charge la création de manière asynchrone d’un conteneur d’objets blob. Pour en savoir plus sur les exigences de configuration de projet, consultez programmation asynchrone.
Pour créer un conteneur à l’aide d’API asynchrones, effectuez les étapes suivantes :
Ajoutez les instructions d’importation suivantes :
import asyncio from azure.identity.aio import DefaultAzureCredential from azure.storage.blob.aio import BlobServiceClient from azure.core.exceptions import ResourceExistsError
Ajoutez du code pour exécuter le programme à l’aide de
asyncio.run
. Cette fonction exécute la coroutine passée,main()
dans notre exemple et gère la boucle d’événementasyncio
. Les coroutines sont déclarées avec la syntaxe asynchrone/await. Dans cet exemple, la coroutinemain()
crée d’abord le niveau supérieurBlobServiceClient
à l’aide deasync with
, puis appelle la méthode qui crée le conteneur. Notez que seul le client de niveau supérieur doit utiliserasync with
, car d’autres clients créés à partir de celui-ci partagent le même pool de connexions.async def main(): sample = ContainerSamples() # TODO: Replace <storage-account-name> with your actual storage account name account_url = "https://<storage-account-name>.blob.core.windows.net" credential = DefaultAzureCredential() async with BlobServiceClient(account_url, credential=credential) as blob_service_client: await sample.create_blob_container(blob_service_client, "sample-container") if __name__ == '__main__': asyncio.run(main())
Ajoutez du code pour créer un conteneur. Le code est identique à l’exemple synchrone, sauf que la méthode est déclarée avec le mot clé
async
et que le mot cléawait
est utilisé lors de l’appel de la méthodecreate_container
.async def create_blob_container(self, blob_service_client: BlobServiceClient, container_name): try: container_client = await blob_service_client.create_container(name=container_name) except ResourceExistsError: print('A container with this name already exists')
Avec cette configuration de base en place, vous pouvez implémenter d’autres exemples dans cet article en tant que coroutines à l’aide de la syntaxe asynchrone/await.
Ressources
Pour en savoir plus sur la création d’un conteneur à l’aide de la bibliothèque de client Stockage Blob Azure pour Python, consultez les ressources suivantes.
Exemples de code
- Afficher synchrone ou exemples de code asynchrones de cet article (GitHub)
Opérations de l'API REST
Le kit SDK Azure pour Python contient des bibliothèques qui reposent sur l’API REST Azure, ce qui vous permet d’interagir avec les opérations de l’API REST via des paradigmes Python familiers. Les méthodes de bibliothèque cliente pour créer un conteneur utilisent l’opération d’API REST suivante :
- Create Container (API REST)
Ressources de bibliothèque cliente
- Documentation de référence sur la bibliothèque cliente
- Code source de la bibliothèque de client
- Package (PyPi)
Contenu connexe
- Cet article fait partie du guide Stockage Blob pour Python pour les développeurs. Pour découvrir plus d’informations, consultez la liste complète des articles du guide du développeur dans Générer votre application Python.