Aan de slag met Azure Files met F#

Azure Files is een service die bestandsshares in de cloud biedt met behulp van het standaard SMB-protocol (Server Message Block). Zowel SMB 2.1 als SMB 3.0 wordt ondersteund. Met Azure Files kunt u verouderde toepassingen die afhankelijk zijn van bestandsshares snel en zonder kostbare herschrijven naar Azure migreren. Toepassingen die worden uitgevoerd op virtuele machines of in cloudservices van Azure, of op on-premises clients, kunnen een bestandsshare in de cloud koppelen, op dezelfde manier zoals een bureaubladtoepassing een gewone SMB-share koppelt. Elk willekeurig aantal toepassingsonderdelen kan vervolgens tegelijkertijd de bestandsopslagshare koppelen en openen.

Zie de .NET-handleiding voor bestandsopslag voor een conceptueel overzicht van bestandsopslag. Voor het gemak gebruiken deze zelfstudies verbindingsreeksen voor verificatie met Azure. Voor optimale beveiliging moet u Microsoft Entra ID gebruiken met beheerde identiteiten.

Vereisten

Als u deze handleiding wilt gebruiken, moet u eerst een Azure-opslagaccount maken. U hebt ook uw toegangssleutel voor opslag nodig voor dit account.

Een F#-script maken en F# interactief starten

De voorbeelden in dit artikel kunnen worden gebruikt in een F#-toepassing of een F#-script. Als u een F#-script wilt maken, maakt u een bestand met de .fsx extensie, bijvoorbeeld files.fsxin uw F#-ontwikkelomgeving.

Scripts uitvoeren

F# Interactive, dotnet fsi, kan interactief worden gestart, of vanaf de commandoregel worden uitgevoerd om een script te draaien. De syntaxis van de opdrachtregel is

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

Pakketten toevoegen in een script

Gebruik #rnuget:package name om de Azure.Storage.Blobs, Azure.Storage.Common en Azure.Storage.Files pakketten en open naamruimten te installeren. Zoals

> #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

Naamruimtedeclaraties toevoegen

Voeg boven aan het open-bestand de volgende files.fsx-instructies toe:

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

Verkrijg uw verbindingsreeks

Voor deze zelfstudie hebt u een Azure Storage-verbindingsreeks nodig. Zie Opslagverbindingsreeksen configureren voor meer informatie over verbindingsreeks s.

Voor de zelfstudie voert u uw verbindingsreeks in uw script in, zoals hieronder:

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

De bestandsserviceclient maken

Met het ShareClient type kunt u programmatisch bestanden gebruiken die zijn opgeslagen in File Storage. Hier volgt één manier om de serviceclient te maken:

let share = ShareClient(storageConnString, "shareName")

U bent nu klaar om code te schrijven waarmee gegevens worden gelezen en naar File Storage worden geschreven.

Een bestandsshare maken

In dit voorbeeld ziet u hoe u een bestandsshare maakt als deze nog niet bestaat:

share.CreateIfNotExistsAsync()

Een map maken

Hier krijgt u de map. U maakt deze als deze nog niet bestaat.

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

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

Een bestand uploaden naar de voorbeeldmap

In dit voorbeeld ziet u hoe u een bestand uploadt naar de voorbeeldmap.

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"

Een bestand downloaden naar een lokaal bestand

Hier downloadt u het bestand dat u zojuist hebt gemaakt en voegt u de inhoud toe aan een lokaal bestand.

let download = file.Download()

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

copyTo "Save_Download_Path"

De maximale grootte voor een bestandsshare instellen

In onderstaand voorbeeld ziet u hoe u het huidige gebruik voor een share controleert en een quotum voor de share instelt.

// 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)

Een Shared Access Signature genereren voor een bestand of bestandsshare

U kunt een SAS (Shared Access Signature) genereren voor een bestandsshare of voor een afzonderlijk bestand. U kunt op een bestandsshare ook een beleid voor gedeelde toegang maken om handtekeningen voor gedeelde toegang te beheren. Het maken van gedeelde toegangsmachtigingen wordt aanbevolen, omdat het een middel biedt om de SAS in te trekken als er inbreuk op wordt gemaakt.

Hier maakt u toegangsrechten voor een gedeelde map aan en stelt u deze in om de voorwaarden voor een SAS op een bestand in de gedeelde map te bieden.

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()

Voor meer informatie over het maken en gebruiken van handtekeningen voor gedeelde toegang, raadpleegt u Using Shared Access Signatures (SAS) (Shared Access Signatures (SAS) gebruiken) en Create and use a SAS with Blob storage (Een SAS maken en gebruiken met Blob Storage).

Bestanden kopiëren

U kunt een bestand kopiëren naar een ander bestand of naar een blob of een blob naar een bestand. Als u een blob kopieert naar een bestand of een bestand naar een blob, moet u een Shared Access Signature (SAS) gebruiken om het bronobject te verifiëren, zelfs als u kopieert binnen hetzelfde opslagaccount.

Een bestand kopiëren naar een ander bestand

Hier kopieert u een bestand naar een ander bestand in dezelfde share. Omdat met deze kopieerbewerking bestanden in hetzelfde opslagaccount worden gekopieerd, kunt u verificatie met gedeelde sleutel gebruiken om de kopie te maken.

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

Een bestand kopiëren naar een blob

Hier maakt u een bestand en kopieert u het naar een blob binnen hetzelfde opslagaccount. U maakt een SAS voor het bronbestand, dat door de service wordt gebruikt om de toegang tot het bronbestand te verifiëren tijdens de kopieerbewerking.

// 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)

Op dezelfde manier kunt u een blob naar een bestand kopiëren. Als het bronobject een blob is, maakt u een SAS om tijdens de kopieerbewerking de toegang tot de blob te verifiëren.

Problemen met File Storage oplossen met metrische gegevens

Azure Opslaganalyse ondersteunt metrische gegevens voor File Storage. Met metrische gegevens kunt u aanvragen volgen en problemen diagnosticeren.

U kunt metrische gegevens inschakelen voor File Storage vanuit De Azure-portal of u kunt dit doen vanuit F# als volgt:

// 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)

Volgende stappen

Zie deze koppelingen voor meer informatie over Azure Files.

Conceptuele artikelen en video's

Hulpprogramma-ondersteuning voor File Storage

Verwijzing

Blogberichten