如何在Azure容器中删除旧文件

6

我计划通过关闭虚拟机并将vhd文件从生产容器复制到备份容器来备份我的Azure vhd文件。如何自动化删除备份容器中一周前的vhd文件?

3个回答

8
如果您可以接受使用PowerShell,那么这个方法适用于您。它将注册一个定期运行的计划任务,以删除指定容器中的 PageBlob。请注意,这里保留了HTML标签。
$taskTrigger = New-ScheduledTaskTrigger -Daily -At 12:01AM
Register-ScheduledJob -Name DeleteMyOldFiles -Trigger $taskTrigger -ScriptBlock {
    $isOldDate = [DateTime]::UtcNow.AddDays(-7)

    Get-AzureStorageBlob -Container "[YOUR CONTAINER NAME]" |
        Where-Object { $_.LastModified.UtcDateTime -lt $isOldDate -and $_.BlobType -eq "PageBlob" } |
        Remove-AzureStorageBlob
}

感谢提供脚本。我无法使计划部分工作,所以我将其剥离并手动在任务计划程序中安排了它。如果我有多个容器名称怎么办? - user1532937
你正在使用 PowerShell 3.0 版本吗?如果是的话,那么这个脚本将会起作用。 - Rick Rainey

1
这不是开箱即用的功能。您需要自己编写一些代码。基本步骤如下:
  1. 列出备份容器中的所有 blob。Blob 列表将返回 blob 及其属性。其中一个属性将是 LastModifiedDate(这将是 UTC 时间)。
  2. 然后,您可以编写逻辑来查找 x 天前修改的 blob。然后,您可以继续删除这些 blob。

还有几件事:

  • 您提到备份容器包含一些 VHD,它们本质上是页面 blob。当您列出 blob 时,您还会获得 blob 类型,因此您可以通过 blob 类型(= PageBlob)进一步筛选列表。
  • 至于自动化流程,您可以编写 PowerShell 脚本,然后使用 Windows 计划程序进行安排。如果您熟悉编写 node.js,则可以使用 node.js 编写相同的逻辑,并利用 Windows Azure 移动服务计划程序。

我在 PowerShell 方面做得不多。你能否列出一些所需代码的例子呢? - user1532937
你并不一定需要使用PowerShell来完成这个任务。你可以制作一个简单的可执行应用程序,并使用Windows计划任务进行调度。 - Gaurav Mantri
1
谢谢您的建议,但不幸的是我不是程序员。很遗憾Azure没有针对此任务的某种类型的调度程序。 - user1532937

1

当我试图删除整个容器时,我找到了这个答案。使用Rick的答案作为模板,我想出了这个试验 假设 来确定哪些容器将被删除:

$ctx = New-AzureStorageContext -StorageAccountName $AzureAccount `
                               -StorageAccountKey  $AzureAccountKey

$isOldDate = [DateTime]::UtcNow.AddDays(-7)

Get-AzureStorageContainer -Context $ctx                              `
     |  Where-Object { $_.LastModified.UtcDateTime -lt $isOldDate  } `
     |  Remove-AzureStorageContainer -WhatIf 

当我确定该列表应该被删除时,我使用了 -Force 以免每次都需要确认删除操作:

Get-AzureStorageContainer -Context $ctx                              `
     |  Where-Object { $_.LastModified.UtcDateTime -lt $isOldDate  } `
     |  Remove-AzureStorageContainer -Force 

感谢您发布了一个更简化的版本,我可以在任务计划程序中安排自己。 - Larry Smith

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接