Exemple : Accéder à Stockage Azure à l’aide des bibliothèques Azure pour Python
Dans cet article, vous allez apprendre à utiliser les bibliothèques clientes Azure dans le code d’application Python pour charger un fichier dans un conteneur de stockage Blob Azure. L’article part du principe que vous avez créé les ressources indiquées dans l’exemple : Créer Stockage Azure.
Sauf indication contraire, toutes les commandes de cet article fonctionnent de la même façon dans les interpréteurs de commandes Windows et bash Linux/macOS.
1 : Configurer votre environnement de développement local
Si ce n’est déjà fait, configurez un environnement dans lequel vous pouvez exécuter ce code. Voici quelques options possibles :
Configurez un environnement virtuel Python. Vous pouvez créer l’environnement virtuel localement ou dans Azure Cloud Shell et y exécuter le code. Veillez à activer l’environnement virtuel pour commencer à l’utiliser.
Utilisez un environnement conda.
Utilisez un conteneur de développement dans Visual Studio Code ou GitHub Codespaces.
2 : Installer des packages de bibliothèque
Dans votre fichier requirements.txt , ajoutez des lignes pour le package de bibliothèque cliente que vous utiliserez et enregistrez le fichier.
azure-storage-blob
azure-identity
Ensuite, dans votre terminal ou invite de commandes, installez les exigences.
pip install -r requirements.txt
3 : Créer un fichier à charger
Créez un fichier source nommé sample-source.txt. Ce nom de fichier est ce que le code attend.
Hello there, Azure Storage. I'm a friendly file ready to be stored in a blob.
4 : Utiliser le stockage d’objets blob à partir du code de l’application
Les deux sections suivantes illustrent deux façons d’accéder au conteneur d’objets blob créé par l’intermédiaire de l’exemple : Créer Stockage Azure.
La première méthode (avec authentification) authentifie l’application DefaultAzureCredential
comme décrit dans Authentifier les applications Python auprès des services Azure pendant le développement local à l’aide de principaux de service. Avec cette méthode, vous devez d’abord attribuer les autorisations appropriées à l’identité de l’application, qui est la pratique recommandée.
La deuxième méthode (avec chaîne de connexion) utilise un chaîne de connexion pour accéder directement au compte de stockage. Bien que cette méthode semble plus simple, elle présente deux inconvénients majeurs :
Une chaîne de connexion authentifie par nature l’agent de connexion avec le compte de stockage plutôt qu’avec les ressources individuelles de ce compte. Par conséquent, une chaîne de connexion accorde une autorisation plus large que possible.
Une chaîne de connexion contient des informations d’accès en texte brut et présente donc des vulnérabilités potentielles si elle n’est pas correctement construite ou sécurisée. Si une telle chaîne de connexion est exposée, elle peut être utilisée pour accéder à un large éventail de ressources au sein du compte Stockage.
Pour ces raisons, nous vous recommandons d’utiliser la méthode d’authentification dans le code de production.
4a : Utiliser le stockage d’objets blob avec l’authentification
Créez un fichier nommé use_blob_auth.py avec le code suivant. Les commentaires expliquent les étapes.
import os import uuid from azure.identity import DefaultAzureCredential # Import the client object from the SDK library from azure.storage.blob import BlobClient credential = DefaultAzureCredential() # Retrieve the storage blob service URL, which is of the form # https://<your-storage-account-name>.blob.core.windows.net/ storage_url = os.environ["AZURE_STORAGE_BLOB_URL"] # Create the client object using the storage URL and the credential blob_client = BlobClient( storage_url, container_name="blob-container-01", blob_name=f"sample-blob-{str(uuid.uuid4())[0:5]}.txt", credential=credential, ) # Open a local file and upload its contents to Blob Storage with open("./sample-source.txt", "rb") as data: blob_client.upload_blob(data) print(f"Uploaded sample-source.txt to {blob_client.url}")
Liens de référence :
Créez une variable d’environnement nommée
AZURE_STORAGE_BLOB_URL
:Remplacez « pythonazurestorage12345 » par le nom de votre compte de stockage.
La
AZURE_STORAGE_BLOB_URL
variable d’environnement est utilisée uniquement par cet exemple. Elle n’est pas utilisée par les bibliothèques Azure.Utilisez la commande az ad sp create-for-rbac pour créer un principal de service pour l’application. La commande crée l’inscription d’application pour l’application en même temps. Donnez au principal de service un nom de votre choix.
az ad sp create-for-rbac --name {service-principal-name}
La sortie de cette commande doit ressembler à l’exemple ci-dessous. Notez ces valeurs ou laissez cette fenêtre ouverte, car vous aurez besoin de ces valeurs à l’étape suivante et ne pourrez plus afficher la valeur de mot de passe (clé secrète client). Toutefois, vous pouvez ajouter un nouveau mot de passe ultérieurement sans invalider le principal de service ou les mots de passe existants si nécessaire.
{ "appId": "00000000-0000-0000-0000-000000000000", "displayName": "{service-principal-name}", "password": "abcdefghijklmnopqrstuvwxyz", "tenant": "11111111-1111-1111-1111-111111111111" }
Les commandes Azure CLI peuvent être exécutées dans Azure Cloud Shell ou sur une station de travail dans laquelle l’interface Azure CLI est installée.
Créez des variables d’environnement pour le principal du service d’application :
Créez les variables d’environnement suivantes avec les valeurs de la sortie de la commande précédente. Ces variables indiquent
DefaultAzureCredential
d’utiliser le principal du service d’application.AZURE_CLIENT_ID
→ Valeur de l’ID d’application.AZURE_TENANT_ID
→ Valeur de l’ID de locataire.AZURE_CLIENT_SECRET
→ Mot de passe/informations d’identification générés pour l’application.
Tentative d’exécution du code (qui échoue intentionnellement) :
python use_blob_auth.py
Observez l’erreur « Cette demande n’est pas autorisée à effectuer cette opération à l’aide de cette autorisation ». L’erreur est attendue, car le principal de service local que vous utilisez n’a pas encore l’autorisation d’accéder au conteneur d’objets blob.
Accordez contributeur autorisations sur le conteneur d’objets blob au principal du service à l’aide de la commande az role assignment create Azure CLI :
az role assignment create --assignee <AZURE_CLIENT_ID> \ --role "Storage Blob Data Contributor" \ --scope "/subscriptions/<AZURE_SUBSCRIPTION_ID>/resourceGroups/PythonAzureExample-Storage-rg/providers/Microsoft.Storage/storageAccounts/pythonazurestorage12345/blobServices/default/containers/blob-container-01"
L’argument
--assignee
identifie le principal de service. Remplacez <AZURE_CLIENT_ID> espace réservé par l’ID d’application de votre principal de service.L’argument
--scope
identifie l’emplacement auquel cette attribution de rôle s’applique. Dans cet exemple, vous accordez le rôle « contributeur de données blob Stockage » au principal du service pour le conteneur nommé « blob-container-01 ».Remplacez et
pythonazurestorage12345
utilisezPythonAzureExample-Storage-rg
le groupe de ressources qui contient votre compte de stockage et le nom exact de votre compte de stockage. Ajustez également le nom du conteneur d’objets blob, si nécessaire. Si vous utilisez un nom incorrect, vous obtenez le message d’erreur « Impossible d’effectuer l’opération demandée sur la ressource imbriquée. La ressource parente 'pythonazurestorage12345' est introuvable ».Remplacez le <> AZURE_SUBSCRIPTION_ID place réservé par votre ID d’abonnement Azure. (Vous pouvez exécuter la commande az account show et obtenir votre ID d’abonnement à partir de la
id
propriété dans la sortie.)
Conseil
Si la commande d’attribution de rôle retourne une erreur « Aucune carte de connexion n’a été trouvée » lors de l’utilisation de l’interpréteur de commandes Bash, essayez de définir
export MSYS_NO_PATHCONV=1
pour éviter la traduction de chemin d’accès. Pour plus d’informations, consultez ce problème.Attendez une minute ou deux pour que les autorisations se propagent, réexécutez le code pour vérifier qu’il fonctionne maintenant. Si vous voyez encore l’erreur d’autorisation, attendez un peu, puis réessayez le code.
Pour plus d’informations sur les attributions de rôles, consultez Guide pratique pour attribuer des autorisations de rôle avec l’interface Azure CLI.
4b : Utiliser le stockage d’objets blob avec un chaîne de connexion
Créez un fichier Python nommé use_blob_conn_string.py avec le code suivant. Les commentaires expliquent les étapes.
import os import uuid # Import the client object from the SDK library from azure.storage.blob import BlobClient # Retrieve the connection string from an environment variable. Note that a # connection string grants all permissions to the caller, making it less # secure than obtaining a BlobClient object using credentials. conn_string = os.environ["AZURE_STORAGE_CONNECTION_STRING"] # Create the client object for the resource identified by the connection # string, indicating also the blob container and the name of the specific # blob we want. blob_client = BlobClient.from_connection_string( conn_string, container_name="blob-container-01", blob_name=f"sample-blob-{str(uuid.uuid4())[0:5]}.txt", ) # Open a local file and upload its contents to Blob Storage with open("./sample-source.txt", "rb") as data: blob_client.upload_blob(data) print(f"Uploaded sample-source.txt to {blob_client.url}")
Créez une variable d’environnement nommée
AZURE_STORAGE_CONNECTION_STRING
, dont la valeur est la chaîne de connexion complète pour le compte de stockage. (Cette variable d’environnement est également utilisée par différents commentaires Azure CLI.) Vous pouvez obtenir le chaîne de connexion de votre compte de stockage en exécutant la commande az storage account show-connection-string.az storage account show-connection-string --resource-group PythonAzureExample-Storage-rg --name pythonazurestorage12345
Remplacez et
pythonazurestorage12345
utilisezPythonAzureExample-Storage-rg
le groupe de ressources qui contient votre compte de stockage et le nom exact de votre compte de stockage.Lorsque vous définissez la variable d’environnement, utilisez la valeur entière de la
connectionString
propriété dans la sortie, y compris les guillemets.Exécutez le code :
python use_blob_conn_string.py
Là encore, bien que cette méthode soit simple, une chaîne de connexion autorise toutes les opérations dans un compte de stockage. Avec le code de production, il est préférable d’utiliser des autorisations spécifiques, comme décrit dans la section précédente.
5. Vérifier la création d’objets blob
Après avoir exécuté le code de l’une ou l’autre méthode, accédez au Portail Azure, accédez au conteneur d’objets blob pour vérifier qu’un nouvel objet blob existe nommé sample-blob-{random}.txt avec le même contenu que le fichier sample-source.txt :
Si vous avez créé une variable d’environnement nommée AZURE_STORAGE_CONNECTION_STRING
, vous pouvez également utiliser Azure CLI pour vérifier que l’objet blob existe à l’aide de la commande az storage blob list :
az storage blob list --container-name blob-container-01
Si vous avez suivi les instructions pour utiliser le stockage d’objets blob avec l’authentification, vous pouvez ajouter le --connection-string
paramètre à la commande précédente avec le chaîne de connexion de votre compte de stockage. Pour savoir comment obtenir le chaîne de connexion, consultez les instructions de 4b : Utiliser le stockage d’objets blob avec un chaîne de connexion. Utilisez l’ensemble chaîne de connexion y compris les guillemets.
6 : Nettoyer les ressources
Exécutez la commande az group delete si vous n’avez pas besoin de conserver le groupe de ressources et les ressources de stockage utilisé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 propre un groupe que vous n’utilisez pas activement. L’argument --no-wait
permet à la commande de retourner immédiatement un résultat au lieu d’attendre que l’opération se termine.
az group delete -n PythonAzureExample-Storage-rg --no-wait
Vous pouvez également utiliser la méthode ResourceManagementClient.resource_groups.begin_delete
pour supprimer un groupe de ressources du code. Le code dans l’exemple : Créer un groupe de ressources illustre l’utilisation.
Si vous avez suivi les instructions pour utiliser le stockage d’objets blob avec l’authentification, il est judicieux de supprimer le principal du service d’application que vous avez créé. Vous pouvez utiliser la commande az ad app delete . Remplacez l’espace <> réservé AZURE_CLIENT_ID par l’ID d’application de votre principal de service.
az ad app delete --id <AZURE_CLIENT_ID>
Voir aussi
- Exemple : Créer un groupe de ressources
- Exemple : répertorier les groupes de ressources dans un abonnement
- Exemple : Créer une application web et déployer du code
- Exemple : Créer Stockage Azure
- Exemple : Créer et interroger une base de données
- Exemple : Créer une machine virtuelle
- Utiliser des disques managés Azure avec des machines virtuelles
- Répondre à une courte enquête sur le SDK Azure pour Python
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour