【问题标题】:How to use an Azure Function (Python) as a HTTP dataset in an Azure Data Factory如何在 Azure 数据工厂中将 Azure 函数 (Python) 用作 HTTP 数据集
【发布时间】:2019-02-28 00:01:16
【问题描述】:

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

  The cloud service request timed out. Please retry. Activity ID:9d70efcd-c842-4484-9313-4872208a2a9e

但是,如果我从其他任何地方调用函数,例如来自apitester.com,我得到了想要的回应:

函数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”配置如下:

【问题讨论】:

  • 您是否为您的 Http 活动尝试过不同的超时值? docs.microsoft.com/en-us/azure/data-factory/….
  • 我对 Azure 数据工厂不是很熟悉(我是 Functions 团队的一员),但是您的链接服务是否可能因为基本 URL 返回 404 而出现问题?也许尝试将您的基本 URL srf-scadapa-fa2-windows.azurewebsites.net 并相应地编辑您的相对 URL?
  • @ConnorMcMahon 谢谢,我设法使用复制活动中的超时设置参数解决了这个问题

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


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2021-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-21
      相关资源
      最近更新 更多