É possível migrar a imagem da VM do Azure de uma Assinatura para outra Assinatura?

1

Recentemente, capturei uma imagem vm azulada em uma conta de armazenamento e planejei migrar essa imagem para outra conta de armazenamento com uma assinatura diferente. Eu usei o Script do PowerShell para executar essa tarefa, mas me deparei com esse problema: A conta de armazenamento não foi encontrada. E mais uma preocupação é que o PowerShell deve estar relacionado à conta específica do Azure, caso contrário, ele não poderá executar o script. Então, a história é como usar o PowerShell para controlar inscrições diferentes ao mesmo tempo e também executar a tarefa de migração? Obrigado.

BTW, o script do PowerShell é mostrado abaixo:

Altere-os para corresponder à conta de origem

$ sourceStorageAccountName="" $ sourceContainerName="" $ sourceStorageKey="" #Necessidade disso se mover dados de uma assinatura diferente

Informações da conta de destino

$ destStorageAccountName = Host de leitura "Digite o nome da conta de armazenamento de destino" $ destStorageAccountKey = Get-AzureStorageKey $ destStorageAccountName | % {$ _. Primária} $ destContainerName = Read-Host "Digite o Nome do Contêiner de Destino"

$ sourceContext = New-AzureStorageContext -StorageAccountName $ sourceStorageAccountName -StorageAccountKey $ sourceStorageKey -Protocol Http $ destContext = New-AzureStorageContext -StorageAccountName $ destStorageAccountName -StorageAccountKey $ destStorageAccountKey

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

Operação de cópia

Get-AzureStorageBlob -Context $sourceContext     -Container $ sourceContainerName |     ForEach-Object { Start-AzureStorageBlobCopy         -SrcUri "$ uri $ ($ _. Name)" -DestContext $destContext         -DestContainer $ destContainerName -DestBlob "hackathon/$($_.Name)"     }

Verificação do status da cópia de blob - Isso pode ser comentado se não for necessária uma confirmação

Get-AzureStorageBlob -Context $sourceContext     -Container $ sourceContainerName |     ForEach-Object { Get-AzureStorageBlobCopyState         -Blob $ _. Nome -Context $destContext         -Container $ destContainerName -WaitForComplete     }

O problema é assim: Get-AzureStorageKey: Nenhuma assinatura atual foi designada. Usar Selecione-AzureSubscription -Current para definir o atual inscrição.

    
por billcyz 31.12.2014 / 04:20

3 respostas

2

Tente isto:

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")'
    
por 31.12.2014 / 06:23
1

O Azure fornece pouco suporte para alternar qualquer serviço do Azure de uma Assinatura para outra.

Se você criar um ticket, a propósito, você poderá fazer com que a equipe de suporte do Azure alterne TODOS os serviços de uma Assinatura (origem) para outra Assinatura (destino) em que a Assinatura de destino NÃO tenha serviços nessa Assinatura.

Você NÃO PODE selecionar serviços individuais da Assinatura de origem para transferir, para a Assinatura de destino (é tudo ou nada da Assinatura de origem) e você NÃO PODE ter nenhum serviço existente na Assinatura de destino.

** Um serviço é qualquer recurso do Azure (VM, site, armazenamento Blob etc)

É provável que o representante de suporte não tenha feito esse procedimento antes e você terá que avisar que é possível, meu representante de suporte do ticket levou cerca de uma semana para descobrir tudo. Certifique-se de usar a assinatura de assinatura vernacular e a assinatura de destino com GUIDs para ambas as Assinaturas em todas as conversas com o representante de suporte do Azure.

Agora, para uma VM em particular, parece que você pode copiar uma VM de uma conta de armazenamento para outra usando uma ferramenta chamada AzCopy, confira este artigo:

link

    
por 05.04.2015 / 02:53
0

Você pode usar o DC Migration Tool, uma ferramenta de software livre para copiar recursos do azure de uma assinatura para outra assinatura também nos datacenters.

Blog da Ferramenta de Migração do Centro de Dados do Azure link

    
por 08.01.2015 / 15:46