Rozpoczynanie pracy z usługą Azure Files przy użyciu języka F#

Azure Files to usługa, która oferuje udziały plików w chmurze przy użyciu standardowego protokołu bloku komunikatów serwera (SMB). Obsługiwane są wersje 2.1 i 3.0 protokołu SMB. Dzięki usłudze Azure Files można migrować starsze aplikacje, które korzystają z udziałów plików na platformę Azure szybko i bez kosztowych ponownego zapisywania. Aplikacje uruchomione na maszynach wirtualnych lub w ramach usług w chmurze platformy Azure, a także na klientach lokalnych mogą instalować udziały plików w chmurze tak samo jak aplikacja na komputerze instalująca typowy udział SMB. Dowolna liczba składników aplikacji może następnie zainstalować udział magazynu plików i uzyskiwać do nich dostęp jednocześnie.

Aby zapoznać się z koncepcyjnym omówieniem magazynu plików, zobacz przewodnik platformy .NET dotyczący magazynu plików.

Wymagania wstępne

Aby użyć tego przewodnika, musisz najpierw utworzyć konto usługi Azure Storage. Będziesz również potrzebować klucza dostępu do magazynu dla tego konta.

Tworzenie skryptu języka F# i uruchamianie interaktywnego języka F#

Przykłady w tym artykule mogą być używane w aplikacji języka F# lub skryptu języka F#. Aby utworzyć skrypt języka F#, utwórz plik z .fsx rozszerzeniem, na przykład files.fsx, w środowisku deweloperów języka F#.

Jak wykonywać skrypty

Program F# Interactive, dotnet fsi, można uruchomić interaktywnie lub można go uruchomić z poziomu wiersza polecenia, aby uruchomić skrypt. Składnia wiersza polecenia to

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

Dodawanie pakietów w skry skrycie

Użyj #rnuget:package name polecenia , aby zainstalować Azure.Storage.Blobs pakiety i Azure.Storage.Common i Azure.Storage.Files i i open przestrzenie nazw. Na przykład

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

Dodawanie deklaracji przestrzeni nazw

Dodaj następujące instrukcje open na początku pliku 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

Uzyskiwanie parametrów połączenia

Na potrzeby tego samouczka będziesz potrzebować parametry połączenia usługi Azure Storage. Aby uzyskać więcej informacji na temat parametry połączenia, zobacz Konfigurowanie ciągów Połączenie ion magazynu.

W tym samouczku wprowadzisz parametry połączenia w skrycie, w następujący sposób:

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

Tworzenie klienta usługi plików

Typ ShareClient umożliwia programowe używanie plików przechowywanych w magazynie plików. Oto jeden ze sposobów tworzenia klienta usługi:

let share = ShareClient(storageConnString, "shareName")

Teraz możesz napisać kod, który odczytuje dane z i zapisuje dane w magazynie plików.

Tworzenie udziału plików

W tym przykładzie pokazano, jak utworzyć udział plików, jeśli jeszcze nie istnieje:

share.CreateIfNotExistsAsync()

Tworzenie katalogu

W tym miejscu uzyskasz katalog. Utworzysz, jeśli jeszcze nie istnieje.

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

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

Przekazywanie pliku do przykładowego katalogu

W tym przykładzie pokazano, jak przekazać plik do przykładowego katalogu.

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"

Pobieranie pliku do pliku lokalnego

W tym miejscu pobierzesz właśnie utworzony plik, dołączając zawartość do pliku lokalnego.

let download = file.Download()

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

copyTo "Save_Download_Path"

Ustawianie maksymalnego rozmiaru udziału plików

W poniższym przykładzie pokazano, jak sprawdzić bieżące użycie udziału oraz jak ustawić limit przydziału w udziale.

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

Generowanie sygnatury dostępu współdzielonego dla pliku lub udziału plików

Sygnaturę dostępu współdzielonego (SAS) można wygenerować dla udziału plików lub dla pojedynczego pliku. Można też utworzyć zasady dostępu współdzielonego w udziale plików na potrzeby zarządzania sygnaturami dostępu współdzielonego. Tworzenie uprawnień dostępu współdzielonego jest zalecane, ponieważ zapewnia sposób odwołowywania sygnatury dostępu współdzielonego, jeśli ma zostać naruszony.

W tym miejscu utworzysz uprawnienia dostępu współdzielonego w udziale, a następnie ustawisz te uprawnienia, aby zapewnić ograniczenia dla sygnatury dostępu współdzielonego w pliku w udziale.

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

Aby uzyskać więcej informacji na temat tworzenia i używania sygnatur dostępu współdzielonego, zobacz Using Shared Access Signatures (SAS) (Używanie sygnatur dostępu współdzielonego (SAS)) oraz Create and use a SAS with Blob storage (Tworzenie i używanie sygnatury dostępu współdzielonego w Magazynie obiektów Blob).

Kopiowanie plików

Plik można skopiować do innego pliku lub do obiektu blob albo do pliku. Jeśli kopiujesz obiekt blob do pliku lub pliku do obiektu blob, musisz użyć sygnatury dostępu współdzielonego (SAS), aby uwierzytelnić obiekt źródłowy, nawet jeśli kopiujesz w ramach tego samego konta magazynu.

Kopiowanie pliku do innego pliku

W tym miejscu skopiujesz plik do innego pliku w tym samym udziale. Ponieważ ta operacja kopiowania jest wykonywana w ramach tego samego konta magazynu, można użyć uwierzytelniania przy użyciu klucza wspólnego.

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

Kopiowanie pliku do obiektu blob

W tym miejscu utworzysz plik i skopiujesz go do obiektu blob na tym samym koncie magazynu. Sygnaturę dostępu współdzielonego dla pliku źródłowego, którego usługa używa do uwierzytelniania dostępu do pliku źródłowego podczas operacji kopiowania.

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

W ten sam sposób można skopiować obiekt blob do pliku. Jeśli obiekt źródłowy jest obiektem blob, utwórz sygnaturę dostępu współdzielonego w celu uwierzytelniania dostępu do tego obiektu blob podczas operacji kopiowania.

Rozwiązywanie problemów z usługą Magazyn plików przy użyciu metryk

Usługa Azure analityka magazynu obsługuje metryki dla magazynu plików. Dane metryk umożliwiają śledzenie żądań i diagnozowanie problemów.

Możesz włączyć metryki dla magazynu plików w witrynie Azure Portal lub wykonać je w języku F# w następujący sposób:

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

Następne kroki

Aby uzyskać więcej informacji na temat usługi Azure Files, zobacz te linki.

Artykuły koncepcyjne i filmy

Narzędzia dostępne dla usługi Magazyn plików

Odwołanie

Wpisy w blogu