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
Creare comandi nella dashboard .NET Aspire
Abilitare .NET 10 su Azure App Service e Azure Functions
Esporre tool MCP con Azure Functions
Semplificare i deployment con le label in Azure Container App
Controllare la telemetria con .NET Aspire
Configurare OpenAI in .NET Aspire
Utilizzare Locust con Azure Load Testing
Gestire gli errori nelle Promise JavaScript con try()
Integrare SQL Server in un progetto .NET Aspire
Generare una User Delegation SAS in .NET per Azure Blob Storage
Gestire il routing HTTP in Azure Container App
Eseguire query in contemporanea con EF
I più letti di oggi
- Effettuare il multi-checkout in linea nelle pipeline di Azure DevOps
- Le DirectInk API nella Universal Windows Platform
- Sfruttare una CDN con i bundle di ASP.NET
- Esaminare documenti XML con namespace utilizzando LINQ to XML
- Alleggerire le applicazioni WPF sfruttando gli oggetti Freezable
- Effetto turnstile su tutte le pagine con il Windows Phone Toolkit
- Gli oggetti CallOut di Expression Blend 4.0
- Inserire le news di Punto Informatico nel proprio sito


