问题描述
我正在使用Azcopy工具将一个存储帐户复制到另一个帐户。使用终端执行命令时,它会完美执行。但是,在使用terraform的本地执行程序执行相同操作时,会引发错误。请在下面找到代码和错误。
代码:
resource "null_resource" "backup" {
provisioner "local-exec" {
command= <<EOF
azcopy cp "https://${var.src_storage_acc_name}.blob.core.windows.net${var.src_sas}" "https://${var.dest_storage_acc_name}.blob.core.windows.net${var.dest_sas}"
EOF
}
}
错误:
Error running command ' azcopy cp "https://strsrc.blob.core.windows.net?[SAS]" "https://strdest.blob.core.windows.net?[SAS]"
': exit status 1. Output: INFO: The parameters you supplied were Source: '"https://strsrc.blob.core.windows.net?[SAS]-REDACTED- of type Local,and Destination: '"https://strdest.blob.core.windows.net?[SAS]-REDACTED- of type Local
INFO: Based on the parameters supplied,a valid source-destination combination Could not automatically be found. Please check the parameters you supplied. If they are correct,please specify an exact source and destination type using the --from-to switch. Valid values are two-word phases of the form BlobLocal,LocalBlob etc. Use the word 'Blob' for Blob Storage,'Local' for the local file system,'File' for Azure Files,and 'BlobFS' for ADLS Gen2. If you need a combination that is not supported yet,please log an issue on the Azcopy GitHub issues list.
Failed to parse user input due to error: the inferred source/destination combination Could not be identified,or is currently not supported
请提供您对此的想法。
解决方法
今天我需要执行类似的任务,并且我将azcopy cp
命令与document中提供的--recursive=true
选项一起使用。
它成功将源容器的所有内容复制到目标。
Copy all blob containers,directories,and blobs from storage account to another by using a SAS token:
- azcopy cp "https://[srcaccount].blob.core.windows.net?[SAS]" "https://[destaccount].blob.core.windows.net?[SAS]" --recursive=true
,
azcopy
仅支持 copy
子命令的源和目标类型(blob、Gen1、Gen2、S3、本地文件系统等)的某些组合。
azcopy
尝试根据 URL 和参数猜测源/目标类型。
这个错误意味着
- 您正在尝试使用不受支持的组合或
- 您的网址有问题。例如。当你应该有
blob.core.windows.net
时,你有dfs.core.windows.net
,反之亦然。这反过来又会导致对源和目标类型的错误识别。- 如果您确定支持该组合,则可以使用
azcopy
告诉--from-to
类型。具有讽刺意味的是,当您使用不受支持的组合(例如BlobFSBlobFS
)时,它会给出相同的错误消息,而不是说“不支持源目标组合”。 - 在处理 Gen2 时,您可以在 URL 中使用
blob
而不是dfs
以使其使用较旧的 (blob/Gen1) API 与您的 Gen2 帐户进行交互。虽然性能较低,但它仍然可以工作。
- 如果您确定支持该组合,则可以使用
- 用于 Blob 存储的“Blob”
- 'Local' 用于本地文件系统
- Azure 文件的“文件”
- 用于 ADLS Gen2 的“BlobFS”
目前支持以下组合per documentation:
- 本地 Azure Blob(SAS 或 OAuth 身份验证)
- 本地 Azure 文件(共享/目录 SAS 身份验证)
- 本地 Azure Data Lake Storage Gen 2(SAS、OAuth 或共享密钥身份验证)
- Azure Blob(SAS 或公共)-> Azure Blob(SAS 或 OAuth 身份验证)
- Azure Blob(SAS 或公共)-> Azure 文件 (SAS)
- Azure 文件 (SAS) -> Azure 文件 (SAS)
- Azure 文件 (SAS) -> Azure Blob(SAS 或 OAuth 身份验证)
- Amazon Web Services (AWS) S3(访问密钥)-> Azure Block Blob(SAS 或 OAuth 身份验证)
- Google Cloud Storage(服务帐户密钥)-> Azure Block Blob(SAS 或 OAuth 身份验证)[预览]