python - 如何在 Azure 数据工厂中使用 Azure 函数 (Python) 作为 HTTP 数据集
问题描述
当我尝试在基于 Azure 函数(HTTP 触发器)的 Azure 数据工厂中创建数据集(HTTP)时,我不断收到连接超时:
The cloud service request timed out. Please retry. Activity ID:9d70efcd-c842-4484-9313-4872208a2a9e
但是,如果我从其他任何地方(例如apitester.com )调用函数,我会得到所需的响应:
- 请求网址:https ://srf-scadapa-fa2-windows.azurewebsites.net/api/HttpTriggerPython32?code=L5WVNJh8loDv3mZFcD/AKatNRoYfYoHlDbEBk4AEGrbDA39ddAXsyg==
- 请求方式:post
- 请求正文:{“group_name”:“Azure POC”}
回复正文:
{"timestamp":"2018-09-24 14:23:42","python_version":"3.5.4 (v3.5.4:3f56838, Aug 8 2017, 02:17:05) [MSC v.1900 64 位(AMD64)]"}
函数HttpTriggerPython32的源码如下:
import os, sys, json
from datetime import datetime
postreqdata = json.loads(open(os.environ['req']).read())
responseData = {
'timestamp' : datetime.now(pytz.timezone("Europe/Zurich")).strftime("%Y-%m-%d %H:%M:%S"),
'python_version' : sys.version
}
response = open(os.environ['res'], 'w')
response.write(str(responseData))
我已成功将其他第 3 方 HTTP 服务添加为数据工厂中的数据集。此外,我还设法通过使用 Web 活动来调用该函数。该错误仅在我尝试将该函数用作数据集源时发生。
要将函数添加为数据工厂数据集,我使用以下参数创建了一个新数据集:
{
"name": "HttpFile1",
"properties": {
"linkedServiceName": {
"referenceName": "AF_srfscadapa_af1",
"type": "LinkedServiceReference"
},
"type": "HttpFile",
"typeProperties": {
"format": {
"type": "JsonFormat",
"filePattern": "setOfObjects"
},
"relativeUrl": "HttpTriggerPython32?code=L5WVNJh8loDv3mZFcD/AKatNRoYfYoHlDbEBk4AEGrbDA39ddAXsyg==",
"requestMethod": "Post",
"requestBody": "{\n \"group_name\": \"Azure POC\"\n}"
}
}
}
链接服务“AF_srfscadapa_af1”配置如下:
- 通过集成运行时连接:AutoResolveIntegrationRuntime
- 基本 URL:https ://srf-scadapa-fa2-windows.azurewebsites.net/api/
- 服务器证书验证:错误
- 认证类型:匿名
解决方案
Azure Functions(以及几乎所有无服务器平台)必须处理冷启动延迟问题,即在一段时间不使用后对函数应用程序的第一次请求需要更长的时间。这是因为平台需要在处理请求之前实例化您的应用程序实例。这可能会为请求增加大量时间,这可能会增加延迟,超过 Azure Data Lake 的默认超时所允许的时间。
根据Azure 数据工厂的文档,以 HTTP 作为源的复制活动有一个超时字段。将其配置为更高的值可能会解决此问题。