Я недавно получил одно голубое изображение 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 - Текущий для установки текущей подписки.
Попробуйте следующее:
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")`
Azure практически не поддерживает переключение любой службы Azure с одной подписки на другую.
Если вы создаете заявку, я сделал это, кстати, вы можете попросить сотрудников службы поддержки Azure вручную переключить ВСЕ службы с одной Подписки (источника) на другую Подписку (место назначения), где в целевой Подписке НЕТ служб в этой Подписке.
Вы НЕ МОЖЕТЕ выбрать отдельные службы из исходной Подписки для передачи в целевую Подписку (все или ничего из исходной Подписки), и вы НЕ МОЖЕТЕ иметь какие-либо существующие службы в целевой Подписке.
** Услуга - это любая Функция Azure (виртуальная машина, веб-сайт,Storage Blob и т. Д.)
Вполне вероятно, что представитель службы поддержки не выполнял эту процедуру раньше, и вам придется сообщить им, что это возможно. Моему представителю службы поддержки по запросу потребовалось около недели, чтобы во всем разобраться. Убедитесь, что вы используете обычную исходную подписку и целевую подписку с идентификаторами GUID для обеих подписок во всех разговорах с представителем службы поддержки Azure.
Теперь для виртуальной машины, в частности, похоже, что вы можете скопировать виртуальную машину из одной учетной записи хранения в другую, используя инструмент под названием AzCopy, ознакомьтесь с этой статьей:
http://thecodejunkie.com/2014/01/20/copying-virtual-machines-between-azure-subscriptions/
Вы можете использовать инструмент миграции 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/