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
Sfruttare al massimo i topic space di Event Grid MQTT
Paginare i risultati con QuickGrid in Blazor
Installare le Web App site extension tramite una pipeline di Azure DevOps
Sfruttare lo stream rendering per le pagine statiche di Blazor 8
Migrate and Modernize your .NET Applications on Azure
Eseguire script pre e post esecuzione di un workflow di GitHub
Utilizzare il nuovo modello GPT-4o con Azure OpenAI
Utilizzare Model as a Service su Microsoft Azure
Utilizzare il trigger SQL con le Azure Function
Usare le navigation property in QuickGrid di Blazor
Usare il colore CSS per migliorare lo stile della pagina
Gestire eccezioni nei plugin di Semantic Kernel in ASP.NET Core Web API
I più letti di oggi
- Utilizzare angular-cli per creare una direttiva in #angular2 https://aspit.co/bft di @sm15455
- le impostazioni sono su #windowslive, quindi basta il liveid per avere tutte le ... http://aspitalia.com/build-win8 #BldWin
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- la nostra app per #win8 è nello store che vi aspetta da qualche mese: provatela! contenuti, forum e push! https://aspit.co/pd