【发布时间】:2021-05-19 12:37:41
【问题描述】:
我想使用 Azure 函数和 Python 将文件写入我的 Azure DataLake Gen2。
很遗憾,我遇到了以下身份验证问题:
异常:ClientAuthenticationError:(InvalidAuthenticationInfo) 服务器未能验证请求。请参考 www-authenticate 标头中的信息。
“WWW 验证”:“已编辑”
我的帐户和函数应用都应该具有访问我的 DataLake 所分配的必要角色。
这是我的功能:
import datetime
import logging
from azure.identity import DefaultAzureCredential
from azure.storage.filedatalake import DataLakeServiceClient
import azure.functions as func
def main(mytimer: func.TimerRequest) -> None:
utc_timestamp = datetime.datetime.utcnow().replace(
tzinfo=datetime.timezone.utc).isoformat()
if mytimer.past_due:
logging.info('The timer is past due!')
credential = DefaultAzureCredential()
service_client = DataLakeServiceClient(account_url="https://<datalake_name>.dfs.core.windows.net", credential=credential)
file_system_client = service_client.get_file_system_client(file_system="temp")
directory_client = file_system_client.get_directory_client("test")
file_client = directory_client.create_file("uploaded-file.txt")
file_contents = 'some data'
file_client.append_data(data=file_contents, offset=0, length=len(file_contents))
file_client.flush_data(len(file_contents))
logging.info('Python timer trigger function ran at %s', utc_timestamp)
我错过了什么?
THX & BR
彼得
【问题讨论】:
-
这对我来说似乎工作正常。你是在本地测试还是在 Azure 上测试?
-
我都测试过,本地和 Azure 都失败了
-
直接使用连接字符串怎么样?
-
@BowmanZhu:将 DefaultAzureCredential() 的结果传递给 DataLakeServiceClient 对您有用吗? DefaultAzureCredential 在您这边使用了哪个身份 - VScode、CLI、...?
-
连接字符串很遗憾由于安全原因被禁用
标签: python azure-functions azure-data-lake-gen2