Ошибка вызова функции Azure из триггера конвейера фабрики данных - PullRequest
0 голосов
/ 20 июня 2019

Я вызываю приложение функции Azure, запускаемое по протоколу http, в конвейере фабрики данных с использованием функции функции ADF.Он успешно выполняется в режиме отладки, но когда я публикую этот конвейер и запускаю тот же код с использованием триггеров фабрики данных, я получаю сообщение об ошибке ниже -

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

Пожалуйста, дайте мне знать, если мне нужно внести некоторые дополнительные изменения свойствили я что-то здесь упускаю.Также есть ли способ узнать, какой URL генерируется, когда я вызываю приложение функции через функцию функции в ADF.

Я пытался вызвать одно и то же приложение функции с помощью веб-активности в 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 Ответ

1 голос
/ 01 июля 2019

В Azure Data Factory есть известная ошибка, и они работают над этим. На данный момент, если вы создаете фабрику данных Azure с использованием .NET SDK, вам нужно установить заголовки, подобные этой, в действии функции Azure.

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" }
                        }
                    }
                }

Если вы создаете действие функции Azure через пользовательский интерфейс, просто обновите описание действия, после чего публикация и заголовки будут автоматически инициализированы.

...