如何在Azure数据工厂中将Azure函数(Python)用作HTTP数据集

如何在Azure数据工厂中将Azure函数(Python)用作HTTP数据集,python,azure,azure-functions,azure-data-factory-2,Python,Azure,Azure Functions,Azure Data Factory 2,当我尝试在基于Azure函数(HTTP触发器)的Azure数据工厂中创建数据集(HTTP)时,我不断收到连接超时: 但是,如果我从其他任何地方(例如从)调用函数,我会得到所需的响应: 请求URL: 申请方式:邮寄 请求正文:{“组名称”:“Azure POC”} 答复机构: {“时间戳”:“2018-09-24 14:23:42”,“python_版本”:“3.5.4(v3.5.4:3f56838,2017年8月8日,02:17:05)[MSC v.1900 64位(AMD64)]”} 函数

当我尝试在基于Azure函数(HTTP触发器)的Azure数据工厂中创建数据集(HTTP)时,我不断收到连接超时:

但是,如果我从其他任何地方(例如从)调用函数,我会得到所需的响应:

  • 请求URL:
  • 申请方式:邮寄
  • 请求正文:{“组名称”:“Azure POC”}
  • 答复机构:

    {“时间戳”:“2018-09-24 14:23:42”,“python_版本”:“3.5.4(v3.5.4:3f56838,2017年8月8日,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))
我已经成功地在数据工厂中添加了其他第三方HTTP服务作为数据集。此外,我还通过使用Web活动调用了该函数。 该错误仅在我尝试将该函数用作数据集源时发生

为了将函数添加为data factory dataset,我使用以下参数创建了一个新的dataset:

{
    "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”配置如下:

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))
  • 通过集成运行时连接:AutoResolveIntegrationRuntime
  • 基本URL:
  • 服务器证书验证:False
  • 身份验证类型:匿名

手动定义源的所有列并增加复制活动的超时时间解决了问题

我使用的是Data Factory GUI,无法为预览源或导入模式设置超时。因此,在这种特殊情况下,“导入架构”功能根本不起作用。

Azure功能(以及几乎所有无服务器平台)必须处理冷启动延迟问题,在这种情况下,在一段时间不使用之后,对功能应用程序的第一个请求需要更长的时间。这是因为平台需要在服务请求之前实例化应用程序的实例。这会给请求增加大量时间,这可能会使您的延迟超过Azure Data Lake默认超时所允许的时间


根据,以HTTP作为源的复制活动有一个超时字段。将此配置为更高的值可能会解决此问题。

您是否为Http活动尝试了不同的超时值。我对Azure Data Factory不太熟悉(我是功能团队的成员),但您的链接服务是否可能因为基本URL返回404而出现问题?也许可以尝试创建您的基本URL并相应地编辑您的相对URL?@ConnorMcMahon谢谢,我在复制活动中使用了timeout设置参数解决了这个问题