到目前为止,我将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
有什么想法吗?
这是因为azure mgmt数据工厂尚未更新为使用azure.corehttps://learn.microsoft.com/en-us/azure/developer/python/azure-sdk-authenticate?tabs=cmd#defaultazurecredential-对象没有属性签名会话。
本文档提供了两种备选方案:
-
使用后续中描述的其他身份验证方法之一本文的部分,这些部分可以很好地用于使用只有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)