【问题标题】:copying one blob container data into another blob container in azure throught run books通过运行手册将一个 blob 容器数据复制到 azure 中的另一个 blob 容器
【发布时间】:2018-01-03 02:03:21
【问题描述】:

我编写了一个脚本来将一个 blob 容器数据复制到另一个 blob 容器中 它仅复制 blob 名称并在 VHD 内显示已完成不是复制任何人都可以在脚本中提供帮助,,,

我到底在尝试什么 例如:- 存储帐户 1 包含 3 个 vhd 我在同一个日志中创建了新的存储帐户并尝试将所有 vhd 复制到新的存储帐户中 在脚本中,我传递了一些参数来复制带有日期的 vhd 当我运行该脚本时,它只创建名称但 Vhds 没有复制

提前致谢

【问题讨论】:

    标签: azure azure-storage azure-powershell


    【解决方案1】:

    根据您的描述,您希望将所有 blob 复制到另一个存储帐户,我们可以使用此脚本来执行此操作:

    将此添加到新的 Runbook:

    $connectionName = "AzureRunAsConnection"
    try
    {
        # Get the connection "AzureRunAsConnection "
        $servicePrincipalConnection=Get-AutomationConnection -Name $connectionName         
    
        "Logging in to Azure..."
        Add-AzureRmAccount `
            -ServicePrincipal `
            -TenantId $servicePrincipalConnection.TenantId `
            -ApplicationId $servicePrincipalConnection.ApplicationId `
            -CertificateThumbprint $servicePrincipalConnection.CertificateThumbprint 
    }
    catch {
        if (!$servicePrincipalConnection)
        {
            $ErrorMessage = "Connection $connectionName not found."
            throw $ErrorMessage
        } else{
            Write-Error -Message $_.Exception
            throw $_.Exception
        }
    }
    $RGName = "vm"
    $SAName = "jasondisk321"
    $ConName = "vhd"
    $key = "UUzQRoWeIMHzwzwJW9LxtgmwaJJS/Ac3DoXnPMHFIbUmupDpQ+KXCWG8ISJ4E20zjq7ugPtgN4vtVIv3A4m2Pg=="
    $Ctx = New-AzureStorageContext -StorageAccountName $SAName -StorageAccountKey $Key
    $List = Get-AzureStorageBlob -Blob * -Container $ConName -Context $Ctx
    $List = $List.ICloudBlob.Uri.AbsoluteUri
    $storageAccount = "jasondisk322"
    $storageKey = "6lRJq6hTS1aHfVF4/iWskq/QS+tu4Jm/2zdz7Mo6AINGZOQKUiHtOAKmdZhBAWbcNEcBQq0YxZjXHgHha/iUKw=="
    $destContext = New-AzureStorageContext  –StorageAccountName $storageAccount -StorageAccountKey $storageKey
    $containerName = "vhd"
    foreach ( $l in $list ){
    $bn = ($l -split '/')[4]
    Start-AzureStorageBlobCopy -srcUri $l -context $Ctx -DestContainer $containerName -DestBlob $bn -DestContext $destContext
    }
    

    如果你想在本地 PC 上使用 powershell,我们可以使用这个脚本:

    Login-AzureRmAccount
    $RGName = "vm"  #source storage account resource group name
    $SAName = "jasondisk321" #source storage account name
    $ConName = "vhd"  #source container name
    $key = "UUzQRoWeIMHzwzwJW9LxtgmwaJJS/Ac3DoXnPMHFIbUmupDpQ+KXCWG8ISJ4E20zjq7ugPtgN4vtVIv3A4m2Pg=="#source storage account key
    $Ctx = New-AzureStorageContext -StorageAccountName $SAName -StorageAccountKey $Key
    $List = Get-AzureStorageBlob -Blob * -Container $ConName -Context $Ctx
    $List = $List.ICloudBlob.Uri.AbsoluteUri
    $storageAccount = "jasondisk322"#destination storage account name
    $storageKey = "6lRJq6hTS1aHfVF4/iWskq/QS+tu4Jm/2zdz7Mo6AINGZOQKUiHtOAKmdZhBAWbcNEcBQq0YxZjXHgHha/iUKw=="#destination storage account key
    $destContext = New-AzureStorageContext  –StorageAccountName $storageAccount -StorageAccountKey $storageKey
    $containerName = "vhd"#destination container name
    foreach ( $l in $list ){
    $bn = ($l -split '/')[4]
    Start-AzureStorageBlobCopy -srcUri $l -context $Ctx -DestContainer $containerName -DestBlob $bn -DestContext $destContext
    }
    

    【讨论】:

    • 这对你有用吗?如果您需要更多帮助,请告诉我:)
    【解决方案2】:

    您可以使用 AzCopy 来做到这一点:

    AzCopy /source:https://[SourceStorageAccountName].blob.core.windows.net/vhds /dest:https://[DestStprageAccountName].blob.core.windows.net/vhds /sourcekey:<here-is-source-key> /destkey:<here-is-destination-key> /Pattern:[vhd-name].vhd
    

    更多信息:https://docs.microsoft.com/en-us/azure/storage/storage-use-azcopy

    如果你想自动化,那么你可以通过 Start-AzureStorageBlobCopy 使用 powershell:

    Select-AzureSubscription "my subscription"  
    
    ### Source VHD (West US) - anonymous access container ###
    $srcUri = "http://mwwestus1.blob.core.windows.net/source/testcopy1.vhd" 
    
    ### Target Storage Account (East US) ###
    $storageAccount = "mweastus1"
    $storageKey = "STORAGEACCOUNTKEY"
    
    ### Create the destination context for authenticating the copy
    $destContext = New-AzureStorageContext  –StorageAccountName $storageAccount `
                                            -StorageAccountKey $storageKey  
    
    ### Target Container Name
    $containerName = "copiedvhds"
    
    ### Create the target container in storage
    New-AzureStorageContainer -Name $containerName -Context $destContext 
    
    ### Start the Asynchronous Copy ###
    $blob1 = Start-AzureStorageBlobCopy -srcUri $srcUri `
                                        -DestContainer $containerName `
                                        -DestBlob "testcopy1.vhd" `
                                        -DestContext $destContext
    

    更多信息:https://www.opsgility.com/blog/windows-azure-powershell-reference-guide/copying-vhds-blobs-between-storage-accounts/

    更新

    AzCopy /Source:https://myaccount1.blob.core.windows.net/myContainer/ /Dest:https://myaccount2.blob.core.windows.net/myContainer/ /SourceKey:key1 /DestKey:key2 /Pattern:ab /SyncCopy

    【讨论】:

    • 谢谢蒂亚戈,我正在尝试复制整个容器而不是单个 VHd,这些都需要并行复制,而不提供单个 VHD 的 url 我试图提供 SourceRGName,& SourceSTGAccName & SourceCNTName & DestinationRGName & DestinationSTGAccName 是这个可能你能帮我写剧本吗
    猜你喜欢
    • 2020-03-29
    • 2015-07-16
    • 1970-01-01
    • 2020-01-27
    • 2020-12-06
    • 2016-11-29
    • 2020-01-12
    • 2020-03-01
    • 1970-01-01
    相关资源
    最近更新 更多