Azure 数据工厂管道:使用 Python 创建管道:身份验证(通过 az cli)
Azure Data Factory Pipelines: Creating pipelines with Python: Authentication (via az cli)
我正在尝试通过 python 创建 Azure 数据工厂管道,使用 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)
(参考: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 对象之间可能需要一些额外的步骤?
感谢任何线索!
只需将 class 替换为正确的类型:
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 工作)
我正在尝试通过 python 创建 Azure 数据工厂管道,使用 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)
(参考: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 对象之间可能需要一些额外的步骤?
感谢任何线索!
只需将 class 替换为正确的类型:
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 工作)