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
Semplificare il deployment di siti statici con Azure Static Web App
Evitare la command injection in un workflow di GitHub
Utilizzare la libreria Benchmark.NET per misurare le performance
Caricare un asset come parte di una release con un workflow di GitHub
Ricevere avvisi su metriche dei server Azure Arc
Mostrare una preview durante l'upload di un'immagine in Blazor
Miglioramenti alla leggibilità delle Media Query con le specifiche di livello 4
Utilizzare .NET Framework con le Azure Function in modalità isolata
Controllare se un branch esiste nel remote con un workflow di GitHub
Utilizzare flat e flatMap per appiattire array innestati in array
Controllare gli accessi IP alle app con Azure Container Apps
Migliorare la scalabilità di ASP.NET Core 7 grazie all'output cache
I più letti di oggi
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- .NET Conference Italia 2022 - Milano e Online
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!