Continuiamo con la nostra serie di articoli che, attraverso esempi pratici e semplificati, dimostrano l’applicazione di strumenti fondamentali nei rispettivi ambiti. Introduciamo alla realizzazione di uno Snapshot di un Disco Virtuale usando PowerShell su piattaforma Azure. Nel seguente laboratorio procederemo a creare uno immagine (snapshot) di un disco di una Macchina Virtuale assicurandoci di poter accedere all’immagine in qualsiasi momento. Utilizzeremo PowerShell per archiviare l’immagine nell’account di archiviazione:
Eseguiamo il log-in nella piattaforma Cloud Microsoft Azure e selezioniamo l’icona per accedere alla shell, quindi selezionare PowerShell esplodendo le opzioni avanzate. Utilizziamo un “account di archiviazione” già configurato per questo laboratorio, creiamo una nuova “condivisione file” chiamandola “fileshare”:
Adesso accediamo a tutte le risorse andando a reperire una serie di informazioni di cui necessitiamo per il nostro script. Abbiamo bisogno di:
- Il nome del Gruppo di Risorse a cui appartiene la macchina Virtuale di cui vogliamo fare lo snapshot;
- Il nome del disco della macchina virtuale di cui vogliamo fare lo snapshot,
- Il nome dell’account di archiviazione pre-configurato per questo laboratorio;
- Il valore della chiave “Key1” associata all’account di archiviazione che stiamo utilizzando.
Istanziamo le variabili mettendo insieme le informazioni reperite e aggiungiamo in coda ulteriori variabili necessarie. Infine stoppiamo la Macchina Virtuale:
Requesting a Cloud Shell.Succeeded.
Connecting terminal...
Welcome to Azure Cloud Shell
Type "az" to use Azure CLI
Type "help" to learn about Cloud Shell
MOTD: Save files to $home/clouddrive for persistence across sessions
VERBOSE: Authenticating to Azure ...
VERBOSE: Building your Azure drive ...
PS /home/cloud> $rg = "432-dcacabad-snapshot-an-azure-vm-disk-using-power"
PS /home/cloud> $diskname = "winVM_OsDisk_1_95986714a72b4222abf847c1230a011c"
PS /home/cloud> $storageAccountName = "stor2dmluz77uhdje"
PS /home/cloud> $storageAccountKey = "kETQpBZzSBCSQWdaamxqonG5FlGtnRGn29LtMWYlO1SWD2UQzULRH2uGx0XG96LpzG1OOEI2fUXfIEJlrQwdAA=="
$$ Variabili Aggiuntive:
PS /home/cloud> $storageContainerName = "container1"
PS /home/cloud> $destinationVHDFileName = "disk1.vhd"
PS /home/cloud> $useAzCopy = 1
PS /home/cloud> $vmName = "winVM"
PS /home/cloud> Stop-AzVM -ResourceGroupName $rg -Name $vmName
Virtual machine stopping operation
This cmdlet will stop the specified virtual machine. Do you want to continue?
[Y] Yes [N] No [S] Suspend [?] Help (default is "Y"): Y
OperationId : d638ebc0-d5d9-4a37-8771-c9da28d20ef2
Status : Succeeded
StartTime : 11/29/2020 7:47:16 PM
EndTime : 11/29/2020 7:48:33 PM
Error :
PS /home/cloud>
Adesso autorizziamo l’accesso al Disco:
$sas = Grant-AzDiskAccess -ResourceGroupName $rg -DiskName $diskName -DurationInSecond $sasExpiryDuration -Access Read
Creiamo il contesto di archiviazione per lo snapshot:
$destinationContext = New-AzStorageContext -StorageAccountName $storageAccountName -StorageAccountKey $storageAccountKey
Infine usando AzCopy e inviamo lo snapshot al “container1”:
PS /home/cloud> if($useAzCopy -eq 1)
>> {
>> $containerSASURI = New-AzStorageContainerSASToken -Context $destinationContext -ExpiryTime(get-date).AddSeconds($sasExpiryDuration) -FullUri -Name $storageContainerName -Permission rw
>> azcopy copy $sas.AccessSAS $containerSASURI
>>
>> }else{
>>
>> Start-AzStorageBlobCopy -AbsoluteUri $sas.AccessSAS -DestContainer $storageContainerName -DestContext $destinationContext -DestBlob $destinationVHDFileName
>> }
INFO: Scanning...
INFO: Failed to create one or more destination container(s). Your transfers may still succeed if the container already exists.
INFO: Any empty folders will not be processed, because source and/or destination doesn't have full folder support
Job e999cb77-5296-514c-70bc-50272cd21d95 has started
Log file is located at: /home/cloud/.azcopy/e999cb77-5296-514c-70bc-50272cd21d95.log
INFO: azcopy: A newer version 10.6.0 is available to download
100.0 %, 0 Done, 0 Failed, 1 Pending, 0 Skipped, 1 Total,
Job e999cb77-5296-514c-70bc-50272cd21d95 summary
Elapsed Time (Minutes): 1.3335
Number of File Transfers: 1
Number of Folder Property Transfers: 0
Total Number of Transfers: 1
Number of Transfers Completed: 1
Number of Transfers Failed: 0
Number of Transfers Skipped: 0
TotalBytesTransferred: 136367309312
Final Job Status: Completed
PS /home/cloud>