Gegevens overdragen met de bibliotheek voor gegevensverplaatsing

Notitie

Dit artikel bevat richtlijnen voor het werken met versie 2.0.XX van de Azure Storage-bibliotheek voor gegevensverplaatsing. Versie 2.0.XX bevindt zich momenteel in de onderhoudsmodus en de bibliotheek ontvangt alleen oplossingen voor gegevensintegriteit en beveiligingsproblemen. Er worden geen nieuwe functionaliteit of functies toegevoegd en nieuwe versies van de opslagservice worden niet ondersteund door de bibliotheek.

Bètaversies van een moderne bibliotheek voor gegevensverplaatsing zijn momenteel in ontwikkeling. Zie de Algemene clientbibliotheek voor Azure Storage-gegevensverplaatsing voor .NET op GitHub voor meer informatie.

De Azure Storage-bibliotheek voor gegevensverplaatsing is een platformoverschrijdende open source-bibliotheek die is ontworpen voor het uploaden, downloaden en kopiëren van blobs en bestanden. De bibliotheek voor gegevensverplaatsing biedt handige methoden die niet beschikbaar zijn in de Azure Storage-clientbibliotheek voor .NET. Deze methoden bieden de mogelijkheid om het aantal parallelle bewerkingen in te stellen, de voortgang van de overdracht bij te houden, eenvoudig een geannuleerde overdracht te hervatten en nog veel meer.

Deze bibliotheek maakt ook gebruik van .NET Core, wat betekent dat u deze kunt gebruiken bij het bouwen van .NET-apps voor Windows, Linux en macOS. Raadpleeg de .NET Core-documentatie voor meer informatie over .NET Core. Deze bibliotheek werkt ook voor traditionele .NET Framework-apps voor Windows.

In dit document ziet u hoe u een .NET Core-consoletoepassing maakt die wordt uitgevoerd in Windows, Linux en macOS en de volgende scenario's uitvoert:

  • Bestanden en mappen uploaden naar Blob Storage.
  • Definieer het aantal parallelle bewerkingen bij het overdragen van gegevens.
  • Voortgang van gegevensoverdracht bijhouden.
  • Geannuleerde gegevensoverdracht hervatten.
  • Kopieer het bestand van de URL naar Blob Storage.
  • Kopiëren van Blob Storage naar Blob Storage.

Vereisten

Instellingen

  1. Ga naar de .NET Core-installatiehandleiding om de .NET Core SDK te installeren. Wanneer u uw omgeving selecteert, kiest u de opdrachtregeloptie.
  2. Maak vanaf de opdrachtregel een map voor uw project. Navigeer naar deze map en typ dotnet new console -o <sample-project-name> vervolgens om een C#-consoleproject te maken.
  3. Open deze map in Visual Studio Code. Deze stap kan snel worden uitgevoerd via de opdrachtregel door in Windows te typen code . .
  4. Installeer de C#-extensie vanuit Visual Studio Code Marketplace. Start Visual Studio Code opnieuw.
  5. Op dit moment ziet u twee prompts. Een is voor het toevoegen van 'vereiste assets om te bouwen en fouten op te sporen'. Klik op Ja. Een andere prompt is het herstellen van onopgeloste afhankelijkheden. Klik op Herstellen.
  6. Wijzig launch.json onder .vscode om externe terminal als console te gebruiken. Deze instelling moet worden gelezen als "console": "externalTerminal"
  7. Met Visual Studio Code kunt u fouten opsporen in .NET Core-toepassingen. Druk F5 om uw toepassing uit te voeren en te controleren of uw installatie werkt. Als het goed is, ziet u dat 'Hallo wereld!' in de console wordt afgedrukt.

De bibliotheek voor gegevensverplaatsing toevoegen aan uw project

  1. Voeg de nieuwste versie van de bibliotheek voor gegevensverplaatsing toe aan de dependencies sectie van uw <project-name>.csproj bestand. Op het moment van schrijven is deze versie "Microsoft.Azure.Storage.DataMovement": "0.6.2"
  2. Er moet een prompt worden weergegeven om uw project te herstellen. Klik op de knop Herstellen. U kunt uw project ook herstellen vanaf de opdrachtregel door de opdracht dotnet restore in de hoofdmap van de projectmap te typen.

Wijzigen <project-name>.csproj:

<Project Sdk="Microsoft.NET.Sdk">
    <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>netcoreapp2.0</TargetFramework>
    </PropertyGroup>
    <ItemGroup>
        <PackageReference Include="Microsoft.Azure.Storage.DataMovement" Version="0.6.2" />
        </ItemGroup>
    </Project>

Het skelet van uw toepassing instellen

Het eerste wat we doen is het instellen van de 'skeleton'-code van onze toepassing. Deze code vraagt ons om een opslagaccountnaam en accountsleutel en gebruikt deze referenties om een CloudStorageAccount object te maken. Dit object wordt gebruikt voor interactie met ons Opslagaccount in alle overdrachtsscenario's. De code vraagt ons ook om het type overdrachtsbewerking te kiezen dat we willen uitvoeren.

Wijzigen Program.cs:

using System;
using System.Threading;
using System.Threading.Tasks;
using System.Diagnostics;
using Microsoft.Azure.Storage;
using Microsoft.Azure.Storage.Blob;
using Microsoft.Azure.Storage.DataMovement;

namespace DMLibSample
{
    public class Program
    {
        public static void Main()
        {
            Console.WriteLine("Enter Storage account name:");
            string accountName = Console.ReadLine();

            Console.WriteLine("\nEnter Storage account key:");
            string accountKey = Console.ReadLine();

            string storageConnectionString = "DefaultEndpointsProtocol=https;AccountName=" + accountName + ";AccountKey=" + accountKey;
            CloudStorageAccount account = CloudStorageAccount.Parse(storageConnectionString);

            ExecuteChoice(account);
        }

        public static void ExecuteChoice(CloudStorageAccount account)
        {
            Console.WriteLine("\nWhat type of transfer would you like to execute?\n1. Local file --> Azure Blob\n2. Local directory --> Azure Blob directory\n3. URL (e.g. Amazon S3 file) --> Azure Blob\n4. Azure Blob --> Azure Blob");
            int choice = int.Parse(Console.ReadLine());

            if(choice == 1)
            {
                TransferLocalFileToAzureBlob(account).Wait();
            }
            else if(choice == 2)
            {
                TransferLocalDirectoryToAzureBlobDirectory(account).Wait();
            }
            else if(choice == 3)
            {
                TransferUrlToAzureBlob(account).Wait();
            }
            else if(choice == 4)
            {
                TransferAzureBlobToAzureBlob(account).Wait();
            }
        }

        public static async Task TransferLocalFileToAzureBlob(CloudStorageAccount account)
        {

        }

        public static async Task TransferLocalDirectoryToAzureBlobDirectory(CloudStorageAccount account)
        {

        }

        public static async Task TransferUrlToAzureBlob(CloudStorageAccount account)
        {

        }

        public static async Task TransferAzureBlobToAzureBlob(CloudStorageAccount account)
        {

        }
    }
}

Een lokaal bestand uploaden naar een blob

Voeg de methoden GetSourcePath toe en GetBlob aan Program.cs:

public static string GetSourcePath()
{
    Console.WriteLine("\nProvide path for source:");
    string sourcePath = Console.ReadLine();

    return sourcePath;
}

public static CloudBlockBlob GetBlob(CloudStorageAccount account)
{
    CloudBlobClient blobClient = account.CreateCloudBlobClient();

    Console.WriteLine("\nProvide name of Blob container:");
    string containerName = Console.ReadLine();
    CloudBlobContainer container = blobClient.GetContainerReference(containerName);
    container.CreateIfNotExistsAsync().Wait();

    Console.WriteLine("\nProvide name of new Blob:");
    string blobName = Console.ReadLine();
    CloudBlockBlob blob = container.GetBlockBlobReference(blobName);

    return blob;
}

Wijzig de TransferLocalFileToAzureBlob methode:

public static async Task TransferLocalFileToAzureBlob(CloudStorageAccount account)
{
    string localFilePath = GetSourcePath();
    CloudBlockBlob blob = GetBlob(account);
    Console.WriteLine("\nTransfer started...");
    await TransferManager.UploadAsync(localFilePath, blob);
    Console.WriteLine("\nTransfer operation complete.");
    ExecuteChoice(account);
}

Deze code vraagt ons om het pad naar een lokaal bestand, de naam van een nieuwe of bestaande container en de naam van een nieuwe blob. De TransferManager.UploadAsync methode voert het uploaden uit met behulp van deze informatie.

Druk F5 om uw toepassing uit te voeren. U kunt controleren of het uploaden is uitgevoerd door uw opslagaccount te bekijken met Microsoft Azure Storage Explorer.

Het aantal parallelle bewerkingen instellen

Een functie die wordt aangeboden door de bibliotheek voor gegevensverplaatsing is de mogelijkheid om het aantal parallelle bewerkingen in te stellen om de doorvoer van gegevensoverdracht te verhogen. De bibliotheek voor gegevensverplaatsing stelt standaard het aantal parallelle bewerkingen in op 8 * het aantal kernen op uw computer.

Houd er rekening mee dat veel parallelle bewerkingen in een omgeving met lage bandbreedte de netwerkverbinding kunnen overbelasten en dat bewerkingen niet volledig kunnen worden voltooid. U moet experimenteren met deze instelling om te bepalen wat het beste werkt op basis van uw beschikbare netwerkbandbreedte.

We gaan code toevoegen waarmee we het aantal parallelle bewerkingen kunnen instellen. Laten we ook code toevoegen die tijd kost voordat de overdracht is voltooid.

Voeg een SetNumberOfParallelOperations methode toe aan Program.cs:

public static void SetNumberOfParallelOperations()
{
    Console.WriteLine("\nHow many parallel operations would you like to use?");
    string parallelOperations = Console.ReadLine();
    TransferManager.Configurations.ParallelOperations = int.Parse(parallelOperations);
}

Wijzig de ExecuteChoice te gebruiken SetNumberOfParallelOperationsmethode:

public static void ExecuteChoice(CloudStorageAccount account)
{
    Console.WriteLine("\nWhat type of transfer would you like to execute?\n1. Local file --> Azure Blob\n2. Local directory --> Azure Blob directory\n3. URL (e.g. Amazon S3 file) --> Azure Blob\n4. Azure Blob --> Azure Blob");
    int choice = int.Parse(Console.ReadLine());

    SetNumberOfParallelOperations();

    if(choice == 1)
    {
        TransferLocalFileToAzureBlob(account).Wait();
    }
    else if(choice == 2)
    {
        TransferLocalDirectoryToAzureBlobDirectory(account).Wait();
    }
    else if(choice == 3)
    {
        TransferUrlToAzureBlob(account).Wait();
    }
    else if(choice == 4)
    {
        TransferAzureBlobToAzureBlob(account).Wait();
    }
}

Wijzig de TransferLocalFileToAzureBlob methode om een timer te gebruiken:

public static async Task TransferLocalFileToAzureBlob(CloudStorageAccount account)
{
    string localFilePath = GetSourcePath();
    CloudBlockBlob blob = GetBlob(account);
    Console.WriteLine("\nTransfer started...");
    Stopwatch stopWatch = Stopwatch.StartNew();
    await TransferManager.UploadAsync(localFilePath, blob);
    stopWatch.Stop();
    Console.WriteLine("\nTransfer operation completed in " + stopWatch.Elapsed.TotalSeconds + " seconds.");
    ExecuteChoice(account);
}

Voortgang van overdracht bijhouden

Weten hoe lang het duurde voordat de gegevens zijn overgedragen, is nuttig. Het is echter nog beter om de voortgang van de overdracht tijdens de overdrachtsbewerking te kunnen zien. Om dit scenario te bereiken, moeten we een TransferContext object maken. Het TransferContext object heeft twee vormen: SingleTransferContext en DirectoryTransferContext. De eerste is voor het overdragen van één bestand en de laatste is voor het overdragen van een map met bestanden.

Voeg de methoden GetSingleTransferContext toe en GetDirectoryTransferContext aan Program.cs:

public static SingleTransferContext GetSingleTransferContext(TransferCheckpoint checkpoint)
{
    SingleTransferContext context = new SingleTransferContext(checkpoint);

    context.ProgressHandler = new Progress<TransferStatus>((progress) =>
    {
        Console.Write("\rBytes transferred: {0}", progress.BytesTransferred );
    });

    return context;
}

public static DirectoryTransferContext GetDirectoryTransferContext(TransferCheckpoint checkpoint)
{
    DirectoryTransferContext context = new DirectoryTransferContext(checkpoint);

    context.ProgressHandler = new Progress<TransferStatus>((progress) =>
    {
        Console.Write("\rBytes transferred: {0}", progress.BytesTransferred );
    });

    return context;
}

Wijzig de TransferLocalFileToAzureBlob te gebruiken GetSingleTransferContextmethode:

public static async Task TransferLocalFileToAzureBlob(CloudStorageAccount account)
{
    string localFilePath = GetSourcePath();
    CloudBlockBlob blob = GetBlob(account);
    TransferCheckpoint checkpoint = null;
    SingleTransferContext context = GetSingleTransferContext(checkpoint);
    Console.WriteLine("\nTransfer started...\n");
    Stopwatch stopWatch = Stopwatch.StartNew();
    await TransferManager.UploadAsync(localFilePath, blob, null, context);
    stopWatch.Stop();
    Console.WriteLine("\nTransfer operation completed in " + stopWatch.Elapsed.TotalSeconds + " seconds.");
    ExecuteChoice(account);
}

Een geannuleerde overdracht hervatten

Een andere handige functie van de bibliotheek voor gegevensverplaatsing is de mogelijkheid om een geannuleerde overdracht te hervatten. We gaan code toevoegen waarmee we de overdracht tijdelijk kunnen annuleren door te typen cen de overdracht 3 seconden later te hervatten.

Wijzigen TransferLocalFileToAzureBlob:

public static async Task TransferLocalFileToAzureBlob(CloudStorageAccount account)
{
    string localFilePath = GetSourcePath();
    CloudBlockBlob blob = GetBlob(account);
    TransferCheckpoint checkpoint = null;
    SingleTransferContext context = GetSingleTransferContext(checkpoint);
    CancellationTokenSource cancellationSource = new CancellationTokenSource();
    Console.WriteLine("\nTransfer started...\nPress 'c' to temporarily cancel your transfer...\n");

    Stopwatch stopWatch = Stopwatch.StartNew();
    Task task;
    ConsoleKeyInfo keyinfo;
    try
    {
        task = TransferManager.UploadAsync(localFilePath, blob, null, context, cancellationSource.Token);
        while(!task.IsCompleted)
        {
            if(Console.KeyAvailable)
            {
                keyinfo = Console.ReadKey(true);
                if(keyinfo.Key == ConsoleKey.C)
                {
                    cancellationSource.Cancel();
                }
            }
        }
        await task;
    }
    catch(Exception e)
    {
        Console.WriteLine("\nThe transfer is canceled: {0}", e.Message);
    }

    if(cancellationSource.IsCancellationRequested)
    {
        Console.WriteLine("\nTransfer will resume in 3 seconds...");
        Thread.Sleep(3000);
        checkpoint = context.LastCheckpoint;
        context = GetSingleTransferContext(checkpoint);
        Console.WriteLine("\nResuming transfer...\n");
        await TransferManager.UploadAsync(localFilePath, blob, null, context);
    }

    stopWatch.Stop();
    Console.WriteLine("\nTransfer operation completed in " + stopWatch.Elapsed.TotalSeconds + " seconds.");
    ExecuteChoice(account);
}

Tot nu toe is onze checkpoint waarde altijd ingesteld op null. Als we de overdracht annuleren, halen we het laatste controlepunt van onze overdracht op, dan gebruiken we dit nieuwe controlepunt in onze overdrachtscontext.

Een lokale map overdragen naar Blob Storage

Het zou teleurstellend zijn als de bibliotheek voor gegevensverplaatsing slechts één bestand tegelijk kan overdragen. Gelukkig is dit niet het geval. De bibliotheek voor gegevensverplaatsing biedt de mogelijkheid om een map met bestanden en alle bijbehorende submappen over te dragen. Laten we code toevoegen waarmee we dat kunnen doen.

Voeg eerst de methode GetBlobDirectory toe aan Program.cs:

public static CloudBlobDirectory GetBlobDirectory(CloudStorageAccount account)
{
    CloudBlobClient blobClient = account.CreateCloudBlobClient();

    Console.WriteLine("\nProvide name of Blob container. This can be a new or existing Blob container:");
    string containerName = Console.ReadLine();
    CloudBlobContainer container = blobClient.GetContainerReference(containerName);
    container.CreateIfNotExistsAsync().Wait();

    CloudBlobDirectory blobDirectory = container.GetDirectoryReference("");

    return blobDirectory;
}

Wijzig TransferLocalDirectoryToAzureBlobDirectoryvervolgens:

public static async Task TransferLocalDirectoryToAzureBlobDirectory(CloudStorageAccount account)
{
    string localDirectoryPath = GetSourcePath();
    CloudBlobDirectory blobDirectory = GetBlobDirectory(account);
    TransferCheckpoint checkpoint = null;
    DirectoryTransferContext context = GetDirectoryTransferContext(checkpoint);
    CancellationTokenSource cancellationSource = new CancellationTokenSource();
    Console.WriteLine("\nTransfer started...\nPress 'c' to temporarily cancel your transfer...\n");

    Stopwatch stopWatch = Stopwatch.StartNew();
    Task task;
    ConsoleKeyInfo keyinfo;
    UploadDirectoryOptions options = new UploadDirectoryOptions()
    {
        Recursive = true
    };

    try
    {
        task = TransferManager.UploadDirectoryAsync(localDirectoryPath, blobDirectory, options, context, cancellationSource.Token);
        while(!task.IsCompleted)
        {
            if(Console.KeyAvailable)
            {
                keyinfo = Console.ReadKey(true);
                if(keyinfo.Key == ConsoleKey.C)
                {
                    cancellationSource.Cancel();
                }
            }
        }
        await task;
    }
    catch(Exception e)
    {
        Console.WriteLine("\nThe transfer is canceled: {0}", e.Message);
    }

    if(cancellationSource.IsCancellationRequested)
    {
        Console.WriteLine("\nTransfer will resume in 3 seconds...");
        Thread.Sleep(3000);
        checkpoint = context.LastCheckpoint;
        context = GetDirectoryTransferContext(checkpoint);
        Console.WriteLine("\nResuming transfer...\n");
        await TransferManager.UploadDirectoryAsync(localDirectoryPath, blobDirectory, options, context);
    }

    stopWatch.Stop();
    Console.WriteLine("\nTransfer operation completed in " + stopWatch.Elapsed.TotalSeconds + " seconds.");
    ExecuteChoice(account);
}

Er zijn enkele verschillen tussen deze methode en de methode voor het uploaden van één bestand. We gebruiken TransferManager.UploadDirectoryAsync nu de methode die getDirectoryTransferContext we eerder hebben gemaakt. Daarnaast bieden we nu een options waarde voor onze uploadbewerking, waarmee we kunnen aangeven dat we submappen in onze upload willen opnemen.

Een bestand kopiëren van URL naar een blob

Nu gaan we code toevoegen waarmee we een bestand van een URL naar een Azure Blob kunnen kopiëren.

Wijzigen TransferUrlToAzureBlob:

public static async Task TransferUrlToAzureBlob(CloudStorageAccount account)
{
    Uri uri = new Uri(GetSourcePath());
    CloudBlockBlob blob = GetBlob(account);
    TransferCheckpoint checkpoint = null;
    SingleTransferContext context = GetSingleTransferContext(checkpoint);
    CancellationTokenSource cancellationSource = new CancellationTokenSource();
    Console.WriteLine("\nTransfer started...\nPress 'c' to temporarily cancel your transfer...\n");

    Stopwatch stopWatch = Stopwatch.StartNew();
    Task task;
    ConsoleKeyInfo keyinfo;
    try
    {
        task = TransferManager.CopyAsync(uri, blob, CopyMethod.ServiceSideAsyncCopy, null, context, cancellationSource.Token);
        while(!task.IsCompleted)
        {
            if(Console.KeyAvailable)
            {
                keyinfo = Console.ReadKey(true);
                if(keyinfo.Key == ConsoleKey.C)
                {
                    cancellationSource.Cancel();
                }
            }
        }
        await task;
    }
    catch(Exception e)
    {
        Console.WriteLine("\nThe transfer is canceled: {0}", e.Message);
    }

    if(cancellationSource.IsCancellationRequested)
    {
        Console.WriteLine("\nTransfer will resume in 3 seconds...");
        Thread.Sleep(3000);
        checkpoint = context.LastCheckpoint;
        context = GetSingleTransferContext(checkpoint);
        Console.WriteLine("\nResuming transfer...\n");
        await TransferManager.CopyAsync(uri, blob, CopyMethod.ServiceSideAsyncCopy, null, context, cancellationSource.Token);
    }

    stopWatch.Stop();
    Console.WriteLine("\nTransfer operation completed in " + stopWatch.Elapsed.TotalSeconds + " seconds.");
    ExecuteChoice(account);
}

Een belangrijke use case voor deze functie is wanneer u gegevens van een andere cloudservice (bijvoorbeeld AWS) naar Azure moet verplaatsen. Zolang u een URL hebt die u toegang geeft tot de resource, kunt u die resource eenvoudig met behulp van de TransferManager.CopyAsync methode naar Azure Blobs verplaatsen. Deze methode introduceert ook een CopyMethod-parameter . In de volgende tabel ziet u de beschikbare opties voor deze parameter:

De naam van lid Weergegeven als Beschrijving
SyncCopy 0 Download gegevens van bron naar geheugen en upload de gegevens van het geheugen naar de bestemming. Momenteel alleen beschikbaar voor het kopiëren van de ene Azure Storage-resource naar de andere.
ServiceSideAsyncCopy 1 Verzend een aanvraag voor het kopiëren van een start naar Azure Storage om het kopiëren uit te voeren; controleer de voortgang van de kopieerbewerking totdat het kopiëren is voltooid.
ServiceSideSyncCopy 2 Kopieer inhoud van elk segment met Put Block From URL, Append Block From URL of Put Page From URL.

Een blob kopiëren

Een andere functie die uniek wordt geleverd door de bibliotheek voor gegevensverplaatsing is de mogelijkheid om van de ene Azure Storage-resource naar de andere te kopiëren.

Wijzigen TransferAzureBlobToAzureBlob:

public static async Task TransferAzureBlobToAzureBlob(CloudStorageAccount account)
{
    CloudBlockBlob sourceBlob = GetBlob(account);
    CloudBlockBlob destinationBlob = GetBlob(account);
    TransferCheckpoint checkpoint = null;
    SingleTransferContext context = GetSingleTransferContext(checkpoint);
    CancellationTokenSource cancellationSource = new CancellationTokenSource();
    Console.WriteLine("\nTransfer started...\nPress 'c' to temporarily cancel your transfer...\n");

    Stopwatch stopWatch = Stopwatch.StartNew();
    Task task;
    ConsoleKeyInfo keyinfo;
    try
    {
        task = TransferManager.CopyAsync(sourceBlob, destinationBlob, CopyMethod.SyncCopy, null, context, cancellationSource.Token);
        while(!task.IsCompleted)
        {
            if(Console.KeyAvailable)
            {
                keyinfo = Console.ReadKey(true);
                if(keyinfo.Key == ConsoleKey.C)
                {
                    cancellationSource.Cancel();
                }
            }
        }
        await task;
    }
    catch(Exception e)
    {
        Console.WriteLine("\nThe transfer is canceled: {0}", e.Message);
    }

    if(cancellationSource.IsCancellationRequested)
    {
        Console.WriteLine("\nTransfer will resume in 3 seconds...");
        Thread.Sleep(3000);
        checkpoint = context.LastCheckpoint;
        context = GetSingleTransferContext(checkpoint);
        Console.WriteLine("\nResuming transfer...\n");
        await TransferManager.CopyAsync(sourceBlob, destinationBlob, CopyMethod.SyncCopy, null, context, cancellationSource.Token);
    }

    stopWatch.Stop();
    Console.WriteLine("\nTransfer operation completed in " + stopWatch.Elapsed.TotalSeconds + " seconds.");
    ExecuteChoice(account);
}

In dit voorbeeld stellen we de booleaanse parameter in TransferManager.CopyAsync om aan te CopyMethod.SyncCopy geven dat we een synchrone kopie willen uitvoeren. Dit betekent dat de resource eerst naar onze lokale computer wordt gedownload en vervolgens naar Azure Blob wordt geüpload. De synchrone kopieeroptie is een uitstekende manier om ervoor te zorgen dat uw kopieerbewerking een consistente snelheid heeft. De snelheid van een asynchrone kopie aan de serverzijde is daarentegen afhankelijk van de beschikbare netwerkbandbreedte op de server, die kan fluctueren. Synchrone kopie kan echter extra kosten voor uitgaand verkeer genereren in vergelijking met asynchrone kopie. De aanbevolen methode is om synchrone kopie te gebruiken in een Azure-VM die zich in dezelfde regio bevindt als uw bronopslagaccount om uitgaande kosten te voorkomen.

De toepassing voor gegevensverplaatsing is nu voltooid. Het volledige codevoorbeeld is beschikbaar op GitHub.

Volgende stappen

Referentiedocumentatie voor azure Storage-bibliotheek voor gegevensverplaatsing.

Tip

Azure Blob Storage-resources beheren met Azure Storage Explorer. Azure Storage Explorer is een gratis, zelfstandige app van Microsoft waarmee u Azure Blob Storage-resources kunt beheren. Met Behulp van Azure Storage Explorer kunt u visueel blobcontainers en -blobs maken, lezen, bijwerken en verwijderen, en de toegang tot uw blobs-containers en -blobs beheren.