Quickstart: Azure Blob Storage-clientbibliotheek voor Python
Artikel
Notitie
Met de optie Volledig nieuw bouwen wordt u stapsgewijs begeleid bij het maken van een nieuw project, het installeren van pakketten, het schrijven van de code en het uitvoeren van een eenvoudige console-app. Deze aanpak wordt aanbevolen als u alle details wilt begrijpen die betrekking hebben op het maken van een app die verbinding maakt met Azure Blob Storage. Als u liever implementatietaken automatiseert en begint met een voltooid project, kiest u Beginnen met een sjabloon.
Notitie
De optie Beginnen met een sjabloon maakt gebruik van de Azure Developer CLI om implementatietaken te automatiseren en u begint met een voltooid project. Deze aanpak wordt aanbevolen als u de code zo snel mogelijk wilt verkennen zonder de installatietaken te doorlopen. Als u de voorkeur geeft aan stapsgewijze instructies voor het bouwen van de app, kiest u Volledig nieuw bouwen.
Ga aan de slag met de Azure Blob Storage-clientbibliotheek voor Python om blobs en containers te beheren.
In dit artikel voert u de stappen uit om het pakket te installeren en voorbeeldcode voor basistaken uit te proberen.
In dit artikel gebruikt u de Azure Developer CLI om Azure-resources te implementeren en een voltooide console-app uit te voeren met slechts een paar opdrachten.
In deze sectie wordt uitgelegd hoe u een project voorbereidt voor gebruik met de Azure Blob Storage-clientbibliotheek voor Python.
Het project maken
Maak een Python-toepassing met de naam blob-quickstart.
Maak in een consolevenster (zoals PowerShell of Bash) een nieuwe map voor het project:
Console
mkdir blob-quickstart
Schakel over naar de zojuist gemaakte blob-quickstart-map :
Console
cd blob-quickstart
De pakketten installeren
Installeer vanuit de projectmap pakketten voor de Azure Blob Storage- en Azure Identity-clientbibliotheken met behulp van de pip install opdracht. Het azure-identity-pakket is nodig voor verbindingen zonder wachtwoord met Azure-services.
Console
pip install azure-storage-blob azure-identity
Stel het app-framework in
Volg de stappen in de projectmap om de basisstructuur van de app te maken:
Open een nieuw tekstbestand in de code-editor.
Voeg instructies toe import , maak de structuur voor het programma en neem eenvoudige verwerking van uitzonderingen op, zoals hieronder wordt weergegeven.
Sla het nieuwe bestand op als blob_quickstart.py in de map blob-quickstart.
Python
import os, uuid
from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient, BlobClient, ContainerClient
try:
print("Azure Blob Storage Python quickstart sample")
# Quickstart code goes hereexcept Exception as ex:
print('Exception:')
print(ex)
Als Azure Developer CLI is geïnstalleerd, kunt u een opslagaccount maken en de voorbeeldcode uitvoeren met slechts een paar opdrachten. U kunt het project uitvoeren in uw lokale ontwikkelomgeving of in een DevContainer.
De Azure Developer CLI-sjabloon initialiseren en resources implementeren
Voer vanuit een lege map de volgende stappen uit om de azd sjabloon te initialiseren, Azure-resources in te richten en aan de slag te gaan met de code:
Kloon de assets van de quickstart-opslagplaats vanuit GitHub en initialiseer de sjabloon lokaal:
Omgevingsnaam: deze waarde wordt gebruikt als voorvoegsel voor alle Azure-resources die zijn gemaakt door Azure Developer CLI. De naam moet uniek zijn voor alle Azure-abonnementen en moet tussen de 3 en 24 tekens lang zijn. De naam mag alleen cijfers en kleine letters bevatten.
Meld u aan bij Azure:
Console
azd auth login
De resources inrichten en implementeren in Azure:
Console
azd up
U wordt gevraagd om de volgende informatie:
Abonnement: het Azure-abonnement waarop uw resources zijn geïmplementeerd.
Locatie: De Azure-regio waar uw resources worden geïmplementeerd.
De implementatie kan enkele minuten duren. De uitvoer van de azd up opdracht bevat de naam van het zojuist gemaakte opslagaccount, dat u later nodig hebt om de code uit te voeren.
De voorbeeldcode uitvoeren
Op dit moment worden de resources geïmplementeerd in Azure en is de code bijna klaar om te worden uitgevoerd. Volg deze stappen om pakketten te installeren, de naam van het opslagaccount in de code bij te werken en de voorbeeldconsole-app uit te voeren:
Pakketten installeren: Installeer in de lokale map pakketten voor de Azure Blob Storage- en Azure Identity-clientbibliotheken met behulp van de volgende opdracht:pip install azure-storage-blob azure-identity
Werk de naam van het opslagaccount bij: bewerk in de lokale map het bestand met de naam blob_quickstart.py. Zoek de <storage-account-name> tijdelijke aanduiding en vervang deze door de werkelijke naam van het opslagaccount dat door de azd up opdracht is gemaakt. De wijzigingen opslaan.
Voer het project uit: voer de volgende opdracht uit om de app uit te voeren: python blob_quickstart.py
Bekijk de uitvoer: met deze app wordt een testbestand gemaakt in uw lokale gegevensmap en geüpload naar een container in het opslagaccount. Vervolgens wordt een lijst gemaakt van de blobs in de container en wordt het bestand gedownload met een nieuwe naam, zodat u het oude en nieuwe bestand kunt vergelijken.
Zie Codevoorbeelden voor meer informatie over hoe de voorbeeldcode werkt.
Wanneer u klaar bent met het testen van de code, raadpleegt u de sectie Resources opschonen om de resources te verwijderen die met de azd up opdracht zijn gemaakt.
Objectmodel
Azure Blob Storage is geoptimaliseerd voor het opslaan van grote hoeveelheden ongestructureerde gegevens. Ongestructureerde gegevens zijn gegevens die niet voldoen aan een bepaald gegevensmodel of bepaalde definitie, zoals tekst of binaire gegevens. Er zijn drie typen resources voor blobopslag:
Het opslagaccount
Een container in het opslagaccount
Een blob in de container
In het volgende diagram ziet u de relatie tussen deze resources:
Gebruik de volgende Python-klassen om te communiceren met deze resources:
BlobServiceClient: Met de BlobServiceClient klasse kunt u Azure Storage-resources en blobcontainers bewerken.
ContainerClient: Met de ContainerClient klasse kunt u Azure Storage-containers en hun blobs bewerken.
BlobClient: Met de BlobClient klasse kunt u Azure Storage-blobs bewerken.
Codevoorbeelden
Deze voorbeeldcodefragmenten laten zien hoe u de volgende taken kunt uitvoeren met de Azure Blob Storage-clientbibliotheek voor Python:
De Azure Developer CLI-sjabloon bevat een bestand met voorbeeldcode die al aanwezig is. De volgende voorbeelden bevatten details voor elk deel van de voorbeeldcode. De sjabloon implementeert de aanbevolen verificatiemethode zonder wachtwoord, zoals beschreven in de sectie Verifiëren bij Azure . De methode verbindingsreeks wordt weergegeven als alternatief, maar wordt niet gebruikt in de sjabloon en wordt niet aanbevolen voor productiecode.
Verifiëren bij Azure en toegang tot blobgegevens autoriseren
Toepassingsaanvragen voor Azure Blob Storage moeten worden geautoriseerd. Het gebruik van de DefaultAzureCredential klasse die wordt geleverd door de Azure Identity-clientbibliotheek is de aanbevolen methode voor het implementeren van verbindingen zonder wachtwoorden met Azure-services in uw code, inclusief Blob Storage.
U kunt aanvragen voor Azure Blob Storage ook autoriseren met behulp van de toegangssleutel voor het account. Deze aanpak moet echter met voorzichtigheid worden gebruikt. Ontwikkelaars moeten ijverig zijn om de toegangssleutel nooit beschikbaar te maken op een onbeveiligde locatie. Iedereen met de toegangssleutel kan aanvragen voor het opslagaccount autoriseren en heeft effectief toegang tot alle gegevens. DefaultAzureCredential biedt verbeterde beheer- en beveiligingsvoordelen ten opzichte van de accountsleutel om verificatie zonder wachtwoord mogelijk te maken. Beide opties worden in het volgende voorbeeld gedemonstreerd.
DefaultAzureCredential ondersteunt meerdere verificatiemethoden en bepaalt welke methode tijdens runtime moet worden gebruikt. Met deze aanpak kan uw app verschillende verificatiemethoden gebruiken in verschillende omgevingen (lokaal versus productie) zonder omgevingsspecifieke code te implementeren.
De volgorde en locaties waarin DefaultAzureCredential wordt gezocht naar referenties, vindt u in het overzicht van de Azure Identity-bibliotheek.
Uw app kan bijvoorbeeld verifiëren met behulp van uw Azure CLI-aanmeldingsreferenties bij het lokaal ontwikkelen. Uw app kan vervolgens een beheerde identiteit gebruiken zodra deze is geïmplementeerd in Azure. Er zijn geen codewijzigingen vereist voor deze overgang.
Rollen toewijzen aan uw Microsoft Entra-gebruikersaccount
Zorg er bij het lokaal ontwikkelen voor dat het gebruikersaccount dat toegang heeft tot blobgegevens over de juiste machtigingen beschikt. U hebt Inzender voor Opslagblobgegevens nodig om blobgegevens te lezen en schrijven. Als u uzelf deze rol wilt toewijzen, moet u de rol Beheerder voor gebruikerstoegang of een andere rol met de actie Microsoft.Authorization/roleAssignments/write krijgen toegewezen. U kunt Azure RBAC-rollen toewijzen aan een gebruiker met behulp van Azure Portal, Azure CLI of Azure PowerShell. Meer informatie over de beschikbare bereiken voor roltoewijzingen vindt u op de overzichtspagina van het bereik.
In dit scenario wijst u machtigingen toe aan uw gebruikersaccount, dat is afgestemd op het opslagaccount, om het principe van minimale bevoegdheden te volgen. Deze procedure biedt gebruikers alleen de minimale machtigingen die nodig zijn en maakt veiligere productieomgevingen.
In het volgende voorbeeld wordt de rol Inzender voor opslagblobgegevens toegewezen aan uw gebruikersaccount, dat zowel lees- als schrijftoegang biedt tot blobgegevens in uw opslagaccount.
Belangrijk
In de meeste gevallen duurt het een of twee minuten voordat de roltoewijzing is doorgegeven in Azure, maar in zeldzame gevallen kan het maximaal acht minuten duren. Als u verificatiefouten ontvangt wanneer u de code voor het eerst uitvoert, wacht u even en probeert u het opnieuw.
Zoek uw opslagaccount in Azure Portal met behulp van de hoofdzoekbalk of linkernavigatiebalk.
Selecteer op de overzichtspagina van het opslagaccount toegangsbeheer (IAM) in het menu aan de linkerkant.
Selecteer op de pagina Toegangsbeheer (IAM) het tabblad Roltoewijzingen .
Selecteer + Toevoegen in het bovenste menu en voeg vervolgens roltoewijzing toe in de resulterende vervolgkeuzelijst.
Gebruik het zoekvak om de resultaten te filteren op de gewenste rol. Zoek in dit voorbeeld naar Inzender voor Opslagblobgegevens en selecteer het overeenkomende resultaat en kies vervolgens Volgende.
Selecteer onder Toegang toewijzen de optie Gebruiker, groep of service-principal en kies vervolgens + Leden selecteren.
Zoek in het dialoogvenster naar uw Microsoft Entra-gebruikersnaam (meestal uw user@domain e-mailadres) en kies Vervolgens onderaan het dialoogvenster Selecteren .
Selecteer Beoordelen + toewijzen om naar de laatste pagina te gaan en vervolgens opnieuw beoordelen en toewijzen om het proces te voltooien.
Als u een rol wilt toewijzen op resourceniveau met behulp van de Azure CLI, moet u eerst de resource-id ophalen met behulp van de az storage account show opdracht. U kunt de uitvoereigenschappen filteren met behulp van de --query parameter.
Azure CLI
az storage account show --resource-group'<your-resource-group-name>'--name'<your-storage-account-name>'--query id
Kopieer de uitvoer Id van de voorgaande opdracht. Vervolgens kunt u rollen toewijzen met behulp van de az-rolopdracht van de Azure CLI.
Azure CLI
az role assignment create --assignee"<user@domain>" \
--role"Storage Blob Data Contributor" \
--scope"<your-resource-id>"
Als u een rol wilt toewijzen op resourceniveau met behulp van Azure PowerShell, moet u eerst de resource-id ophalen met behulp van de Get-AzResource opdracht.
Kopieer de Id waarde uit de voorgaande opdrachtuitvoer. Vervolgens kunt u rollen toewijzen met behulp van de opdracht New-AzRoleAssignment in PowerShell.
Meld u aan en verbind uw app-code met Azure met behulp van DefaultAzureCredential
U kunt toegang tot gegevens in uw opslagaccount autoriseren met behulp van de volgende stappen:
Zorg ervoor dat u bent geverifieerd met hetzelfde Microsoft Entra-account waaraan u de rol hebt toegewezen in uw opslagaccount. U kunt zich verifiëren via de Azure CLI, Visual Studio Code of Azure PowerShell.
Meld u aan bij Azure via de Azure CLI met behulp van de volgende opdracht:
Azure CLI
az login
U moet de Azure CLI installeren om mee DefaultAzureCredential te werken via Visual Studio Code.
Navigeer in het hoofdmenu van Visual Studio Code naar Terminal > New Terminal.
Meld u aan bij Azure via de Azure CLI met behulp van de volgende opdracht:
Azure CLI
az login
Meld u aan bij Azure met behulp van PowerShell via de volgende opdracht:
Azure PowerShell
Connect-AzAccount
Als u dit wilt gebruiken DefaultAzureCredential, moet u ervoor zorgen dat het azure-identity-pakket is geïnstalleerd en de klasse wordt geïmporteerd:
Python
from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient
Voeg deze code toe in het try blok. Wanneer de code wordt uitgevoerd op uw lokale werkstation, DefaultAzureCredential gebruikt u de referenties van de ontwikkelaar van het hulpprogramma met prioriteit waarmee u bent aangemeld om te verifiëren bij Azure. Voorbeelden van deze hulpprogramma's zijn Azure CLI of Visual Studio Code.
Zorg ervoor dat u de naam van het opslagaccount bijwerkt in de URI van uw BlobServiceClient object. De naam van het opslagaccount vindt u op de overzichtspagina van Azure Portal.
Notitie
Wanneer deze wordt geïmplementeerd in Azure, kan dezelfde code worden gebruikt om aanvragen naar Azure Storage te autoriseren vanuit een toepassing die wordt uitgevoerd in Azure. U moet echter beheerde identiteiten inschakelen in uw app in Azure. Configureer vervolgens uw opslagaccount zodat die beheerde identiteit verbinding kan maken. Zie de zelfstudie over verificatie van door Azure gehoste apps voor gedetailleerde instructies over het configureren van deze verbinding tussen Azure-services.
Een verbindingsreeks bevat de toegangssleutel voor het opslagaccount en gebruikt deze om aanvragen te autoriseren. Wees altijd voorzichtig om de sleutels nooit zichtbaar te maken op een onbeveiligde locatie.
Notitie
Als u gegevenstoegang wilt autoriseren met de toegangssleutel voor het opslagaccount, hebt u machtigingen nodig voor de volgende Azure RBAC-actie: Microsoft.Storage/storageAccounts/listkeys/action. De minst bevoorrechte ingebouwde rol met machtigingen voor deze actie is Lezer en Gegevenstoegang, maar elke rol die deze actie omvat, werkt.
Selecteer toegangssleutels in het menuvenster van het opslagaccount onder Beveiliging en netwerken. Hier kunt u de toegangssleutels van het account en de volledige verbindingsreeks voor elke sleutel bekijken.
Selecteer Sleutels weergeven in het deelvenster Toegangssleutels.
Zoek in de sectie key1 de waarde van de verbindingsreeks . Selecteer het pictogram Kopiëren naar klembord om de verbindingsreeks te kopiëren. In de volgende sectie voegt u de verbindingsreeks waarde toe aan een omgevingsvariabele.
Nadat u de verbindingsreeks hebt gekopieerd, schrijft u deze naar een nieuwe omgevingsvariabele op de lokale computer waarop de toepassing wordt uitgevoerd. Als u de omgevingsvariabele wilt instellen, opent u een consolevenster en volgt u de aanwijzingen voor uw besturingssysteem. Vervang <yourconnectionstring> door de feitelijke verbindingsreeks.
Met de onderstaande code wordt de verbindingsreeks voor het opslagaccount opgehaald uit de omgevingsvariabele die u eerder hebt gemaakt en wordt de verbindingsreeks gebruikt om een serviceclientobject te maken.
Voeg deze code toe in het try-blok:
Python
# Retrieve the connection string for use with the application. The storage# connection string is stored in an environment variable on the machine# running the application called AZURE_STORAGE_CONNECTION_STRING. If the environment variable is# created after the application is launched in a console or with Visual Studio,# the shell or application needs to be closed and reloaded to take the# environment variable into account.
connect_str = os.getenv('AZURE_STORAGE_CONNECTION_STRING')
# Create the BlobServiceClient object
blob_service_client = BlobServiceClient.from_connection_string(connect_str)
Belangrijk
De toegangssleutel voor het account moet voorzichtig worden gebruikt. Als uw accounttoegangssleutel verloren gaat of per ongeluk op een onveilige locatie is geplaatst, kan uw service kwetsbaar worden. Iedereen met de toegangssleutel kan aanvragen voor het opslagaccount autoriseren en heeft effectief toegang tot alle gegevens. DefaultAzureCredential biedt verbeterde beveiligingsfuncties en voordelen en is de aanbevolen benadering voor het beheren van autorisatie voor Azure-services.
Een container maken
Maak een nieuwe container in uw opslagaccount door de create_container methode voor het blob_service_client object aan te roepen. In dit voorbeeld voegt de code een GUID-waarde toe aan de containernaam om ervoor te zorgen dat deze uniek is.
Voeg deze code toe aan het einde van het try-blok:
Python
# Create a unique name for the container
container_name = str(uuid.uuid4())
# Create the container
container_client = blob_service_client.create_container(container_name)
Upload een blob naar een container met behulp van upload_blob. Met de voorbeeldcode wordt een tekstbestand gemaakt in de lokale gegevensmap om naar de container te uploaden.
Voeg deze code toe aan het einde van het try-blok:
Python
# Create a local directory to hold blob data
local_path = "./data"
os.mkdir(local_path)
# Create a file in the local data directory to upload and download
local_file_name = str(uuid.uuid4()) + ".txt"
upload_file_path = os.path.join(local_path, local_file_name)
# Write text to the file
file = open(file=upload_file_path, mode='w')
file.write("Hello, World!")
file.close()
# Create a blob client using the local file name as the name for the blob
blob_client = blob_service_client.get_blob_client(container=container_name, blob=local_file_name)
print("\nUploading to Azure Storage as blob:\n\t" + local_file_name)
# Upload the created filewith open(file=upload_file_path, mode="rb") as data:
blob_client.upload_blob(data)
Geeft de blobs in de container weer door de methode list_blobs aan te roepen. In dit geval is slechts één blob aan de container toegevoegd, zodat met de weergavebewerking alleen die ene blob wordt geretourneerd.
Voeg deze code toe aan het einde van het try-blok:
Python
print("\nListing blobs...")
# List the blobs in the container
blob_list = container_client.list_blobs()
for blob in blob_list:
print("\t" + blob.name)
Zie Lijst-blobs met Python voor meer informatie over het weergeven van blobs en voor meer codevoorbeelden.
Blobs downloaden
Download de eerder gemaakte blob door de methode download_blob aan te roepen. De voorbeeldcode voegt het achtervoegsel 'DOWNLOAD' toe aan de naam van het bestand, zodat u beide bestanden in het lokale bestandssysteem kunt zien.
Voeg deze code toe aan het einde van het try-blok:
Python
# Download the blob to a local file# Add 'DOWNLOAD' before the .txt extension so you can see both files in the data directory
download_file_path = os.path.join(local_path, str.replace(local_file_name ,'.txt', 'DOWNLOAD.txt'))
container_client = blob_service_client.get_container_client(container= container_name)
print("\nDownloading blob to \n\t" + download_file_path)
with open(file=download_file_path, mode="wb") as download_file:
download_file.write(container_client.download_blob(blob.name).readall())
Met de volgende code worden de resources opgeschoond die de app heeft gemaakt door de hele container te verwijderen met behulp van de methode delete_container . U kunt ook de lokale bestanden verwijderen als u dat wilt.
De app pauzeert voor gebruikersinvoer door input() aan te roepen voordat deze de blob, container en lokale bestanden verwijdert. Controleer of de resources correct zijn gemaakt voordat ze worden verwijderd.
Voeg deze code toe aan het einde van het try-blok:
Python
# Clean up
print("\nPress the Enter key to begin clean up")
input()
print("Deleting blob container...")
container_client.delete_container()
print("Deleting the local source and downloaded files...")
os.remove(upload_file_path)
os.remove(download_file_path)
os.rmdir(local_path)
print("Done")
Met deze app maakt u een testbestand in uw lokale map en uploadt u het naar Azure Blob Storage. In het voorbeeld worden vervolgens de blobs in de container vermeld en wordt het bestand met een nieuwe naam gedownload. U kunt de oude en nieuwe bestanden vergelijken.
Navigeer naar de map met het bestand blob_quickstart.py en voer vervolgens de volgende python opdracht uit om de app uit te voeren:
Console
python blob_quickstart.py
De uitvoer van de app is vergelijkbaar met het volgende voorbeeld (UUID-waarden weggelaten voor leesbaarheid):
Output
Azure Blob Storage Python quickstart sample
Uploading to Azure Storage as blob:
quickstartUUID.txt
Listing blobs...
quickstartUUID.txt
Downloading blob to
./data/quickstartUUIDDOWNLOAD.txt
Press the Enter key to begin clean up
Deleting blob container...
Deleting the local source and downloaded files...
Done
Voordat u begint met het opschonen, controleert u de gegevensmap voor de twee bestanden. U kunt ze vergelijken en zien dat ze identiek zijn.
Resources opschonen
Nadat u de bestanden hebt gecontroleerd en klaar bent met testen, drukt u op Enter om de testbestanden te verwijderen, samen met de container die u in het opslagaccount hebt gemaakt. U kunt ook Azure CLI gebruiken om resources te verwijderen.
Wanneer u klaar bent met de quickstart, kunt u de resources die u hebt gemaakt opschonen door de volgende opdracht uit te voeren:
Console
azd down
U wordt gevraagd om het verwijderen van de resources te bevestigen. Voer y dit in om te bevestigen.
Bouw end-to-end-oplossingen in Microsoft Azure om Azure Functions te maken, web-apps te implementeren en te beheren, oplossingen te ontwikkelen die gebruikmaken van Azure Storage en meer.
Ga aan de slag met het ontwikkelen van een Python-toepassing die werkt met Azure Blob Storage. Dit artikel helpt u bij het instellen van een project en het autoriseren van toegang tot een Azure Blob Storage-eindpunt.
Meer informatie over het weergeven van blobs in uw opslagaccount met behulp van de Azure Storage-clientbibliotheek voor Python. Codevoorbeelden laten zien hoe u blobs in een platte lijst weergeeft of hoe u blobs hiërarchisch kunt weergeven, alsof ze zijn ingedeeld in mappen of mappen.