使用SFTPToWasbOperator从SFTP复制文件到Azure Blob存储报错排查
问题定位
配置错误核心为blob_prefix参数传值不符合要求,额外存在容器名拼写不一致问题:
blob_prefix参数仅需传入Blob在目标容器内的相对路径前缀,不需要传入Blob的完整公网URL。你传入完整URL后,Operator会将该URL作为Blob名称进行编码拼接,最终生成畸形的请求地址,触发azure.core.exceptions.ServiceRequestError: URL has an invalid label报错。- 你代码中定义的容器名为
testcotainer(拼写缺失字母n),和日志中出现的testcontainer名称不一致,也会加剧请求路径的生成异常。
报错日志验证
从运行日志可以看到生成的请求URL完全不符合Azure Blob的接口规范:https://.blob.core.windows.net/***/test/https%3A//test.blob.core.windows.net/testcontainer/DataPoint_2022_07_04.csv
其中你传入的完整Blob URL被URL编码后直接拼接在了请求路径后半段,同时存储账户名位置为空,完全是参数传值错误导致的路径拼接异常。
修复方法
- 修正容器名拼写,保证代码中容器名和Azure侧实际创建的容器名完全一致
- 修改
blob_prefix参数值:如果不需要给上传后的文件设置虚拟目录前缀,直接赋值为空字符串即可;如果需要指定上传后文件存放的目录,仅传入容器内的相对路径,不要带存储账户域名部分。
修正后的核心配置代码:
# 和Azure实际容器名保持一致,修正拼写 AZURE_CONTAINER_NAME = "testcontainer" # 无路径前缀时赋值为空字符串即可,不要传完整URL BLOB_PREFIX = "" SFTP_SRC_PATH = "/SPi_test_Live/07-04-2022/"
说明:
SFTPToWasbOperator会自动从配置好的Azure Wasb连接信息中读取存储账户名、密钥等认证信息,自动拼接合法的请求URL,不需要手动在参数中拼接域名。
内容的提问来源于stack exchange,提问作者Ethiraj Krishna
相关产品推荐
相关产品推荐

