Действительно ли возможно переместить образ виртуальной машины Azure от одной Подписки до другой Подписки?

Я недавно получил одно голубое изображение vm в одной учетной записи устройства хранения данных, и планирующий переместить это изображение в другую учетную запись устройства хранения данных под другой подпиской. Я использовал Сценарий PowerShell для выполнения этой задачи, но я столкнулся с этой проблемой: учетная запись устройства хранения данных не была найдена. И еще одно беспокойство - то, что PowerShell должен быть связан с определенной Azure Учетная запись, иначе он не может запустить скрипт. Таким образом, история - то, как использовать PowerShell, управляют различными подписками одновременно и также выполняют задачу миграции??Спасибо.

BTW, сценарий PowerShell показывают ниже:

Измените их для соответствия исходной учетной записи

$sourceStorageAccountName = "" $sourceContainerName = "" $sourceStorageKey = "" #Need это, если движущиеся данные из другой подписки

Целевые сведения об учетной записи

$destStorageAccountName = Хост Чтения "Входит, $destStorageAccountKey" Имени учетной записи Целевой системы хранения = Получают-AzureStorageKey $destStorageAccountName | % {$ _.Primary} $destContainerName =, Хост Чтения "Вводит Целевое Контейнерное Имя"

$sourceContext = Новый-AzureStorageContext-StorageAccountName $sourceStorageAccountName-StorageAccountKey $sourceStorageKey - Протокол $destContext Http = Новый-AzureStorageContext-StorageAccountName $destStorageAccountName-StorageAccountKey $destStorageAccountKey

$uri = $sourceContext. BlobEndPoint + $sourceContainerName + "/"

Операция копии

Добраться-AzureStorageBlob -Context $sourceContext - Контейнерный $sourceContainerName | ForEach-объект { Start-AzureStorageBlobCopy - SrcUri "$uri$ ($ _.Name)" -DestContext $destContext - $destContainerName DestContainer -DestBlob "hackathon/$($_.Name)" }

При проверке Состояния Копии Блоба - Это может быть прокомментировано, если никакое подтверждение не необходимо

Добраться-AzureStorageBlob -Context $sourceContext - Контейнерный $sourceContainerName | ForEach-объект { Get-AzureStorageBlobCopyState - $ блоба _.Name -Context $destContext - Контейнерный $destContainerName -WaitForComplete }

Проблема похожа на это: доберитесь-AzureStorageKey: Никакая текущая подписка не определялась. Используйте Выбор-AzureSubscription - Текущий для установки текущей подписки.

1
задан 31 December 2014 в 09:49
3 ответа

Попробуйте следующее:

Select-AzureSubscription -SubscriptionName "EXISTING SUBSCRIPTION NAME"
#Get-AzureVM

$vmName = "YOUR_VM_NAME"
$serviceName = "CLOUD_SERVICE_NAME"
$destServiceName = "NEW_CLOUD_SERVICE_NAME"
$workingDir = (Get-Location).Path

$sourceVm = Get-AzureVM -ServiceName $serviceName -Name $vmName
$vmConfigurationPath = $workingDir + "\exportedVM.xml"
$sourceVm | Export-AzureVM -Path $vmConfigurationPath

$sourceOSDisk = $sourceVm.VM.OSVirtualHardDisk
$sourceDataDisks = $sourceVm.VM.DataVirtualHardDisks

$sourceStorageName = $sourceOSDisk.MediaLink.Host -split "\." | select -First 1
$sourceStorageAccount = Get-AzureStorageAccount -StorageAccountName $sourceStorageName
$sourceStorageKey = (Get-AzureStorageKey -StorageAccountName $sourceStorageName).Primary

Stop-AzureVM -ServiceName $serviceName -Name $vmName -Force

Select-AzureSubscription -SubscriptionName "NEW SUBSCRIPTION NAME"

$location = $sourceStorageAccount.Location

$destStorageAccount = Get-AzureStorageAccount | ? {$_.Location -eq $location} | select -first 1
if ($destStorageAccount -eq $null)
{   
    $destStorageName = "NEW_STORAGE_NAME"
New-AzureStorageAccount -StorageAccountName $destStorageName -Location $location
$ destStorageAccount = Get-AzureStorageAccount -StorageAccountName $destStorageName
}
$destStorageName = $destStorageAccount.StorageAccountName
$destStorageKey = (Get-AzureStorageKey -StorageAccountName $destStorageName).Primary

$sourceContext = New-AzureStorageContext  -StorageAccountName $sourceStorageName `
    -StorageAccountKey $sourceStorageKey 
$destContext = New-AzureStorageContext  -StorageAccountName $destStorageName `
    -StorageAccountKey $destStorageKey 

if ((Get-AzureStorageContainer -Context $destContext -Name vhds -ErrorAction SilentlyContinue) -eq $null)
{
    New-AzureStorageContainer -Context $destContext -Name vhds
}

$allDisks = @($sourceOSDisk) + $sourceDataDisks
$destDataDisks = @()
foreach($disk in $allDisks)
{   
    $blobName = $disk.MediaLink.Segments[2]
    $targetBlob = Start-CopyAzureStorageBlob -SrcContainer vhds -SrcBlob $blobName `
                                            -DestContainer vhds -DestBlob $blobName `
                                            -Context $sourceContext -DestContext $destContext -Force
    Write-Host "Copying blob $blobName"
    $copyState = $targetBlob | Get-AzureStorageBlobCopyState
    while ($copyState.Status -ne "Success")
    {           
        $percent = ($copyState.BytesCopied / $copyState.TotalBytes) * 100       
        Write-Host "Completed $('{0:N2}' -f $percent)%"
        sleep -Seconds 5
        $copyState = $targetBlob | Get-AzureStorageBlobCopyState
    }
    If ($disk -eq $sourceOSDisk)
    {
        $destOSDisk = $targetBlob
    }
    Else
    {
        $destDataDisks += $targetBlob
    }
}

Add-AzureDisk -OS $sourceOSDisk.OS -DiskName $sourceOSDisk.DiskName -MediaLocation $destOSDisk.ICloudBlob.Uri
foreach($currenDataDisk in $destDataDisks)
{
    $diskName = ($sourceDataDisks | ? {$_.MediaLink.Segments[2] -eq $currenDataDisk.Name}).DiskName    
    Add-AzureDisk -DiskName $diskName -MediaLocation $currenDataDisk.ICloudBlob.Uri
}

Get-AzureSubscription -Current | Set-AzureSubscription -CurrentStorageAccountName $destStorageName

$vmConfig = Import-AzureVM -Path $vmConfigurationPath
New-AzureVM -ServiceName $destServiceName -Location $location -VMs $vmConfig -WaitForBoot

Get-AzureRemoteDesktopFile -ServiceName $destServiceName -Name $vmConfig.RoleName -LocalPath ($workingDir+"\newVM.rdp")`
2
ответ дан 3 December 2019 в 18:42

Azure практически не поддерживает переключение любой службы Azure с одной подписки на другую.

Если вы создаете заявку, я сделал это, кстати, вы можете попросить сотрудников службы поддержки Azure вручную переключить ВСЕ службы с одной Подписки (источника) на другую Подписку (место назначения), где в целевой Подписке НЕТ служб в этой Подписке.

Вы НЕ МОЖЕТЕ выбрать отдельные службы из исходной Подписки для передачи в целевую Подписку (все или ничего из исходной Подписки), и вы НЕ МОЖЕТЕ иметь какие-либо существующие службы в целевой Подписке.

** Услуга - это любая Функция Azure (виртуальная машина, веб-сайт,Storage Blob и т. Д.)

Вполне вероятно, что представитель службы поддержки не выполнял эту процедуру раньше, и вам придется сообщить им, что это возможно. Моему представителю службы поддержки по запросу потребовалось около недели, чтобы во всем разобраться. Убедитесь, что вы используете обычную исходную подписку и целевую подписку с идентификаторами GUID для обеих подписок во всех разговорах с представителем службы поддержки Azure.

Теперь для виртуальной машины, в частности, похоже, что вы можете скопировать виртуальную машину из одной учетной записи хранения в другую, используя инструмент под названием AzCopy, ознакомьтесь с этой статьей:

http://thecodejunkie.com/2014/01/20/copying-virtual-machines-between-azure-subscriptions/

1
ответ дан 3 December 2019 в 18:42

Вы можете использовать инструмент миграции DC Migration Tool, инструмент с открытым исходным кодом, чтобы копировать лазурные ресурсы из одной подписки в другую также и из других подписок в разных центрах обработки данных.

Azure Data Center Migration Tool Blog http://blog.persistentsys.com/index.php/2015/01/06/persistent-systems-releases-azure-data-center-migration-solution/

0
ответ дан 3 December 2019 в 18:42

Теги

Похожие вопросы