我想使用 Powershell 将我的网络应用程序的特定文件和文件夹备份到 blob 存储

I want to backup specific files and folder of my web app to the blob storage using Powershell

我的网络应用程序有大量文件和文件夹,但我只想备份特定的 files/folder,然后将它们存储到 blob 存储中。 此方法用于灾难恢复。

代码:

$domain = "Resonate"
$user = "abc" 
$pw = "****"

$securepwd = ConvertTo-SecureString $pw -asplaintext -force
$account = $($domain)+"\"+$($user) 
$credential = New-Object System.Management.Automation.PSCredential($account,$securepwd) 

$username = "`$abc"
$password = "***"
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $username, $password)))
$userAgent = "powershell/1.0"

$filePath = "C:\Users\Raj.Negi\Desktop\PowerShell\Web.config"
$apiUrl = "https://abc.scm.azurewebsites.net/api/vfs/site/wwwroot/Web.config"

Invoke-RestMethod -Uri $apiUrl -Credential $credential -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -UserAgent $userAgent -Method GET -OutFile $filePath -ContentType "multipart/form-data"

Connect-AzureRmAccount

$acctKey = (Get-AzureRmStorageAccountKey -Name abcdemo -ResourceGroupName abcRG).Value[0]

$storageContext = New-AzureStorageContext -StorageAccountName "abcdemo" -StorageAccountKey $acctKey

Set-AzureStorageBlobContent -File $filePath -Container "abccontainer" -BlobType "Block" -Context $storageContext -Verbose

目前它将一个文件下载到我的本地路径,然后将其上传到 azure blob。我希望它应该直接将它上传到 blob,而不是将它下载到本地路径。 可以是一个文件,也可以是整个文件夹。

Microsoft 提供了通过排除内容来部分备份您的 Web 应用程序的方法,但它对大型应用程序毫无用处。如果他们只提供选定的 files/folders 备份会更好。

根据我的经验,将一些文件和目录备份到 Azure Blob Storage 的简单方法是使用 AzCopy,您可以将其与 Azure WebApp 上的 Azure Triggered WebJob 结合使用以满足您的需求。

这是我实现将 Azure WebApp D:\home 下的资源备份到 Blob 存储的步骤。

  1. 我尝试在 Kudo 控制台 Windows 上使用 AzCopy v10 (only x64 version) to copy a single file to Azure Blob Storage on Kudo Console, but failed due to some reason about Access is denied. However, AzCopy v8
  2. 首先,我在本地Windows机器上安装了AzCopy v8,并将C:\Program Files (x86)\Microsoft SDKs\Azure下的AzCopy目录上传到Kudo Console路径D:\home,如下图.
  3. 我尝试通过路径 D:\home\AzCopy 下的命令 AzCopy /Source:D:\home\site\test /Dest:https://<account name>.blob.core.windows.net/test /DestKey:<account key> /Pattern:"example.txt" 将单个文件上传到我的容器 test,它有效。
  4. 我尝试通过命令 D:\home\AzCopy\AzCopy /Source:D:\home\site\test /Dest:https://ppas.blob.core.windows.net/test/backup /DestKey:b7AzhS60+0hgTWGJdaxXT0w4O6hGuoiL0UVwcLJWIwq/w6hJzKwvt9asFdpfx0yif73ghvLe6urLIo8h6CtZnw== /S /Y 将目录上传到容器 test 的虚拟目录 backup,但没有确认提示,它也有效。
  5. 所以我制作了一个.bat文件backup.bat在下面使用绝对路径编写命令行作为上面的步骤将其作为触发的webjob上传,如下图所示。另外,你可以制作一个 powershell 脚本来做同样的事情。

    D:\home\AzCopy\AzCopy /Source:D:\home\site\test /Dest:https://<account name>.blob.core.windows.net/test/backup /DestKey:<account key> /Pattern:"example.txt" /Y
    D:\home\AzCopy\AzCopy /Source:D:\home\site\test /Dest:https://<account name>.blob.core.windows.net/test/backup /DestKey:<account key> /S /Y
    

它按预期工作。