Azure数据工厂管道:使用Python创建管道:身份验证(通过az cli)

时间:2019-04-05 09:45:07

标签: python azure azure-data-factory-2

我正在尝试使用Microsoft在此处提供的示例通过python创建azure数据工厂管道:

https://docs.microsoft.com/en-us/azure/data-factory/quickstart-create-data-factory-python

def main():

    # Azure subscription ID
    subscription_id = '<Specify your Azure Subscription ID>'

    # This program creates this resource group. If it's an existing resource group, comment out the code that creates the resource group
    rg_name = 'ADFTutorialResourceGroup'

    # The data factory name. It must be globally unique.
    df_name = '<Specify a name for the data factory. It must be globally unique>'

    # Specify your Active Directory client ID, client secret, and tenant ID
    credentials = ServicePrincipalCredentials(client_id='<Active Directory application/client ID>', secret='<client secret>', tenant='<Active Directory tenant ID>')
    resource_client = ResourceManagementClient(credentials, subscription_id)
    adf_client = DataFactoryManagementClient(credentials, subscription_id)

    rg_params = {'location':'eastus'}
    df_params = {'location':'eastus'}

但是我无法如上所示传递凭据,因为azure登录是在管道中较早的一个单独步骤进行的,这使我有一个经过身份验证的会话可以进行azure(此脚本中不能传递其他凭据)。

在运行python代码创建管道之前,我通过Jenkins部署管道进行“ az登录”,这使我获得了经过身份验证的azurerm会话。我应该能够在python脚本中重新使用此会话以获取数据工厂客户端,而无需再次进行身份验证。

但是,我不确定如何修改代码的客户端创建部分,因为似乎没有任何示例利用已经建立的azurerm会话:

    adf_client = DataFactoryManagementClient(credentials, subscription_id)

    rg_params = {'location':'eastus'}
    df_params = {'location':'eastus'}

 #Create a data factory
    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)

Microsoft的身份验证文档建议我可以使用以前建立的会话进行身份验证,如下所示:

from azure.common.client_factory import get_client_from_cli_profile
from azure.mgmt.compute import ComputeManagementClient

client = get_client_from_cli_profile(ComputeManagementClient)

(ref:https://docs.microsoft.com/en-us/python/azure/python-sdk-azure-authenticate?view=azure-python

这可行,但是azure数据工厂对象实例化失败,并显示以下信息:

Traceback (most recent call last):
  File "post-scripts/check-data-factory.py", line 72, in <module>
    main()
  File "post-scripts/check-data-factory.py", line 65, in main
    df = adf_client.factories.create_or_update(rg_name, data_factory_name, df_resource)

AttributeError: 'ComputeManagementClient' object has no attribute 'factories'

那么在此与获取df对象之间也许需要一些额外的步骤?

任何线索表示赞赏!

1 个答案:

答案 0 :(得分:1)

只需将类替换为正确的类型:

from azure.common.client_factory import get_client_from_cli_profile
from azure.mgmt.resource import ResourceManagementClient
from azure.mgmt.datafactory import DataFactoryManagementClient

resource_client = get_client_from_cli_profile(ResourceManagementClient)
adf_client = get_client_from_cli_profile(DataFactoryManagementClient)

您得到的错误是因为您创建了Compute客户端(以处理VM),而不是ADF客户端。但是,是的,您找到了适合您需要的文档:)

(披露:我在Python SDK团队的MS上工作)