将blob中的特定文件从存储帐户复制到其他存储帐户

时间:2018-02-02 22:32:39

标签: c# azure-storage-blobs azure-functions

我在存储帐户的blob中有一个文件列表,我需要将其移动到另一个存储帐户。有没有办法专门选择blob文件并仅将选定的子集移动到不同的存储帐户?如果是这样,我该怎么做?

编辑:将更新需要移动的blob列表,并且需要持续运行功能过程

2 个答案:

答案 0 :(得分:0)

You can implement it with a Recurrence Logic App:

  1. Runs every X time
  2. Invoke your Stored Procedure to get the list of the files
  3. For each file, use the Copy Blob component to move the source blob to the destination blob

答案 1 :(得分:0)

如果您想使用Azure功能,我建议的最基本的方法是基于这个问题实际上是关于I / O而不是计算的问题。因此,虽然有一些模式可以用来扩展Azure功能的工作,但对于这类问题可能没有多大意义。

这里最简单的方法是使用基于timer trigger的单一函数。您可以根据需要安排此功能的运行。它的工作是执行你的sproc,枚举结果,然后通过Azure Blob Storage SDK中的TransferManager排队每个结果进行复制。

如果您已经不熟悉TransferManager类,则会负责跟踪和优化I / O操作的并发吞吐量。您可能希望创建一个TransferContext来表示该函数正在处理的一批工作,以便您可以跟踪进度,处理故障,处理覆盖情况等。您将使用CopyAsync方法,如果您不熟悉此API,则此方法上有一个名为isServiceCopy的参数。由于您在两个Azure存储服务帐户之间进行复制,因此您肯定希望利用此帐户,以便它是纯服务器< - >服务器副本,并且I / O不具备通过运行函数实例的服务器;你的功能最终只是复制的协调者。

现在,就像我说的那样,这是我建议的最基本的方法。还有其他事情需要考虑,例如在面对任何失败时保持幂等性。例如,如果您调用的存储过程仅返回一次特定的blob URI(例如,SQL服务器中的穷人队列),并且您的Azure功能由于某种原因而失败,那么您将失去该工作。我真的需要了解更多有关它的详细信息来规定更耐用的替代方案,但是您肯定希望改变这种方法,以便将实际复制与存储过程的执行分离,以减少失败的可能性那里。