到目前为止,我将DefaultAzureCredential
用于所有Python开发人员(KeyVault客户端,BlobStorage客户端等)。这是我第一次在Python中使用azure.mgmt.datafactory。尝试使用DefaultAzureCredential
时,出现错误:AttributeError: 'DefaultAzureCredential' object has no attribute 'signed_session'
。
要复制: 重现行为的步骤:
credential = DefaultAzureCredential()
resource_client = ResourceManagementClient(credential, subscription_id)
adf_client = DataFactoryManagementClient(credential, subscription_id)
rg_name = 'RG_ADF_SANDBOX1'
df_name = 'df20201019test'
df_resource = Factory(location='westus')
df = adf_client.factories.create_or_update(rg_name, df_name, df_resource) #<----ERROR HERE
有什么想法吗?
答案 0 :(得分:1)
这是因为azure-mgmt-datafactory尚未更新为使用azure.core。您可以参考https://docs.microsoft.com/en-us/azure/developer/python/azure-sdk-authenticate?tabs=cmd#defaultazurecredential-object-has-no-attribute-signed-session。
本文档提供了两种选择:
使用随后描述的其他身份验证方法之一 本文的各个部分,对于使用以下代码的代码可以很好地工作 仅SDK管理库,并且不会部署到 云,在这种情况下,您只能依靠本地服务主体。
使用CredentialWrapper类代替DefaultAzureCredential (cred_wrapper.py),由Azure SDK的成员提供 工程团队。一旦所需的管理库可用, 切换回DefaultAzureCredential。这种方法的优点 您可以在SDK客户端和 管理库,它既可以在本地也可以在云中工作。
您还可以使用以下代码创建数据工厂:
from azure.common.credentials import ServicePrincipalCredentials
from azure.mgmt.resource import ResourceManagementClient
from azure.mgmt.datafactory import DataFactoryManagementClient
from azure.mgmt.datafactory.models import *
import time
#Create a data factory
subscription_id = '<Specify your Azure Subscription ID>'
credentials = ServicePrincipalCredentials(client_id='<Active Directory application/client ID>', secret='<client secret>', tenant='<Active Directory tenant ID>')
adf_client = DataFactoryManagementClient(credentials, subscription_id)
rg_params = {'location':'eastus'}
df_params = {'location':'eastus'}
df_resource = Factory(location='eastus')
df = adf_client.factories.create_or_update(rg_name, df_name, df_resource)
print_item(df)
while df.provisioning_state != 'Succeeded':
df = adf_client.factories.get(rg_name, df_name)
time.sleep(1)