Per la memorizzazione di file, piccoli e grandi che siano, Azure Storage è il servizio di riferimento sulla piattaforma Microsoft. E' altamente scalabile, affidabile, interamente gestito, ridondato su più regioni e praticamente con spazio infinito.
Può capitare di conseguenza di dover copiare o spostare blob da un container all'altro, magari anche di due account diversi, eventualmente di due regioni diverse. Finché ci troviamo a lavorare con pochi file può bastare l'utilizzo delle API o di tool come Azure Storage Explorer per fare il download e poi effettuare l'upload dei file. Quando però i file sono di qualche GB questa tecnica si dimostra per nulla efficace.
Viene in aiuto un tool di nome AzCopy che troviamo a questo indirizzo https://docs.microsoft.com/it-it/azure/storage/common/storage-use-azcopy, disponibile per Windows e Linux, il quale ottimizza questo processo sfruttando un API specifica dei blob che permette di copiare un contenuto con un trasferimento server, senza coinvolgere il client. Questo significa che il client non fa più da passacarte e ottimizziamo il traffico tra due container, anche su due account diversi.
Con il seguente script PowerShell possiamo quindi indicare l'account sorgente e quello destinatario per avviare un trasferimento.
$sourceStorageAccountName = "account1" $sourceStorageAccountKey = "Abc==" $sourceContainer = "source" $destStorageAccountName = "account2" $destStorageAccountKey = "Abc==" $destContainer = "dest" azcopy --source https://$sourceStorageAccountName.blob.core.windows.net/$sourceContainer --source-key $sourceStorageAccountKey --destination https://$destStorageAccountName.blob.core.windows.net/$destContainer --dest-key $destStorageAccountKey --recursive --resume --quiet
Con questa tecnica, se i file sono di grandi dimensioni, riusciamo a raggiungere anche velocità di trasferimento di 80/100 Mb/s, meno se i file sono di piccola dimensione.

Nella figura il tool è lanciato da Cloud Shell, il quale dispone già dello strumento installato. Dobbiamo solo prestare attenzione al fatto che la shell ha un timeout e chiudersi se non restiamo attivi sulla finestra. Per questo motivo il comando prima indicato usa le opzioni --resume e --quiet per riprendere il trasferimento da dove si è interrotto, senza chiedere conferme. Il tool utilizza infatti un journal per mantenere lo stato di trasferimento e poterlo riprendere.
Possiamo inoltre sfruttare altre API di PowerShell per trasferire tutti i container di un account interrogando prima i container presenti.
$sourceStorageAccountName = "account1" $sourceStorageAccountKey = "Abc==" $destStorageAccountName = "account2" $destStorageAccountKey = "Abc==" $sourceStorageAccount = New-AzureStorageContext -StorageAccountName $sourceStorageAccountName -StorageAccountKey $sourceStorageAccountKey $destStorageAccount = New-AzureStorageContext -StorageAccountName $destStorageAccountName -StorageAccountKey $destStorageAccountKey $containers = Get-AzureStorageContainer -Context $sourceStorageAccount foreach($container in $containers) { Write-Host "Copying container $($container.Name) from $($sourceStorageAccountName) to $($destStorageAccountName)" azcopy --source https://$sourceStorageAccountName.blob.core.windows.net/$($container.Name) --source-key $sourceStorageAccountKey --destination https://$destStorageAccountName.blob.core.windows.net/$($container.Name) --dest-key $destStorageAccountKey --recursive }
Lo script avvia un trasferimento per volta e se il container destinatario non esiste viene creato automaticamente dal tool stesso.
Occorre prestare attenzione, infine, alla posizione degli account sorgente e destinatario. Il traffico effettuato tra due diverse regioni, infatti, ha un costo, secondo quando previsto dalla piattaforma.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Utilizzare Azure AI Studio per testare i modelli AI
Utilizzare DeepSeek R1 con Azure AI
Cancellare una run di un workflow di GitHub
Filtrare i dati di una QuickGrid in Blazor con una drop down list
Utilizzare la funzione EF.Parameter per forzare la parametrizzazione di una costante con Entity Framework
Proteggere le risorse Azure con private link e private endpoints
Gestire i dati con Azure Cosmos DB Data Explorer
Configurare e gestire sidecar container in Azure App Service
Ottimizzare le pull con Artifact Cache di Azure Container Registry
Usare i servizi di Azure OpenAI e ChatGPT in ASP.NET Core con Semantic Kernel
La gestione della riconnessione al server di Blazor in .NET 9