Introducción a Azure Files mediante F#

Azure Files es un servicio que ofrece recursos compartidos de archivos en la nube mediante el protocolo Bloque de mensajes del servidor (SMB) estándar. Se admiten SMB 2.1 y SMB 3.0. Con Azure Files, puede migrar aplicaciones heredadas basadas en recursos compartidos de archivos a Azure con rapidez y sin necesidad de costosas reescrituras. Las aplicaciones que se ejecutan en máquinas virtuales de Azure o en servicios en la nube o desde clientes locales pueden montar un recurso compartido de archivos en la nube, igual que una aplicación de escritorio monta un recurso compartido SMB típico. Cualquier número de componentes de aplicación puede montar y acceder simultáneamente al recurso compartido de almacenamiento de archivos.

Para información general conceptual sobre el almacenamiento de archivos, consulte la Guía de .NET para el almacenamiento de archivos.

Requisitos previos

Para usar esta guía, primero debe crear una cuenta de almacenamiento de Azure. También necesitará la clave de acceso de almacenamiento para esta cuenta.

Creación de un script de F# e inicio interactivo de F#

Los ejemplos de este artículo se pueden usar en una aplicación de F# o en un script de F#. Para crear un script de F#, cree un archivo con la extensión .fsx, por ejemplo files.fsx, en el entorno de desarrollo de F#.

Ejecución de los scripts

F# interactivo, dotnet fsi, se puede iniciar de forma interactiva o desde la línea de comandos para ejecutar un script. La sintaxis de línea de comandos es

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

Incorporación de paquetes en un script

Use #rnuget:package name para instalar los paquetes Azure.Storage.Blobs, Azure.Storage.Common y Azure.Storage.Files y los espacios de nombres open. Por ejemplo,

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

Incorporación de declaraciones de espacio de nombres

Agregue las siguientes instrucciones open en la parte superior del archivo 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

Obtención de la cadena de conexión

Para este tutorial necesitará una cadena de conexión de Azure Storage. Para más información sobre las cadenas de conexión, consulte Configuración de cadenas de conexión de almacenamiento.

En el tutorial, escribirá la cadena de conexión en el script, de la siguiente manera:

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

Creación del cliente de servicio de archivos

El tipo ShareClient permite usar archivos almacenados mediante programación en File Storage. Esta es una forma de crear el cliente de servicio:

let share = ShareClient(storageConnString, "shareName")

Ahora, ya puede escribir código que lee datos de File Storage y los escribe en este.

Creación de un recurso compartido de archivos

En este ejemplo se muestra cómo crear un recurso compartido de archivos si todavía no existe:

share.CreateIfNotExistsAsync()

Creación de un directorio

Aquí obtendrá el directorio. Creelo si no aún no existe.

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

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

Carga de un archivo en el directorio de ejemplo

En este ejemplo se muestra cómo cargar un archivo en el directorio de ejemplo.

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"

Descarga de un archivo en un archivo local

Aquí descargará el archivo que acaba de crear, que anexará el contenido a un archivo local.

let download = file.Download()

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

copyTo "Save_Download_Path"

Establecer el tamaño máximo para un recurso compartido de archivos

En el ejemplo siguiente se muestra cómo comprobar el uso actual de un recurso compartido y cómo establecer la cuota para el recurso compartido.

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

Generar una firma de acceso compartido para un archivo o recurso compartido de archivos

Puede generar una firma de acceso compartido (SAS) para un recurso compartido de archivos o para un archivo individual. También puede crear una directiva de acceso compartido en un recurso compartido de archivos para administrar firmas de acceso compartido. Se recomienda la creación de permisos de acceso compartido, ya que ofrece un medio de revocar la SAS si esta se encuentra en peligro.

Aquí, se crean permisos de acceso compartido en un recurso compartido y, luego, se establecen esos permisos para ofrecer las restricciones para una SAS en un archivo del recurso compartido.

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

Para más información sobre la creación y el uso de firmas de acceso compartido, consulte Uso de firmas de acceso compartido (SAS) y Creación y uso de una SAS con Blob Storage.

Copiar archivos

Puede copiar un archivo en otro o en un blob, o bien un blob en un archivo. Si va a copiar un blob en un archivo, o un archivo en un blob, debe usar una firma de acceso compartido (SAS) para autenticar el objeto de origen, incluso si está copiando en la misma cuenta de almacenamiento.

Copiar un archivo en otro

Aquí, copiará un archivo en otro archivo del mismo recurso compartido. Dado que en esta operación de copia se copia entre archivos de la misma cuenta de almacenamiento, puede usar la autenticación de clave compartida para realizar la copia.

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

Copiar un archivo en un blob

Aquí, creará un archivo y lo copiará en un blob en la misma cuenta de almacenamiento. Crea una SAS para el archivo de origen que el servicio usa para autenticar el acceso al archivo de origen durante la operación de copia.

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

Puede copiar un blob en un archivo de la misma manera. Si el objeto de origen es un blob, cree una SAS para autenticar el acceso a dicho blob durante la operación de copia.

Solución de problemas de almacenamiento de archivos mediante métricas

Azure Storage Analytics admite métricas para File Storage. Con los datos de las métricas, es posible seguir paso a paso las solicitudes y diagnosticar problemas.

Puede habilitar las métricas para File Storage desde Azure Portal, o puede hacerlo desde F# de la manera siguiente:

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

Pasos siguientes

Para más información sobre Azure Files, consulte estos vínculos.

Artículos y vídeos conceptuales

Compatibilidad de herramientas con el almacenamiento de archivos

Referencia

Publicaciones de blog