Создание снимка виртуальной машины в Azure

Следуя этой статье ( http://www.coreazure.com/snapshot-vms-in-azure-2/), я пытаюсь создать снимок виртуальной машины с помощью powershell(PS) из портала Azure. Это сценарий PS, который я создал, чтобы сделать снимок

workflow snapshot1
{
   $subName = 'XYZ'

   $cred = Get-AutomationPSCredential -Name "xyz@xyzgmail.onmicrosoft.com" 

   Add-AzureAccount -Credential $cred
   Set-AzureSubscription -SubscriptionName $subName -CurrentStorageAccount 'storagename'

   $serviceName = "a1smallvm"
   $vm = Get-AzureVM –ServiceName $serviceName –Name "a1smallvm"
   $storageContainer = "backups"

   InlineScript {
      # Create a storage for putting the backups of OSDisk & DataDisks 
      New-AzureStorageContainer -Name $Using:storageContainer -Permission off

      # Stop VM if running
      $Using:vm | Stop-AzureVM -StayProvisioned

      $vm = Get-AzureVM –ServiceName $Using:serviceName –Name "a1smallvm"

      $vmOSDisk = $vm | Get-AzureOSDisk
      $vmDataDisks = $vm | Get-AzureDataDisk
      Write-output "OSDisk: $vmOSDisk"
      $storageAccountName = $vmOSDisk.MediaLink.Host.Split(‘.’)[0]
      Write-output "Data Disk: $vmDataDisks"
      Write-output "StorageAccountName: $storageAccountName"

      $vmOSBlobName = $vmOSDisk.MediaLink.Segments[-1]

      $vmOSContainerName = $vmOSDisk.MediaLink.Segments[-1].Split(‘/’)[0]

      Write-output "vmOSBlobName: $vmOSBlobName"
      Write-output "vmOSContainerName: $vmOSContainerName"

      # Backup the osblob and oscontainer
      Start-AzureStorageBlobCopy -SrcContainer $vmOSContainerName -SrcBlob $vmOSBlobName -DestContainer $Using:storageContainer

      Get-AzureStorageBlobCopyState -Container $Using:storageContainer -Blob $vmOSBlobName -WaitForComplete

      # Backup the dataBlob and dataContainer
      ForEach ($vmDataDisk in $vmDataDisks) {

        $vmDataBlobName = $vmDataDisk.MediaLink.Segments[-1]

        $vmDataContainerName = $vmDataDisk.MediaLink.Segments[-2].Split(‘/’)[0]

        Start-AzureStorageBlobCopy -SrcContainer $vmDataContainerName -SrcBlob $vmDataBlobName -DestContainer backups -Force

        Get-AzureStorageBlobCopyState -Container backups -Blob $vmDataBlobName -WaitForComplete
      }    
  }    
}

Командлет

Start-AzureStorageBlobCopy -SrcContainer $vmOSContainerName -SrcBlob $vmOSBlobName -DestContainer $Using:storageContainer

выдает ошибку:

Error: Start-AzureStorageBlobCopy : Container name 'a1smallvm-a1smallvm-2015-08-11.vhd' is invalid. Valid names start and end with a lower case letter or a number and has in between a lower case letter, number or dash with no consecutive dashes and is 3 through 63 characters long.

Имя контейнера 'a1smallvm-a1smallvm-2015-08-11.vhd', которое я получаю, соответствует правильному формату именования, но все же почему оно выдает ошибку, сообщая, что имя недействительно. Виртуальная машина была создана на портале, это виртуальная машина типа А1, ОС CentOS "OpenLogic 6.5". Любая подсказка, что не так?

Ниже приведены результаты записи-вывода

OSDisk: Microsoft.WindowsAzure.Commands.ServiceManagement.Model.OSVirtualHardDisk
Data Disk: 
StorageAccountName: portalvhds14510n2y65vnh
vmOSBlobName: a1smallvm-a1smallvm-2015-08-11.vhd
vmOSContainerName: a1smallvm-a1smallvm-2015-08-11.vhd

Правильный сценарий: имя учетной записи хранения должно быть таким же, иначе нам придется добавить контекст целевой учетной записи хранения.

$storageAccountName = $vmOSDisk.MediaLink.Host.Split(‘.’)[0] Set-AzureSubscription -SubscriptionName $subName -CurrentStorageAccount '$storagenameAccountName'

И индекс для сегментов должен быть -2, а не -1 $vmOSContainerName = $vmOSDisk.MediaLink.Segments[-2].Split(‘/’)[0]

1 ответ

Я не эксперт по PowerShell (и я уверен, что есть лучшие способы сделать это), но вы могли бы сделать следующее:

$vmOSContainerName = $vmOSDisk.MediaLink.AbsolutePath.Split('/')[1]

Это будет выводить vhds это имя вашего контейнера BLOB-объектов.

Другие вопросы по тегам