Kom igång med Azure Files med hjälp av F#

Azure Files är en tjänst som erbjuder filresurser i molnet med SMB-standardprotokollet (Server Message Block). Både SMB 2.1 och SMB 3.0 stöds. Med Azure Files kan du migrera äldre program som förlitar sig på filresurser till Azure snabbt och utan kostsamma omskrivningar. Program som körs på virtuella Azure-datorer eller molntjänster eller från lokala klienter kan montera en filresurs i molnet, precis som ett skrivbordsprogram monterar en typisk SMB-resurs. Valfritt antal programkomponenter kan sedan montera och komma åt fildelningsutrymmet samtidigt.

En konceptuell översikt över fillagring finns i .NET-guiden för fillagring. De här självstudierna använder anslutningssträng för att autentisera med Azure. För optimal säkerhet bör du använda Microsoft Entra-ID med hanterade identiteter.

Förutsättningar

Om du vill använda den här guiden måste du först skapa ett Azure-lagringskonto. Du behöver också din lagringsåtkomstnyckel för det här kontot.

Skapa ett F#-skript och starta interaktivT F#

Exemplen i den här artikeln kan användas i antingen ett F#-program eller ett F#-skript. Skapa ett F#-skript genom att skapa en fil med .fsx tillägget, till exempel files.fsxi din F#-utvecklingsmiljö.

Så här kör du skript

F# Interactive, dotnet fsi, kan startas interaktivt eller startas från kommandoraden för att köra ett skript. Kommandoradssyntaxen är

> dotnet fsi [options] [ script-file [arguments] ]

Lägga till paket i ett skript

Använd #rnuget:package name för att installera paketen Azure.Storage.Blobs och Azure.Storage.CommonAzure.Storage.Files och och open namnrymderna. Såsom

> #r "nuget: Azure.Storage.Blobs"
> #r "nuget: Azure.Storage.Common"
> #r "nuget: Azure.Storage.Files"
open Azure.Storage.Blobs
open Azure.Storage.Sas
open Azure.Storage.Files
open Azure.Storage.Files.Shares
open Azure.Storage.Files.Shares.Models

Lägga till namnrymdsdeklarationer

Lägg till följande open-instruktioner överst i files.fsx-filen:

open System
open System.IO
open Azure
open Azure.Storage // Namespace for StorageSharedKeyCredential
open Azure.Storage.Blobs // Namespace for BlobContainerClient
open Azure.Storage.Sas // Namespace for ShareSasBuilder
open Azure.Storage.Files.Shares // Namespace for File storage types
open Azure.Storage.Files.Shares.Models // Namespace for ShareServiceProperties

Hämta anslutningssträngen

Du behöver en Azure Storage-anslutningssträng för den här handledningen. Mer information om anslutningssträng finns i Konfigurera anslutningssträngar för lagring.

I handledningen skriver du in din anslutningssträng i skriptet, så här:

let storageConnString = "..." // fill this in from your storage account

Skapa filtjänstklienten

Med ShareClient typen kan du programmatiskt använda filer som lagras i Fillagring. Här är ett sätt att skapa tjänstklienten:

let share = ShareClient(storageConnString, "shareName")

Nu är du redo att skriva kod som läser data från och skriver data till Fillagring.

Skapa en fildelning

Det här exemplet visar hur du skapar en fildelning om den inte redan finns:

share.CreateIfNotExistsAsync()

Skapa en katalog

Här får du katalogen. Du skapar om det inte redan finns.

// Get a reference to the directory
let directory = share.GetDirectoryClient("directoryName")

// Create the directory if it doesn't already exist
directory.CreateIfNotExistsAsync()

Ladda upp en fil till exempelkatalogen

Det här exemplet visar hur du laddar upp en fil till exempelkatalogen.

let file = directory.GetFileClient("fileName")

let writeToFile localFilePath =
    use stream = File.OpenRead(localFilePath)
    file.Create(stream.Length)
    file.UploadRange(
        HttpRange(0L, stream.Length),
        stream)

writeToFile "localFilePath"

Ladda ned en fil till en lokal fil

Här laddar du ned filen som just har skapats och lägger till innehållet i en lokal fil.

let download = file.Download()

let copyTo saveDownloadPath =
    use downStream = File.OpenWrite(saveDownloadPath)
    download.Value.Content.CopyTo(downStream)

copyTo "Save_Download_Path"

Ange den maximala storleken för en fildelning

Exemplet nedan visar hur du kontrollerar användningen av en resurs och hur du ställer in kvoten för resursen.

// stats.Usage is current usage in GB
let ONE_GIBIBYTE = 10_737_420_000L // Number of bytes in 1 gibibyte
let stats = share.GetStatistics().Value
let currentGiB = int (stats.ShareUsageInBytes / ONE_GIBIBYTE)

// Set the quota to 10 GB plus current usage
share.SetQuotaAsync(currentGiB + 10)

// Remove the quota
share.SetQuotaAsync(0)

Generera en signatur för delad åtkomst för en fil eller filresurs

Du kan generera en signatur för delad åtkomst (SAS) för en filresurs eller för en enskild fil. Du kan också skapa en princip för delad åtkomst på en filresurs för att hantera signaturer för delad åtkomst. Vi rekommenderar att du skapar behörigheter för delad åtkomst eftersom det ger ett sätt att återkalla SAS om det ska komprometteras.

Här skapar du behörigheter för delad åtkomst på en resurs och anger sedan behörigheterna för att ange begränsningarna för en SAS för en fil i resursen.

let accountName = "..." // Input your storage account name
let accountKey = "..." // Input your storage account key

// Create a 24-hour read/write policy.
let expiration = DateTimeOffset.UtcNow.AddHours(24.)
let fileSAS = ShareSasBuilder(
      ShareName = "shareName",
      FilePath = "filePath",
      Resource = "f",
      ExpiresOn = expiration)

// Set the permissions for the SAS
let permissions = ShareFileSasPermissions.All
fileSAS.SetPermissions(permissions)

// Create a SharedKeyCredential that we can use to sign the SAS token
let credential = StorageSharedKeyCredential(accountName, accountKey)

// Build a SAS URI
let fileSasUri = UriBuilder($"https://{accountName}.file.core.windows.net/{fileSAS.ShareName}/{fileSAS.FilePath}")
fileSasUri.Query = fileSAS.ToSasQueryParameters(credential).ToString()

Mer information om hur du skapar och använder signaturer för delad åtkomst finns i Använda signaturer för delad åtkomst (SAS) och Skapa och använda en SAS med Blob Storage.

Kopiera filer

Du kan kopiera en fil till en annan fil eller till en blob eller en blob till en fil. Om du kopierar en blob till en fil eller en fil till en blob, måste du använda en signatur för delad åtkomst (SAS) för att autentisera källobjektet, även om du kopierar inom samma lagringskonto.

Kopiera en fil till en annan fil

Här kopierar du en fil till en annan fil i samma resurs. Eftersom den här kopieringsåtgärden kopierar mellan filer i samma lagringskonto kan du använda autentisering med delad nyckel för att utföra kopieringen.

let sourceFile = ShareFileClient(storageConnString, "shareName", "sourceFilePath")
let destFile = ShareFileClient(storageConnString, "shareName", "destFilePath")
destFile.StartCopyAsync(sourceFile.Uri)

Kopiera en fil till en blobb

Här skapar du en fil och kopierar den till en blob i samma lagringskonto. Du skapar en SAS för källfilen, som tjänsten använder för att autentisera åtkomsten till källfilen under kopieringsåtgärden.

// Create a new file SAS
let fileSASCopyToBlob = ShareSasBuilder(
    ShareName = "shareName",
    FilePath = "sourceFilePath",
    Resource = "f",
    ExpiresOn = DateTimeOffset.UtcNow.AddHours(24.))
let permissionsCopyToBlob = ShareFileSasPermissions.Read
fileSASCopyToBlob.SetPermissions(permissionsCopyToBlob)
let fileSasUriCopyToBlob = UriBuilder($"https://{accountName}.file.core.windows.net/{fileSASCopyToBlob.ShareName}/{fileSASCopyToBlob.FilePath}")

// Get a reference to the file.
let sourceFileCopyToBlob = ShareFileClient(fileSasUriCopyToBlob.Uri)

// Get a reference to the blob to which the file will be copied.
let containerCopyToBlob = BlobContainerClient(storageConnString, "containerName");
containerCopyToBlob.CreateIfNotExists()
let destBlob = containerCopyToBlob.GetBlobClient("blobName")
destBlob.StartCopyFromUriAsync(sourceFileCopyToBlob.Uri)

Du kan kopiera en blobb till en fil på samma sätt. Om källobjektet är en blobb skapar du en SAS för att autentisera åtkomsten till blobben under kopieringen.

Felsöka fillagring med hjälp av metrik

Azure Lagringsanalys stöder mått för fillagring. Med hjälp av mätvärdesdata kan du spåra begäranden och diagnostisera problem.

Du kan aktivera metriker för fillagring från Azure portal, eller så kan du göra det från F# så här:

// Instantiate a ShareServiceClient
let shareService = ShareServiceClient(storageConnString);

// Set metrics properties for File service
let props = ShareServiceProperties()

props.HourMetrics = ShareMetrics(
    Enabled = true,
    IncludeApis = true,
    Version = "1.0",
    RetentionPolicy = ShareRetentionPolicy(Enabled = true,Days = 14))

props.MinuteMetrics = ShareMetrics(
    Enabled = true,
    IncludeApis = true,
    Version = "1.0",
    RetentionPolicy = ShareRetentionPolicy(Enabled = true,Days = 7))

shareService.SetPropertiesAsync(props)

Nästa steg

Mer information om Azure Files finns i dessa länkar.

Begreppsrelaterade artiklar och videoklipp

Verktygsstöd för File Storage

Referens

Blogginlägg