Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Lär dig hur du utvecklar Python program som använder Azure Files för att lagra data. Azure Files är en hanterad fildelningstjänst i molnet. Den tillhandahåller fullständigt hanterade filresurser som är tillgängliga via branschstandardprotokollen Server Message Block (SMB) och NFS (Network File System). Azure Files tillhandahåller även ett REST API för programmatisk åtkomst till filresurser.
I den här artikeln får du lära dig om de olika metoderna för att utveckla med Azure Files i Python och hur du väljer den metod som bäst passar appens behov. Du får också lära dig hur du skapar en grundläggande konsolapp som interagerar med Azure Files resurser.
Om Python apputveckling med Azure Files
Azure Files erbjuder flera sätt för Python utvecklare att komma åt data och hantera resurser i Azure Files. I följande tabell visas metoderna, sammanfattar hur de fungerar och ger vägledning om när du ska använda varje metod:
| Tillvägagångssätt | Så här fungerar det | När man ska använda |
|---|---|---|
| Standardbibliotek för fil-I/O | Använder API-anrop på OS-nivå via Azure-fildelningar monterade med SMB eller NFS. När du monterar en fildelning med SMB/NFS kan du använda fil-I/O-bibliotek för ett programmeringsspråk eller ramverk, till exempel os och io för Python. |
Du har verksamhetsspecifika appar med befintlig kod som använder standardfil-I/O och du vill inte skriva om kod för att appen ska fungera med en Azure filresurs. |
| FileREST API | Anropar HTTPS-slutpunkter direkt för att interagera med data som lagras i Azure Files. Ger programmatisk kontroll över fildelningsresurser. I Azure SDK finns File Shares-klientbiblioteket (azure-storage-file-share) som bygger på FileREST-API:t, så att du kan interagera med FileREST API-åtgärder genom välbekanta paradigmer för Python-programmeringsspråket. |
Du skapar mervärdesmolntjänster och appar för kunder och vill använda avancerade funktioner som inte är tillgängliga via Python fil-I/O-bibliotek. |
| REST API för lagringsresursprovider | Använder Azure Resource Manager (ARM) för att hantera lagringskonton och filresurser. Anropar REST API-slutpunkter för olika resurshanteringsåtgärder. | Din app eller tjänst måste utföra resurshanteringsuppgifter, till exempel att skapa, ta bort eller uppdatera lagringskonton eller filresurser. |
Allmän information om dessa metoder finns i Översikt över programutveckling med Azure Files.
Den här artikeln fokuserar på att arbeta med Azure Files resurser med hjälp av följande metoder:
- Arbeta med Azure Files med hjälp av Python-fil-I/O-bibliotek: Montera en fillagring med hjälp av SMB eller NFS och använd Python-fil-I/O-bibliotek för att arbeta med filer och kataloger i lagringen.
- Arbeta med Azure-filer med hjälp av File Shares-klientbiblioteket för Python: Använd Azure Storage File Shares-klientbiblioteket för Python för att arbeta med filer och kataloger i en fildelning. Det här klientbiblioteket bygger på FileREST-API:et.
- Hantera Azure Files resurser med hjälp av Azure Storage-hanteringsbibliotek: Använd Azure Storage-hanteringsbiblioteken för att hantera filresurser och andra resurser i ditt lagringskonto. Hanteringsbiblioteken bygger på REST-API:et för resursleverantören Azure Storage.
Förutsättningar
- Azure prenumeration – skapa en kostnadsfri
- Azure lagringskonto – skapa ett lagringskonto
- Python 3,8+
Konfigurera projektet
Det här avsnittet beskriver hur du förbereder ett projekt för att arbeta med Azure Files.
Från projektkatalogen installerar du paket baserat på appens behov med hjälp pip install av kommandot . I följande exempel visas hur du installerar klientbiblioteket Azure Filresurser, klientbiblioteket för lagringshantering och Azure identitetsbiblioteket. Paketet azure-identity krävs för lösenordslösa anslutningar till Azure tjänster.
pip install azure-identity
pip install azure-storage-file-share
pip install azure-mgmt-resource
pip install azure-mgmt-storage
Öppna kodfilen och lägg till nödvändiga importinstruktioner.
Om du planerar att använda biblioteken Python os och io lägger du till följande i filen .py:
import os
import io
Om du planerar att använda klientbiblioteket Azure Storage Fildelningar, lägg till följande i din .py-fil:
from azure.identity import DefaultAzureCredential
from azure.storage.fileshare import ShareClient, ShareDirectoryClient, ShareFileClient
Om du planerar att använda Azure Storage-hanteringsbiblioteken lägger du till följande i filen .py:
from azure.identity import DefaultAzureCredential
from azure.mgmt.resource import ResourceManagementClient
from azure.mgmt.storage import StorageManagementClient
Arbeta med Azure Files med Python fil-I/O-bibliotek
Standardfil-I/O-bibliotek är det vanligaste sättet att komma åt och arbeta med Azure Files resurser. När du monterar en fildelning med SMB eller NFS omdirigerar operativsystemet API-begäranden för det lokala filsystemet. Med den här metoden kan du använda standardfil-I/O-bibliotek, till exempel os eller io, för att interagera med filer och kataloger i resursen.
Överväg att använda Python fil-I/O-bibliotek när din app kräver:
- Appkompatibilitet: Perfekt för verksamhetsspecifika appar med befintlig kod som redan använder Python fil-I/O-bibliotek. Du behöver inte skriva om kod för att appen ska fungera med en Azure filresurs.
- Ease of use: Python fil-I/O-bibliotek är välkända av utvecklare och enkla att använda. Ett viktigt värdeförslag för Azure Files är att det exponerar interna filsystem-API:er via SMB och NFS.
I det här avsnittet lär du dig hur du använder Python fil-I/O-bibliotek för att arbeta med Azure Files resurser.
Mer information och exempel finns i följande resurser:
Koppla upp en filresurser
Om du vill använda Python-fil-I/O-bibliotek måste du först montera en filresurs. Se följande resurser för vägledning om hur du monterar en filresurs med SMB eller NFS:
- Montera en SMB-filresurs på Windows
- Montera en SMB-filresurs på Linux
- Montera en NFS-fildelning på Linux
I den här artikeln använder vi följande sökväg för att referera till en monterad SMB-filresurs på Windows:
file_share_path = "Z:\\file-share"
Exempel: Ansluta till en filresurs och räkna upp kataloger med Python fil-I/O-bibliotek
Följande kodexempel visar hur du ansluter till en filresurs och listar katalogerna i resursen:
import os
def enumerate_directories(path):
try:
# Get all directories in the specified path
dirs = [d for d in os.listdir(path) if os.path.isdir(os.path.join(path, d))]
# Print each directory name
for dir_name in dirs:
print(f"{dir_name}")
print(f"{len(dirs)} directories found.")
except (PermissionError, FileNotFoundError, OSError) as ex:
print(f"Error: {ex}")
#Example usage
file_share_path = "Z:\\file-share"
enumerate_directories(file_share_path)
Exempel: Skriva till en fil på en fillagringsplats med Pythons fil-I/O-bibliotek
I följande kodexempel visas hur du skriver och lägger till text i en fil:
import os
def write_to_file(file_share_path, file_name):
# First line of text with platform-appropriate line ending
text_to_write = "First line" + os.linesep
# Combine the file share path and filename
file_path = os.path.join(file_share_path, file_name)
# Write initial text to file (overwrites if file exists)
with open(file_path, 'w') as file:
file.write(text_to_write)
# Text to append
text_to_append = ["Second line", "Third line"]
# Append lines to the file
with open(file_path, 'a') as file:
file.write(os.linesep.join(text_to_append) + os.linesep)
# Example usage
file_share_path = "Z:\\file-share"
write_to_file(file_share_path, "test.txt")
Exempel: Räkna upp fil-ACL:er med Python fil-I/O-bibliotek
Följande kodexempel visar hur du räknar upp grundläggande åtkomstkontrollistor (ACL: er) för en fil:
import os
import stat
def enumerate_file_acls(file_path):
try:
# Get file stats
file_stat = os.stat(file_path)
# Get permissions in octal format
permissions_octal = oct(stat.S_IMODE(file_stat.st_mode))
print(f"File: {file_path}")
print(f"Permissions (octal): {permissions_octal}")
# Interpret permissions in a human-readable format
permissions = ""
permissions += "r" if file_stat.st_mode & stat.S_IRUSR else "-"
permissions += "w" if file_stat.st_mode & stat.S_IWUSR else "-"
permissions += "x" if file_stat.st_mode & stat.S_IXUSR else "-"
permissions += "r" if file_stat.st_mode & stat.S_IRGRP else "-"
permissions += "w" if file_stat.st_mode & stat.S_IWGRP else "-"
permissions += "x" if file_stat.st_mode & stat.S_IXGRP else "-"
permissions += "r" if file_stat.st_mode & stat.S_IROTH else "-"
permissions += "w" if file_stat.st_mode & stat.S_IWOTH else "-"
permissions += "x" if file_stat.st_mode & stat.S_IXOTH else "-"
print(f"Permissions (symbolic): {permissions}")
print(f"Owner ID: {file_stat.st_uid}")
print(f"Group ID: {file_stat.st_gid}")
print("Note: For detailed Windows ACLs, you may need a specialized library.")
except FileNotFoundError:
print(f"Error: File '{file_path}' not found.")
except PermissionError:
print(f"Error: Permission denied for '{file_path}'.")
except Exception as e:
print(f"Error: {e}")
# Example usage
file_share_path = "Z:\\file-share"
file_name = "test.txt"
file_path = os.path.join(file_share_path, file_name)
enumerate_file_acls(file_path)
Arbeta med Azure Files data med hjälp av klientbiblioteket för fildelningar i Python
FileREST-API:et ger programmatisk åtkomst till Azure Files. Det gör att du kan anropa HTTPS-slutpunkter för att utföra åtgärder på filresurser, kataloger och filer. FileREST-API:et är utformat för hög skalbarhet och avancerade funktioner som kanske inte är tillgängliga via interna protokoll. Azure SDK tillhandahåller klientbibliotek, till exempel filresursklientbiblioteket för Python, som bygger på FileREST-API:et.
Överväg att använda FileREST-API:et och filresursklientbiblioteket om programmet kräver:
- Avancerade funktioner: Åtkomståtgärder och funktioner som inte är tillgängliga via interna protokoll.
- Anpassade molnintegreringar: Skapa anpassade mervärdestjänster, till exempel säkerhetskopiering, antivirus eller datahantering, som interagerar direkt med Azure Files.
- Prestandaoptimering: Dra nytta av prestandafördelar i storskaliga scenarier med hjälp av dataplansåtgärder.
FileREST API-modellerna Azure Files som en resurshierarki och rekommenderas för åtgärder som utförs på nivån directory eller file. Du bör föredra REST-API:et för lagringsresursprovidern för åtgärder som utförs på filtjänst- eller filresursnivå .
I det här avsnittet får du lära dig hur du använder klientbiblioteket Filresurser för att arbeta med Azure Files resurser.
Mer information och exempel finns i följande resurser:
- Azure Storage-klientbibliotek för fildelningar för Python
- Azure Storage filresursklientbibliotek för Python exempel
Auktorisera åtkomst och skapa en klient
Om du vill ansluta en app till Azure Files skapar du ett ShareClient-objekt. Det här objektet är startpunkten för att arbeta med Azure Files resurser. Följande kodexempel visar hur du skapar ett ShareClient objekt med olika auktoriseringsmekanismer.
Om du vill auktorisera med Microsoft Entra ID måste du använda en säkerhetsprincip. Vilken typ av säkerhetsprincip du behöver beror på var din app körs. Använd den här tabellen som en guide.
| Var appen körs | Säkerhetsprincip | Vägledning |
|---|---|---|
| Lokal dator (utveckla och testa) | Service Principal | Information om hur du registrerar appen, ställer in en Microsoft Entra-grupp, tilldelar roller och konfigurerar miljövariabler finns i Authorize access using developer service principals |
| Lokal dator (utveckla och testa) | Användaridentitet | Information om hur du konfigurerar en Microsoft Entra grupp, tilldelar roller och loggar in på Azure finns i Authorize access using developer credentials |
| Finns i Azure | Hanterad identitet | För att lära dig hur du aktiverar hanterade identiteter och tilldelar roller, se Autorisera åtkomst från Azure-värdappar med hjälp av en hanterad identitet |
| Finns utanför Azure (till exempel lokala appar) | Service Principal | Information om hur du registrerar appen, tilldelar roller och konfigurerar miljövariabler finns i Auktorisera åtkomst från lokala appar med hjälp av ett huvudnamn för programtjänsten |
Om du vill arbeta med kodexemplen i den här artikeln ska du tilldela säkerhetsobjektet den inbyggda Azure RBAC-rollen Storage File Data Privileged Contributor. Den här rollen ger fullständig läs-, skriv-, ändrings-ACL:er och borttagningsåtkomst för alla data i resurserna för alla konfigurerade lagringskonton oavsett vilka NTFS-behörigheter på fil-/katalognivå som har angetts. Mer information finns i Access Azure filresurser med Microsoft Entra ID med Azure Files OAuth över REST.
Auktorisera åtkomst med defaultAzureCredential
Ett enkelt och säkert sätt att auktorisera åtkomst och ansluta till Azure Files är att hämta en OAuth-token genom att skapa en DefaultAzureCredential instans. Du kan sedan använda den autentiseringsuppgiften för att skapa ett ShareClient objekt.
I följande exempel skapas ett ShareClient-objekt som har auktoriserats med DefaultAzureCredential, och sedan skapas ett ShareDirectoryClient-objekt för att arbeta med en katalog i resursdelningen.
from azure.identity import DefaultAzureCredential
from azure.storage.fileshare import ShareClient
account_name = "<account-name>"
share_name = "<share-name>"
# Create the share client using DefaultAzureCredential
share_client = ShareClient(
account_url=f"https://{account_name}.file.core.windows.net",
share_name=share_name,
credential=DefaultAzureCredential(),
# When using a token credential, you MUST specify a token_intent
token_intent='backup'
)
# Get a reference to a directory in the share
directory_client = share_client.get_directory_client("sample-directory")
Om du vet exakt vilken typ av autentiseringsuppgifter du använder för att autentisera användare kan du hämta en OAuth-token med hjälp av andra klasser i klientbiblioteket Azure Identity för Python. Dessa klasser härleds från klassen TokenCredential .
Mer information om var och en av dessa auktoriseringsmekanismer finns i Välj hur du auktoriserar åtkomst till fildata.
Exempel: Kopiera filer med hjälp av klientbiblioteket för fildelningar
Du kan kopiera filer i en filresurs eller mellan filresurser med hjälp av följande metod:
Du kan kopiera en fil till en målblob med hjälp av följande metod från ett BlobClient objekt:
I följande kodexempel visas hur du kopierar en fil till en fil i en annan filresurs:
from azure.identity import DefaultAzureCredential
from azure.storage.fileshare import ShareFileClient
# Define storage account parameters
account_name = "<account-name>"
src_share_name = "src-file-share"
dest_share_name = "dest-file-share"
src_file_path = "src/path/to/file"
dest_file_path = "dest/path/to/file"
# Create token credential
token_credential = DefaultAzureCredential()
# Create source file client
src_file_client = ShareFileClient(
account_url=f"https://{account_name}.file.core.windows.net",
share_name=src_share_name,
file_path=src_file_path,
credential=token_credential,
token_intent='backup'
)
# Create destination file client
dest_file_client = ShareFileClient(
account_url=f"https://{account_name}.file.core.windows.net",
share_name=dest_share_name,
file_path=dest_file_path,
credential=token_credential,
token_intent='backup'
)
# Copy the file from the source share to the destination share
copy_operation = dest_file_client.start_copy_from_url(src_file_client.url)
Exempel: Hyra en fil med hjälp av File Shares klientbiblioteket
Ett lån skapar ett lås på en fil som hanteras av Azure via ett låne-ID. Hyresavtalet ger en mekanism för att samordna åtkomsten till filer mellan flera klienter i ett distribuerat system. Ett lån på en fil ger exklusiv skriv- och borttagningsåtkomst. Mer information om lånetillstånd och åtgärder finns i Lånefil.
I följande kodexempel visas hur du skapar en låneklient, skaffar ett lån med obegränsad varaktighet för en fil och släpper lånet:
from azure.identity import DefaultAzureCredential
from azure.storage.fileshare import ShareFileClient, ShareLeaseClient
# Define storage account parameters
account_name = "<account-name>"
share_name = "sample-file-share"
file_path = "path/to/file"
# Create a DefaultAzureCredential for authentication
token_credential = DefaultAzureCredential()
# Create a ShareFileClient
file_client = ShareFileClient(
account_url=f"https://{account_name}.file.core.windows.net",
share_name=share_name,
file_path=file_path,
credential=token_credential,
token_intent='backup'
)
# Get a lease client for the file
lease_client = ShareLeaseClient(file_client)
# Acquire an infinite duration lease on the file
lease_info = lease_client.acquire()
# Do something with the file while it's leased
# ...
# Release the lease
lease_client.release()
När du använder både SMB och FileREST-API:et bör du tänka på att FileREST-API:et använder leasar för att hantera fillås, medan SMB använder filsystemlås som hanteras av operativsystemet. Mer information om hur du hanterar fillåsningsinteraktioner mellan SMB och FileREST-API:et finns i Hantera fillås.
Exempel: Skapa och lista ögonblicksbilder med hjälp av klientbiblioteket för fildelningar
Snapshots av delningar är skrivskyddade kopior av en filresurs vid en viss tidpunkt. Du kan skapa en ögonblicksbild av en filresurs och sedan använda ögonblicksbilden för att komma åt data i resursen när ögonblicksbilden skapades. Du kan också lista alla ögonblicksbilder i en fildelning och ta bort ögonblicksbilder av fildelningen.
Följande kodexempel visar hur du skapar en resursögonblicksbild, listar ögonblicksbilderna i en filresurs och går igenom rotkatalogen i en resursögonblicksbild:
from azure.storage.fileshare import ShareServiceClient, ShareDirectoryClient
def list_root_directory_snapshot(root_dir: ShareDirectoryClient):
for item in root_dir.list_directories_and_files():
if item["is_directory"]:
print(f"Directory in snapshot: {item['name']}")
else:
print(f"File in snapshot: {item['name']}")
# Connection string with account key (required for share snapshots)
connection_string = "<connection-string>"
# Create service and share clients
share_service_client = ShareServiceClient.from_connection_string(connection_string)
share_name = "sample-file-share"
share_client = share_service_client.get_share_client(share_name)
# Create a snapshot
snapshot_info = share_client.create_snapshot()
print(f"Snapshot created: {snapshot_info['snapshot']}")
# List snapshots in a share
for share_item in share_service_client.list_shares(include_snapshots=True):
if share_item["snapshot"]:
print(f"Share: {share_item['name']} (Snapshot: {share_item['snapshot']})")
# List directories and files in a share snapshot
snapshot_timestamp = snapshot_info["snapshot"]
share_snapshot = share_service_client.get_share_client(share_name, snapshot=snapshot_timestamp)
root_dir = share_snapshot.get_directory_client("")
list_root_directory_snapshot(root_dir)
Anmärkning
OAuth-token, till exempel de som hämtas när du använder DefaultAzureCredential, är inte tillåtna för dataplansåtgärder på fildelningsnivå. Om du vill arbeta med dela ögonblicksbilder måste klientobjektet auktoriseras med hjälp av kontots nyckel. Objektet ShareClient som skapas i det här kodexemplet använder en connection string, som innehåller kontonyckeln.
Lagring av kontonycklar eller anslutningssträngar utgör en säkerhetsrisk. Du bör bara använda dem när Microsoft Entra autentisering inte är tillgänglig. Mer information om hur du på ett säkert sätt auktoriserar åtkomst till lagring finns i Authorize access to data in Azure Storage.
Hantera Azure Files resurser med hjälp av Azure Storage-hanteringsbiblioteken
Azure Storage-hanteringsbiblioteken bygger på REST-API:et för Azure Storage resursleverantör. Den Azure Storage resursprovidern är en tjänst som baseras på Azure Resource Manager och stöder både deklarativa metoder (mallar) och imperativa metoder (direkt API-anrop). REST API för Azure Storage-resursprovider ger programmatisk åtkomst till Azure Storage resurser, inklusive filresurser. Azure SDK tillhandahåller hanteringsbibliotek som bygger på REST-API:et för Azure Storage resursleverantör.
Hanteringsbiblioteken rekommenderas för åtgärder som utförs på filtjänst- eller filresursnivå . I det här avsnittet får du lära dig hur du använder Azure Storage-hanteringsbibliotek för att hantera Azure Files resurser.
Exempel: Skapa en fildelning med hjälp av Azure Storage-hanteringsbiblioteket
Följande kodexempel visar hur du skapar ett överordnat ArmClient objekt, registrerar lagringsresursprovidern med en prenumeration och skapar en fildelning med hjälp av Azure Storage-hanteringsbiblioteket:
from azure.identity import DefaultAzureCredential
from azure.mgmt.resource import ResourceManagementClient, SubscriptionClient
from azure.mgmt.storage import StorageManagementClient
from azure.mgmt.storage.models import FileShare
# Create the credential for authentication
credential = DefaultAzureCredential()
# Define variables
subscription_id = "<subscription-id>"
resource_group_name = "<resource-group-name>"
storage_account_name = "<storage-account-name>"
share_name = "sample-file-share"
# Create clients
resource_client = ResourceManagementClient(credential, subscription_id)
subscription_client = SubscriptionClient(credential)
storage_client = StorageManagementClient(credential, subscription_id)
# Register Microsoft.Storage resource provider, if not already registered
provider = resource_client.providers.get('Microsoft.Storage')
if provider.registration_state == "NotRegistered":
resource_client.providers.register('Microsoft.Storage')
# Create a file share
file_share = storage_client.file_shares.create(
resource_group_name=resource_group_name,
account_name=storage_account_name,
share_name=share_name,
file_share=FileShare(
share_quota=1 # Share size in GiB
# Add other file share properties here
)
)
Du kan konfigurera filresursegenskaperna med hjälp av FileShare klassen . Det föregående exemplet visar hur man ställer in egenskapen share_quota. Mer information finns i klassreferensen StorageManagementClient .
Anmärkning
För att utföra registeråtgärden behöver du behörigheter för följande Azure RBAC-åtgärd: Microsoft. Lagring/register/åtgärd. Denna behörighet ingår i de inbyggda rollerna Contributor och Owner.
Exempel: Lista filresurser och ögonblicksbilder med hjälp av Azure Storage-hanteringsbiblioteket
Följande kodexempel visar hur du listar filresurser och ögonblicksbilder i ett lagringskonto:
from azure.identity import DefaultAzureCredential
from azure.mgmt.storage import StorageManagementClient
# Create the credential for authentication
credential = DefaultAzureCredential()
# Define variables
subscription_id = "<subscription-id>"
resource_group_name = "<resource-group-name>"
storage_account_name = "<storage-account-name>"
expand = "snapshots" # Include snapshots in the response
# Create storage management client
storage_client = StorageManagementClient(credential, subscription_id)
# List all file shares with their snapshots
file_shares = storage_client.file_shares.list(
resource_group_name=resource_group_name,
account_name=storage_account_name,
expand=expand
)
# Iterate over the file shares and print them along with any snapshots
for share in file_shares:
print(f"Resource name: {share.name}")
if share.snapshot_time:
print(f"Snapshot: {share.snapshot_time}")
Relaterat innehåll
Mer information om hur du utvecklar med Azure Files finns i följande resurser: