Azure ADF 自定义 Activity 与现有 ADLS 链接服务

Azure ADF Custom Activity With Existing ADLS Linked Service

我正在尝试使用在 visual studio 中编写的自定义 ADF activity 使用 azure SDK 将数据写入 ADLS。我创建的管道将部署到现有的 ADF 中,该 ADF 已经定义了 ADLS 和批处理 linked 服务。 我的问题是:在自定义activity方法中,如何使用已有的ADLSlinked服务写入数据?

这个问题与此类似: 但我不认为我可以简单地解除连接字符串,因为 linked 服务正在使用我的 SPN,作为开发人员我不允许知道 SPN 密钥。

这是 link 服务。

{
    "name": "AzureDataLakeStoreLinkedService",
    "properties": {
        "hubName": "****-d-****-adf_hub",
        "type": "AzureDataLakeStore",
        "typeProperties": {
            "dataLakeStoreUri": "adl://***************.azuredatalakestore.net/",
            "servicePrincipalId": "*****-**-****-****-************",
            "servicePrincipalKey": "**********",
            "tenant": "********.com"
        }
    }
}

在自定义 activity 中,我获得了 linked 服务:

var output = activity.Outputs[0];
var inputLinkedService = linkedServices.First(linkedService => linkedService.Name == _ADLSLinkedServiceName).Properties.TypeProperties as AzureDataLakeStoreLinkedService;

-- 现在怎么办?

您只能使用上述方法调用获取文件路径和链接服务帐户名称等信息。

您在这里遇到的问题是 ADF 自定义 activity 作为单独的应用程序在 Azure Batch 计算服务中运行。它不理解已在 ADF 中设置的链接服务身份验证(session 令牌),您将无法在 C# 中访问它。

解决方案是在 Azure Active Directory 域的上下文中将自定义 activity 注册为 Azure 应用程序!....是的,认真的!

完成后,您可以授予应用程序从数据湖存储访问 read/write 的权限。

查看我的博客。我写了一个 post 正是这个:

https://www.purplefrogsystems.com/paul/2016/12/azure-data-lake-authentication-from-azure-data-factory/

警告:PowerShell cmdlet 已被取代,因为您现在可以在门户刀片中实际注册该应用程序。