我们想要将文件从Google Storage复制到Azure Storage。我们使用以下指南:https://learn.microsoft.com/en-us/azure/storage/common/storage-use-azcopy-google-cloud
我们运行这个命令:
azcopy copy 'https://storage.googleapis.com/telia-ddi-delivery-plaace/activity_daily_al1_20min/' 'https://plaacedatalakegen2.blob.core.windows.net/teliamovement?<SASKEY>' --recursive=true
并得到这个结果错误:
INFO: Scanning...
INFO: Any empty folders will not be processed, because source and/or destination doesn't have full folder support
failed to perform copy command due to error: cannot start job due to error: cannot scan the path /Users/peder/Downloads/https:/storage.googleapis.com/telia-ddi-delivery-plaace/activity_daily_al1_20min, please verify that it is a valid.
在我们看来,azcopy将源代码解释为本地文件目标,因此添加了我们运行它的当前位置:/Users/peder/Downloads/。但是我们找不到任何参数来表明它是一个web位置,并且它与本指南中的文档相同:
azcopy copy 'https://storage.cloud.google.com/mybucket/mydirectory' 'https://mystorageaccount.blob.core.windows.net/mycontainer/mydirectory' --recursive=true
我们已经尝试过的:
- 我们在Mac终端上做这个,但是我们也在Mac上测试了PowerShell。
- 我们已经尝试了单引号和双引号。
- 我们从控制台复制了带有SAS密钥的Azure存储url,以确保语法正确
- 我们尝试了cp而不是copy,因为azcopy使用了帮助页。
我们的命令有什么问题吗?或者是指南写好之后,有任何副本被修改过吗?
我还在Azure文档git页面上创建了一个问题:https://github.com/MicrosoftDocs/azure-docs/issues/78890
你遇到这个问题的原因是因为URLstorage.cloud.google.com
是硬编码在Google Cloud Storage的应用程序源代码中。从这个link
:
const gcpHostPattern = "^storage.cloud.google.com"
const invalidGCPURLErrorMessage = "Invalid GCP URL"
const gcpEssentialHostPart = "google.com"
由于您使用的是storage.googleapis.com
而不是storage.cloud.google.com
,它不能被azcopy识别为有效的Google Cloud Storage端点,它认为该值是您本地文件系统中的目录之一。
在我的例子中,在azcopy命令中将单引号改为双引号解决了这个问题。
PS:我从Windows开发人员命令提示符中运行了azcopy