Azure 存储帐户由 4 种不同类型的存储组成:blob、文件共享、队列和表。将每种类型复制到新的存储帐户需要不同的方法和/或策略。
您可以使用许多工具来自动化该过程,包括 Az PowerShell 模块、az cli 和 Azure REST API。并非所有工具都提供处理所有 4 种存储类型的方法。
首先,您需要创建一个新的存储帐户来将您的数据复制到其中。请注意,帐户名称不仅在您的租户中是唯一的,而且在全球范围内是唯一的,长度限制为 24 个字符,并且只能由小写字母和数字组成。您可以使用New-AzStorageAccount PowerShell cmdlet 创建新帐户。
斑点
Blob 存储由将 Blob 保存在平面文件结构中的容器组成。您需要从源帐户重新创建每个容器,这可以使用 PowerShell cmdlet New-AzStorageContainer 完成。创建容器后,您可以使用 Start-AzStorageBlobCopy 将 blob 从源帐户中的容器复制到新帐户中的容器中。
文件共享
存储帐户可以包含多个文件共享,每个文件共享都包含不同深度的嵌套文件夹结构。您可以使用New-AzStorageShare 在目标帐户中创建新的文件共享。重新创建文件共享后,您需要遍历每个共享中的文件夹结构以获取所有文件。然后您可以使用New-AzStorageDirectory 重新创建文件夹结构并使用Start-AzStorageFileCopy 将文件复制到新的文件共享中。
队列
由于队列使用发布者订阅者模型并且数据是瞬态的,因此重新创建队列并使用当前发布者用来向新队列填充数据的方法的变体可能是最简单的。您可以使用New-AzStorageQueue 创建新队列。或者,您可以创建新队列并将发布者重新指向它,并且仅在旧队列耗尽后重新指向订阅者。对于您的用例,第一种方法可能更适合。
表格
存储帐户可以包含多个表,每个表都包含多行数据。您可以使用New-AzStorageTable 重新创建表,但这不会复制它们包含的数据。不幸的是,Az 模块中没有执行此操作的 cmdlet,但 AzTable module 包含 Get-AzTableRow 和 Add-AzTableRow cmdlet,它们应该允许您将行复制到新表中。
总结
在实践中,实现所有这些需要相当长的脚本,只有当您需要处理大量数据和处理错误以确保准确复制时,该脚本才会增长。我开发了一个脚本来处理 blob 和文件共享,它对于我需要的业余项目来说足够健壮和快速。但是,复制大约 10 个帐户需要几个小时,其中最大的帐户包含不到 1Gb 的数据,因此可能无法很好地扩展到商业环境。如果您希望将其用作起点,可以在 here 找到该脚本。