Daily Azure: Migrate a Storge Account
TL;DR
Migration is done via azcopy:
- download souce container to local folder
- upload local folder to destination container
Get AzCopy
Here is the script install-azcopy.ps1:
# Download and extract # $URI = "https://aka.ms/downloadazcopy-v10-windows" $DST = "~\AppData\Local\Programs\AZCopy\" Invoke-WebRequest -Uri $URI -OutFile AzCopy.zip -UseBasicParsing Expand-Archive ./AzCopy.zip ./AzCopy -Force # Move AzCopy mkdir ~\AppData\Local\Programs\AZCopy Get-ChildItem ./AzCopy/*/azcopy.exe | Move-Item -Destination "~\$DEST" # Add AzCopy to PATH $userenv = (Get-ItemProperty -Path 'HKCU:\Environment' -Name Path).path $newPath = "$userenv; New-ItemProperty -Path 'HKCU:\Environment' -Name Path -Value $newPath -Force # Clean the kitchen del -Force AzCopy.zip del -Force -Recurse .\AzCopy\
Copy Folder
param (
    $FOLDER = "",
    [Parameter(Mandatory=$false)]
    [string]$TYPE   = "latest",
    [Parameter(Mandatory=$false)]
    [switch]$LOGIN
)
if ($TYPE -eq "latest") {
    $SRC_ROOT="<latest-folder>"
    $DST_ROOT="latest"
} else {
    $SRC_ROOT="<history-folder>"
    $DST_ROOT="history"
}
$SRC_ACCCOUNT = "<source storage account>";
$DST_ACCCOUNT = "<destination storage account>";
$SRC_CONTAINER = "<source container>"
$DST_CONTAINER = "<destination container>"
$SRC_URL      = "https://${SRC_ACCCOUNT}.blob.core.windows.net/$SRC_CONTAINER/$SRC_ROOT/$FOLDER/"
$DST_URL      = "https://${DST_ACCCOUNT}.blob.core.windows.net/$DST_CONTAINER/$DST_ROOT/"
$TMP_FLDR     = "C:\TMP\Downloads"
Write-Host  "== Copy     '$FOLDER'"
Write-Host "       from  $SRC_URL"
Write-Host  "        to  $DST_URL"
#
if ($LOGIN) {
    $ENV:AZCOPY_CRED_TYPE = "OAuthToken";
    $ENV:AZCOPY_CONCURRENCY_VALUE = "AUTO";
    azcopy login
}
Write-Host  "== Download ======================================================"
Write-Host "       from  $SRC_URL"
Write-Host  "        to  $TMP_FLDR\$CONTAINER"
azcopy copy         $SRC_URL                                                                                      `
                    $TMP_FLDR                                                                                     `
                    --trusted-microsoft-suffixes=${SRC_ACCCOUNT}.blob.core.windows.net                            `
                    --overwrite=true                                                                              `
                    --check-md5=FailIfDifferent                                                                   `
                    --from-to=BlobLocal                                                                           `
                    --recursive                                                                                   `
                    --log-level=ERROR
# Upload
Write-Host  "== Upload   ======================================================"
Write-Host  "      from  $TMP_FLDR\$CONTAINER"
Write-Host  "        to  $DST_URL"
azcopy copy         $TMP_FLDR\$CONTAINER                         `
                    $DST_URL                                     `
                    --overwrite=true                             `
                    --from-to=LocalBlob                          `
                    --blob-type BlockBlob                        `
                    --follow-symlinks                            `
                    --check-length=true                          `
                    --put-md5                                    `
                    --follow-symlinks                            `
                    --disable-auto-decoding=false                `
                    --recursive                                  `
                    --log-level=ERROR
Call the script
First call should use -login to authenticate
.\copy.ps1 demo-folder-1 -login
Then, following commands dont need the login
.\copy.ps1 demo-folder-2











