在同一个 Azure 租户中,我们在 2 个订阅中有 2 个存储帐户。 在第一个订阅 - 文件共享存储帐户中,我们在不同的文件共享中拥有数据,例如:
我们需要将数据移动到第二个订阅 - 文件共享存储帐户,该帐户具有如下文件共享:
在简单上下文中,我们必须将数据从
Fileshare1uat
移动到 fileshare1stg
并移动到下一个文件共享。
我尝试过的命令是:
azcopy copy 'https://stacc1uat.file.core.windows.net/fileshare1uat/*?sv=2022-11-
02&ss=f&srt=sco&sp=rwdlc&se=2024-04-18T07:48:11Z&st=2024-04-17T23:48:11Z&spr=https&sig=Afcze2DZGJ5fSR2KZF5uoTLK%2Fn%2BQRP9YGxDgoFK44Jc%3D'
'https://stacc1stg.file.core.windows.net/fileshare1stg/?sv=2022-11-02&ss=f&srt=sco&sp=rwlc&se=2024-04-18T07:50:41Z&st=2024-04-
17T23:50:41Z&spr=https&sig=egUK64ONwPxKrU026tSxgubAtzdYiD75MW8pIDZrlZc%3D' --recursive=true
Error: fatal: from-to argument required, PipeBlob (upload) or BlobPipe (download) is acceptable
我也没有找到任何文章来实现上述使用 ADF 将多个文件共享从源订阅存储帐户复制到目标订阅存储帐户(特定文件共享)。
请帮助我。
您可以在 ADF 中实现您的要求,如下所示。
为此,您需要一个包含源和目标文件共享名称信息的数组。
[
{
"source_fs":"rakeshfileshare1",
"target_fs":"rakeshtarget1"
},
{
"source_fs":"rakeshfileshare2",
"target_fs":"rakeshtarget2"
}
]
在 ADF 中,转到 管理 -> 链接服务 -> 创建两个新的文件共享类型链接服务。此处,一个用于源订阅,另一个用于目标订阅存储帐户。提供示例中的任何文件共享名称,然后单击“创建”。
创建两个链接服务后,转到 链接服务 -> {} 编辑链接服务 JSON。
将以下属性添加到 JSON。
"parameters": {
"filesharename": {
"type": "string"
}
}
并将您的示例文件共享名称替换为以下表达式。
@{linkedService().filesharename}
单击“应用”,类似地,对第二个链接服务也执行相同的操作。
现在,链接服务变成了参数化链接服务。
使用此参数,我们可以更改文件共享名称以从多个源复制到多个目标文件共享。
现在,创建两个文件共享类型的二进制数据集(源和目标)。为每个人提供上述链接服务。
在源数据集中,创建一个字符串类型参数
filesharename
,如下所示。
将上述参数
@dataset().filesharename
赋予链接服务参数。
将剩余字段保留为空。
同样,对其他二进制数据集(目标)执行相同操作。
现在,创建一个包含 for-each 活动的管道。在管道参数部分,创建一个数组类型参数,并将上面的Fileshares列表作为默认值。
在 For-Each 表达式中使用此参数。
在 for-each 活动中,进行复制活动并将二进制数据集作为源和目标。将
@item().source_fs
传递给源二进制数据集参数并使用通配符文件路径,如下所示。
在接收器中,将
@item().target_fs
传递给目标二进制数据集参数,并选择 保留层次结构 作为复制行为。
现在,调试管道,管道将根据给定的文件共享列表在每次迭代中将每个源文件共享数据复制到其目标文件共享。