Bien démarrer avec Azure Files en utilisant F#

Azure Files est un service qui offre des partages de fichiers dans le cloud en utilisant le protocole SMB (Server Message Block) standard. Les protocoles SMB 2.1 et SMB 3.0 sont pris en charge. Avec Azure Files, vous pouvez migrer vers Azure des applications héritées qui s’appuient sur des partages de fichiers, rapidement et sans réécritures onéreuses. Les applications s’exécutant sur des machines virtuelles Azure, dans des services cloud ou à partir de clients locaux peuvent monter un partage de fichiers dans le cloud, tout comme une application de bureau monte un partage SMB standard. Un nombre quelconque de composants d’application peuvent ensuite monter un partage de stockage de fichiers et y accéder simultanément.

Pour obtenir une vue d’ensemble des concepts de Stockage Fichier, consultez le guide .NET pour Stockage Fichier.

Prérequis

Pour utiliser ce guide, vous devez d’abord créer un compte de stockage Azure. Vous avez également besoin de votre clé d’accès de stockage pour ce compte.

Créer un script F# et démarrer F# Interactive

Les exemples de cet article peuvent être utilisés dans une application F# ou dans un script F#. Pour créer un script F#, créez un fichier avec l’extension .fsx, par exemple files.fsx, dans votre environnement de développement F#.

Comment exécuter des scripts

F# Interactive, dotnet fsi, peut être lancé de façon interactive ou à partir de la ligne de commande pour exécuter un script. La syntaxe de la ligne de commande est

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

Ajouter des packages dans un script

Utilisez #rnuget:package name pour installer les packages Azure.Storage.Blobs, Azure.Storage.Common et Azure.Storage.Files, et les espaces de noms open. Elle doit contenir

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

Ajout de déclarations d'espaces de noms

Ajoutez les instructions open suivantes au début du fichier files.fsx :

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

Obtention de votre chaîne de connexion

Pour ce tutoriel, vous avez besoin d’une chaîne de connexion à Stockage Azure. Pour plus d’informations sur les chaînes de connexion, consultez Configurer des chaînes de connexion de stockage.

Pour le tutoriel, vous allez entrer votre chaîne de connexion dans votre script, comme suit :

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

Crée le client du service de fichiers

Le type ShareClient vous permet d’utiliser par programmation des fichiers stockés dans Stockage Fichier. Voici un moyen de créer le client du service :

let share = ShareClient(storageConnString, "shareName")

Vous êtes maintenant prêt à écrire du code qui lit et écrit des données dans Stockage Fichier.

Créer un partage de fichiers

Cet exemple montre comment créer un partage de fichiers s’il n’existe pas déjà :

share.CreateIfNotExistsAsync()

Créer un répertoire

Ici, vous obtenez le répertoire. Vous le créez s’il n’existe pas déjà.

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

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

Charger un fichier dans l’exemple de répertoire

Cet exemple montre comment charger un fichier dans l’exemple de répertoire.

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"

Télécharger un fichier dans un fichier local

Ici, vous téléchargez le fichier que vous venez de créer en ajoutant le contenu à un fichier local.

let download = file.Download()

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

copyTo "Save_Download_Path"

Définition de la taille maximale d’un partage de fichiers

L’exemple ci-dessous illustre comment vérifier l’utilisation actuelle pour un partage et comment définir le quota pour le partage.

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

Génération d’une signature d’accès partagé pour un fichier ou partage de fichiers

Vous pouvez générer une signature d’accès partagé (SAP) pour un partage de fichiers ou un fichier individuel. Vous pouvez également créer une stratégie d’accès partagé sur un partage de fichiers pour gérer les signatures d’accès partagé. La création d’autorisations d’accès partagé est recommandée, car elle offre un moyen de révoquer la signature d’accès partagé (SAS) si elle venait à être compromise.

Ici, vous créez des autorisations d’accès partagé sur un partage, puis vous définissez ces autorisations pour fournir les contraintes pour une signature d’accès partagé sur un fichier du partage.

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

Pour plus d’informations sur la création et l’utilisation de signatures d’accès partagé, consultez Utilisation des signatures d’accès partagé (SAP) et Créer et utiliser une signature d’accès partagé avec Blob Storage.

Copie des fichiers

Vous pouvez copier un fichier dans un autre fichier ou dans un objet blob, ou copier un objet blob dans un fichier. Si vous copiez un objet blob dans un fichier ou un fichier dans un objet blob, vous devez utiliser une signature d’accès partagé (SAS) pour authentifier l’objet source, même si vous effectuez la copie au sein du même compte de stockage.

Copier un fichier dans un autre

Ici, vous copiez un fichier dans un autre fichier dans le même partage. Étant donné que cette opération de copie a lieu entre des fichiers du même compte de stockage, vous pouvez utiliser l’authentification Clé partagée pour l’effectuer.

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

Copier un fichier dans un objet blob

Ici, vous créez un fichier et vous le copiez dans un objet blob au sein du même compte de stockage. Vous créez une signature d’accès partagé pour le fichier source, que le service utilise pour authentifier l’accès au fichier source lors de l’opération de copie.

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

Vous pouvez copier un objet blob dans un fichier de la même façon. Si l’objet source est un objet blob, créez une SAP pour authentifier l’accès à cet objet blob pendant l’opération de copie.

Résolution des problèmes de stockage de fichiers à l’aide de métriques

Azure Storage Analytics prend en charge les métriques pour Stockage Fichier. Avec les données de métriques, vous pouvez suivre les demandes et diagnostiquer les problèmes.

Vous pouvez activer les métriques pour Stockage Fichier depuis le portail Azure, ou vous pouvez le faire depuis F# comme suit :

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

Étapes suivantes

Pour plus d’informations sur Azure Files, consultez ces liens.

Vidéos et articles conceptuels

Outils pris en charge pour le stockage de fichiers

Référence

Billets de blog :