Dela via


Utveckla för Azure Files med Python

Lär dig hur du utvecklar Python-program som använder Azure Files för att lagra data. Azure Files är en hanterad fillagringstjä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 också ett REST-API för programmatisk åtkomst till filresurser.

I den här artikeln får du lära dig mer 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.

Gäller för

Hanteringsmodell Faktureringsmodell Medieklass Redundans Små och medelstora företag (SMB) NFS
Microsoft.Storage, lagringstjänster Provisionerad v2 HDD (standard) Lokalt (LRS) Ja Nej
Microsoft.Storage, lagringstjänster Provisionerad v2 HDD (standard) Zon (ZRS) Ja Nej
Microsoft.Storage, lagringstjänster Provisionerad v2 HDD (standard) Geo (GRS) Ja Nej
Microsoft.Storage, lagringstjänster Provisionerad v2 HDD (standard) GeoZone (GZRS) Ja Nej
Microsoft.Storage, lagringstjänster Tillhandahållen v1 SSD (hög kvalitet) Lokalt (LRS) Ja Nej
Microsoft.Storage, lagringstjänster Tillhandahållen v1 SSD (hög kvalitet) Zon (ZRS) Ja Nej
Microsoft.Storage, lagringstjänster Betala efter hand HDD (standard) Lokalt (LRS) Ja Nej
Microsoft.Storage, lagringstjänster Betala efter hand HDD (standard) Zon (ZRS) Ja Nej
Microsoft.Storage, lagringstjänster Betala efter hand HDD (standard) Geo (GRS) Ja Nej
Microsoft.Storage, lagringstjänster Betala efter hand HDD (standard) GeoZone (GZRS) Ja Nej

Om Utveckling av Python-appar 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å operativsystemsnivå via Azure-filresurser som monterats med SMB eller NFS. När du monterar en filresurs 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. Azure SDK tillhandahåller klientbiblioteket för filresurser (azure-storage-file-share) som bygger på FileREST-API:et, så att du kan interagera med FileREST API-åtgärder genom välbekanta Python-programmeringsspråkparadigm. 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:

Förutsättningar

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 Azure File Shares-klientbiblioteket, klientbiblioteket för lagringshantering och Azure Identity-biblioteket. Azure-identitetspaketet behö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 Python os och io bibliotek lägger du till följande i din .py-fil :

import os
import io

Om du planerar att använda Klientbiblioteket för Azure Storage-filresurser lägger du 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 din .py-fil :

from azure.identity import DefaultAzureCredential
from azure.mgmt.resource import ResourceManagementClient
from azure.mgmt.storage import StorageManagementClient

Arbeta med Azure Files med hjälp av 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 I/O-bibliotek för Python-filer 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.
  • Användarvänlighet: 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 får du lära dig hur du använder I/O-bibliotek för Python-filer för att arbeta med Azure Files-resurser.

Mer information och exempel finns i följande resurser:

  • Python-bibliotek för fil-I/O: os och io

Koppla upp en filresurser

För att använda fil-I/O-bibliotek för Python måste du först montera en fildelning. Se följande resurser för vägledning om hur du monterar en filresurs med SMB eller NFS:

I den här artikeln använder vi följande sökväg för att hänvisa till en monterad SMB-filresurs på Windows:

file_share_path = "Z:\\file-share"

Exempel: Anslut 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 i en delad filenhet med hjälp av Python-bibliotek för fil-I/O

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 hjälp av 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 filresurser för 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 modellerar Azure Files som en resurshierarki och rekommenderas för åtgärder som utförs på katalog- eller filnivå . 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 lär du dig hur du använder klientbiblioteket för filresurser för att arbeta med Azure-filer.

Mer information och exempel finns i följande resurser:

Auktorisera åtkomst och skapa en klient

Skapa ett ShareClient objekt för att ansluta en app till Azure Files. 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.

För att auktorisera med Microsoft Entra ID behöver du använda en säkerhetsprincipal. 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, konfigurerar en Microsoft Entra-grupp, tilldelar roller och konfigurerar miljövariabler finns i Auktorisera åtkomst med utvecklartjänstens huvudnamn
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 Auktorisera åtkomst med autentiseringsuppgifter för utvecklare
Värdhanterad i Azure Hanterad identitet Information om hur du aktiverar hanterad identitet och tilldelar roller finns i Auktorisera åtkomst från Azure-värdbaserade appar med hjälp av en hanterad identitet
Värdhanterad 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 Azure RBAC:s inbyggda roll Storage File Data Privileged Contributor till säkerhetsobjektet. 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 file shares using Microsoft Entra ID with Azure Files OAuth over REST (Åtkomst till Azure-filresurser med Microsoft Entra-ID med Azure Files OAuth via 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 Azure Identity-klientbiblioteket 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 anslutningssträng 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 lagrar kontonycklar på ett säkert sätt i Azure Key Vault finns i Om Azure Key Vault-hanterade lagringskontonycklar.

Hantera Azure Files-resurser med hjälp av Azure Storage-hanteringsbiblioteken

Azure Storage-hanteringsbiblioteken bygger på REST-API:et för Azure Storage-resursprovidern. Azure Storage-resursprovidern är en tjänst baserad på Azure Resource Manager och stöder både deklarativa metoder (mallar) och imperativa metoder (direkt API-anrop). REST-API:n för resursleverantören Azure Storage ger programmatisk åtkomst till Azure Storage-resurser, inklusive fildelningar. Azure SDK tillhandahåller hanteringsbibliotek som bygger på REST-API:et för Azure Storage-resursprovidern.

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-hanteringsbiblioteken för att hantera Azure Files-resurser.

Exempel: Skapa en fildelad resurs med hjälp av Azure Storage-hanteringsbiblioteket

I följande kodexempel visas hur du skapar ett top-nivå ArmClient objekt, registrerar lagringsleverantören 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.Storage/register/action. Denna behörighet ingår i de inbyggda rollerna Contributor och Owner.

Exempel: Lista fildelningar 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}")

Mer information om hur du utvecklar med Azure Files finns i följande resurser: