Как интегрировать веб-задание в конвейер фабрики данных Azure

Я пытаюсь интегрировать WebJob в конвейер ADF. Webjob - это очень простое консольное приложение:

namespace WebJob4
{
    class ReturnTest
    {
        static double CalculateArea(int r)
        {
            double area = r * r * Math.PI;
            return area;
        }

        static void Main()
        {
            int radius = 5;
            double result = CalculateArea(radius);
            Console.WriteLine("The area is {0:0.00}", result);       
        }
    }
}

Как вызвать это веб-задание через конвейер ADF и сохранить код ответа (HTTP 200 в случае успеха) в хранилище BLOB-объектов Azure?


person Carol    schedule 05.10.2017    source источник


Ответы (1)


Обновление за декабрь 2018 г .:

Если вы думаете о том, чтобы сделать это с помощью функции azure, фабрика данных azure NOW предоставляет вам шаг функции azure! лежащий в основе принцип тот же, что и вам нужно будет предоставить лазурную функцию с помощью триггера HTTP. однако это обеспечивает лучшую безопасность, поскольку вы можете указать доступ экземпляра фабрики данных к функции azure с помощью ACL

Ссылка: https://azure.microsoft.com/en-us/blog/azure-functions-now-supported-as-a-step-in-azure-data-factory-pipelines/


Оригинальный ответ

  • Из опубликованных комментариев я считаю, что вы не хотите использовать настраиваемый маршрут действий.
  • Вы можете попробовать использовать для этого задачу копирования, хотя, вероятно, это не является предполагаемой целью.
  • есть httpConnector доступный для копирования данных из веб-источника.

https://docs.microsoft.com/en-us/azure/data-factory/v1/data-factory-http-connector

  • задача копирования запускает конечную точку http,
  • вы можете указать различные механизмы аутентификации от Basic до OAuth2.
  • ниже я использую конечную точку для запуска процесса функции azure, вывод сохраняется в папке datalake для ведения журнала (очевидно, вы можете использовать другие вещи, например, в вашем случае это будет хранилище BLOB-объектов).

Базовая связанная служба

{
  "name": "linkedservice-httpEndpoint",
  "properties": {
    "type": "Http",
    "typeProperties": {
      "url": "https://azurefunction.api.com/",
      "authenticationType": "Anonymous"
    }
  }
}

Базовый набор входных данных

{
  "name": "Http-Request",
  "properties": {
    "type": "Http",
    "linkedServiceName": "linkedservice-httpEndpoint",
    "availability": {
      "frequency": "Minute",
      "interval": 30
    },
    "typeProperties": {
      "relativeUrl": "/api/status",
      "requestMethod": "Get",
      "format": {
        "type": "TextFormat",
        "columnDelimiter": ","
      }
    },
    "structure": [
      {
        "name": "Status",
        "type": "String"
      }
    ],
    "published": false,
    "external": true,
    "policy": {}
  }
}

Выход

{
    "name": "Http-Response",
    "properties": {
        "structure": [
            ...
        ],
        "published": false,
        "type": "AzureDataLakeStore",
        "linkedServiceName": "linkedservice-dataLake",
        "typeProperties": {
          ...
        },
        "availability": {
            ...
        },
        "external": false,
        "policy": {}
    }
}

Деятельность

{
        "type": "Copy",
        "name": "Trigger Azure Function or WebJob with Http Trigger",
        "scheduler": {
          "frequency": "Day",
          "interval": 1
        },
        "typeProperties": {
          "source": {
            "type": "HttpSource",
            "recursive": false
          },
          "sink": {
            "type": "AzureDataLakeStoreSink",
            "copyBehavior": "MergeFiles",
            "writeBatchSize": 0,
            "writeBatchTimeout": "00:00:00"
          }
        },
        "inputs": [
          {
            "name": "Http-Request"
          }
        ],
        "outputs": [
          {
            "name": "Http-Response"
          }
        ],
        "policy": {
          ...
        }        
      }
person frictionlesspulley    schedule 06.10.2017
comment
Спасибо @frictionlesspulley! Сработало ... Хотя в хранилище блобов просто файл 0Б. Я ожидал, что код ответа будет сохранен. Вы можете объяснить, почему он не сохранил ответ? - person Carol; 09.10.2017
comment
вы можете сделать это с помощью редактора копий, который также доступен на портале, он дает хорошее представление о том, какую часть ответа вы хотите сохранить. образец ^ в ответе сохраняет текст ответа. Возможно, в будущем возможна лучшая интеграция между функцией / веб-заданием azure и фабрикой данных ... ПРИНИМАЙТЕ ОТВЕТ;) - person frictionlesspulley; 09.10.2017
comment
Еще один вопрос к вам @frictionlesspulley .. почему имя шлюза необходимо в связанной службе? Отсутствие этого параметра приводит к сбою конвейера с ошибкой 409: удаленный сервер возвратил ошибку: (409) Конфликт., Источник = Система, '. Для источников OnPremise требуется имя шлюза, и это веб-задание - OnCloud. Любая идея? - person Carol; 10.10.2017
comment
шлюз не требуется. Я включил эти опции, чтобы показать, что вы можете их использовать при необходимости. ОБНОВЛЕНИЕ ОТВЕТА: проверьте базовый пример ввода, который работал у меня в прошлом - person frictionlesspulley; 10.10.2017