Конвейеры фабрики данных Azure: создание конвейеров с помощью Python: аутентификация (через az cli) - PullRequest
1 голос
/ 05 апреля 2019

Я пытаюсь создать конвейеры Azure Data Factory через Python, используя пример, предоставленный Microsoft здесь:

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 длясоздавая конвейер, я делаю "az login" через конвейер развертывания Jenkins, который дает мне аутентифицированный сеанс 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 Ответ

1 голос
/ 06 апреля 2019

Просто замените класс на правильный тип:

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 (для обработки виртуальной машины), а не клиент ADF.Но да, вы нашли документ, соответствующий вашим потребностям:)

(раскрытие: я работаю в MS в команде Python SDK)

...