从数据工厂管道触发器中调用azure函数时出错

时间:2019-06-20 07:21:55

标签: azure azure-functions azure-data-factory azure-data-factory-2 azure-triggers

我正在使用ADF函数活动在数据工厂管道中调用http触发的Azure函数应用。它在调试模式下成功执行,但是当我发布该管道并使用数据工厂触发器运行相同的代码时,我得到以下错误-

{
    "errorCode": "3600",
    "message": "Object reference not set to an instance of an object.",
    "failureType": "UserError",
    "target": "AzureFunction"
}

请告诉我是否需要更改一些其他属性,或者我在这里遗漏了任何内容。还有什么方法可以查看通过ADF中的函数活动调用函数应用程序时生成的URL。

我尝试使用ADF中的网络活动调用同一功能的应用程序,并且在调试和触发模式下均能正常工作。

Azure功能的链接服务代码

{
    "name": "linkedservicesAzureFunctions",
    "type": "Microsoft.DataFactory/factories/linkedservices",
    "properties": {
        "typeProperties": {
            "functionAppUrl": "https://xyz.azurewebsites.net",
            "functionKey": {
                "type": "AzureKeyVaultSecret",
                "store": {
                    "type": "LinkedServiceReference",
                    "referenceName": "linkedservicesKeyVault"
                },
                "secretName": "functions-host-key-default"
            }
        },
        "type": "AzureFunction"
    }
}

1 个答案:

答案 0 :(得分:1)

Azure数据工厂中存在一个已知的错误,他们正在对此进行处理。现在,如果要使用.NET SDK创建Azure数据工厂,则需要在Azure Function Activity中设置此类标题。

new AzureFunctionActivity
                {
                    Name = "CopyFromBlobToSnowFlake",
                    LinkedServiceName = new LinkedServiceReference(pipelineStructure.AzureFunctionLinkedService),
                    Method = "POST",
                    Body = body,
                    FunctionName = "LoadBlobsIntoSnowFlake",
                    Headers = new Dictionary<string, string>{ },
                    DependsOn = new List<ActivityDependency>
                    {
                        new ActivityDependency{
                            Activity = "CopyFromOPSqlServerToBlob",
                            DependencyConditions= new List<string>{"Succeeded" }
                        }
                    }
                }

如果要通过UI创建Azure Function活动,则只需更新活动的描述,然后发布和标题将自动获得初始化。