使用 Azure Data Factory 或 Azure Synapse Analytics 從 HTTP 端點複製資料

適用於:Azure Data Factory Azure Synapse Analytics

提示

試用 Microsoft Fabric 中的 Data Factory,這是適用於企業的全方位分析解決方案。 Microsoft Fabric 涵蓋從資料移動到資料科學、即時分析、商業智慧和報告的所有項目。 了解如何免費開始新的試用

本文概述如何使用 Azure Data Factory 和 Azure Synapse 中的「複製活動」,從 HTTP 端點複製資料。 本文是以複製活動為基礎,該文提供複製活動的一般概觀。

此 HTTP 連接器、REST 連接器Web 資料表連接器之間的差異是:

  • REST 連接器專門支援從 RESTful API 複製資料;
  • HTTP 連接器一般用來從任何 HTTP 端點擷取資料,例如下載檔案。 在 REST 連接器可供使用之前,您可能會使用 HTTP 連接器從 RESTful API 複製資料,這是可支援的方式,但功能性比 REST 連接器低。
  • Web 資料表連接器從 HTML 網頁擷取資料表內容。

支援的功能

此 HTTP 連接器支援下列功能:

支援的功能 IR
複製活動 (來源/-) ① ②
查閱活動 ① ②

① Azure 整合執行階段 ② 自我裝載整合執行階段

如需支援做為來源/接收器的資料存放區清單,請參閱支援的資料存放區

您可以使用此 HTTP 連接器來:

  • 使用 HTTP GETPOST 方法,從 HTTP/S 端點擷取資料。
  • 使用下列其中一種驗證來擷取資料︰匿名基本摘要WindowsClientCertificate
  • 依原樣複製 HTTP 回應,或使用支援的檔案格式和壓縮轉碼器來剖析回應。

提示

若要在設定 HTTP 連接器之前,先測試擷取資料的 HTTP 要求,請先了解標頭和本文需求的 API 規格。 您可以使用 Postman 或網頁瀏覽器之類的工具進行驗證。

必要條件

如果您的資料存放區位於內部部署網路、Azure 虛擬網路或 Amazon 虛擬私人雲端中,則必須設定自我裝載整合執行階段以與其連線。

如果您的資料存放區是受控雲端資料服務,則可使用 Azure Integration Runtime。 如果只能存取防火牆規則中核准的 IP,您可以將 Azure Integration Runtime IP 新增至允許清單。

您也可以使用 Azure Data Factory 中的受控虛擬網路整合執行階段功能來存取內部部署網路,而不需要安裝和設定自我裝載整合執行階段。

如需 Data Factory 支援的網路安全性機制和選項的詳細資訊,請參閱資料存取策略

開始使用

若要透過管線執行複製活動,您可以使用下列其中一個工具或 SDK:

使用 UI 建立 HTTP 來源的連結服務

使用下列步驟,在 Azure 入口網站 UI 中建立連結到 HTTP 來源的服務。

  1. 前往 Azure Data Factory 或 Synapse 工作區的 [管理] 索引標籤,選取 [連結服務],然後按一下 [新增]:

  2. 搜尋 HTTP 並選取 HTTP 連接器。

    Screenshot of the HTTP connector.

  3. 設定服務詳細資料,測試連線,然後建立新的連結服務。

    Screenshot of configuration for an HTTP linked service.

連接器設定詳細資料

下列各節提供屬性的相關詳細資料,您可使用這些屬性來定義 Netezza 連接器特有的實體。

連結服務屬性

以下是針對 HTTP 連結服務支援的屬性:

屬性 描述 必要
type type 屬性必須設定為 HttpServer Yes
URL Web 伺服器的基底 URL。 Yes
enableServerCertificateValidation 指定是否在您連線到 HTTP 端點時,啟用伺服器 TLS/SSL 憑證驗證。 如果 HTTPS 伺服器使用自我簽署的憑證,請將此屬性設定為 false No
(預設值為 true)
authenticationType 指定驗證類型。 允許的值為匿名基本摘要WindowsClientCertificate。 您可以在 authHeader 屬性中額外設定驗證標頭。 如需更多關於這些驗證類型的屬性和 JSON 範例,請參閱此表格後面幾節。 Yes
authHeaders 用於驗證的其他 HTTP 要求標頭。
例如,若要使用 API 金鑰驗證,您可以選取驗證類型 “Anonymous”,並在標頭中指定 API 金鑰。
No
connectVia 用來連線到資料存放區的整合執行階段。 從必要條件一節深入了解。 如果未指定,則會使用預設的 Azure Integration Runtime。 No

使用基本、摘要或 Windows 驗證

authenticationType 屬性設定為 [基本]、[摘要] 或 [Windows]。 除了上一節所述的一般屬性以外,請指定下列屬性:

屬性 描述 必要
userName 用來存取 HTTP 端點的使用者名稱。 Yes
password 使用者 (userName 值) 的密碼。 將此欄位標記為 SecureString 類型以將其安全地儲存。 您也可以參考 Azure Key Vault 中儲存的認證 Yes

範例

{
    "name": "HttpLinkedService",
    "properties": {
        "type": "HttpServer",
        "typeProperties": {
            "authenticationType": "Basic",
            "url" : "<HTTP endpoint>",
            "userName": "<user name>",
            "password": {
                "type": "SecureString",
                "value": "<password>"
            }
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

使用 ClientCertificate 驗證

若要使用 ClientCertificate 驗證,請將 authenticationType 屬性設定為 ClientCertificate。 除了上一節所述的一般屬性以外,請指定下列屬性:

屬性 描述 必要
embeddedCertData Base64 編碼的憑證資料。 指定 embeddedCertDatacertThumbprint
certThumbprint 憑證指紋已安裝在自我裝載整合執行階段機器的憑證存放區上。 只有當 connectVia 屬性中已指定自我裝載整合執行階段時才適用。 指定 embeddedCertDatacertThumbprint
password 與憑證相關聯的密碼。 將此欄位標記為 SecureString 類型以將其安全地儲存。 您也可以參考 Azure Key Vault 中儲存的認證 No

如果您使用 certThumbprint 進行驗證,且憑證已安裝在本機電腦的個人存放區中,請將讀取權限授予自我裝載整合執行階段︰

  1. 開啟 Microsoft Management Console (MMC)。 新增目標為 [本機電腦] 的 [憑證] 嵌入式管理單元。
  2. 展開 [憑證]>[個人],然後選取 [憑證]
  3. 以滑鼠右鍵按一下個人存放區中的 [憑證],然後選取 [所有工作]>[管理私密金鑰]
  4. 在 [安全性] 索引標籤上,新增使用憑證讀取存取全執行整合執行階段主機服務 (DIAHostService) 的使用者帳戶。
  5. HTTP 連接器只會載入受信任的憑證。 如果您使用的是自我簽署或未整合的 CA 發行憑證,若要啟用信任,憑證也必須安裝在下列其中一個存放區內:
    • 受信任的人
    • 第三方根憑證授權單位
    • 受信任的根憑證授權單位

範例 1:使用 certThumbprint

{
    "name": "HttpLinkedService",
    "properties": {
        "type": "HttpServer",
        "typeProperties": {
            "authenticationType": "ClientCertificate",
            "url": "<HTTP endpoint>",
            "certThumbprint": "<thumbprint of certificate>"
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

範例 2:使用 embeddedCertData

{
    "name": "HttpLinkedService",
    "properties": {
        "type": "HttpServer",
        "typeProperties": {
            "authenticationType": "ClientCertificate",
            "url": "<HTTP endpoint>",
            "embeddedCertData": "<Base64-encoded cert data>",
            "password": {
                "type": "SecureString",
                "value": "password of cert"
            }
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

使用驗證標頭

此外,您可以設定驗證的要求標頭,以及內建驗證類型。

範例:使用 API 金鑰驗證

{
    "name": "HttpLinkedService",
    "properties": {
        "type": "HttpServer",
        "typeProperties": {
            "url": "<HTTP endpoint>",
            "authenticationType": "Anonymous",
            "authHeader": {
                "x-api-key": {
                    "type": "SecureString",
                    "value": "<API key>"
                }
            }
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

資料集屬性

如需可用來定義資料集的區段和屬性完整清單,請參閱資料集一文。

Azure Data Factory 支援下列檔案格式。 請參閱每篇文章,以取得以格式為基礎的設定。

在格式型資料集內的 location 設定下,HTTP 支援下列屬性:

屬性 描述 必要
type 資料集內 location 之下的 type 屬性必須設定為 HttpServerLocation Yes
relativeUrl 包含資料之資源的相對 URL。 HTTP 連接器會從合併的 URL 複製資料:[URL specified in linked service][relative URL specified in dataset] No

注意

支援的 HTTP 要求承載大小是大約 500 KB。 如果您希望傳遞至 Web 端點的承載大小大於 500 KB,請考慮將承載分批處理成較小的區塊。

範例:

{
    "name": "DelimitedTextDataset",
    "properties": {
        "type": "DelimitedText",
        "linkedServiceName": {
            "referenceName": "<HTTP linked service name>",
            "type": "LinkedServiceReference"
        },
        "schema": [ < physical schema, optional, auto retrieved during authoring > ],
        "typeProperties": {
            "location": {
                "type": "HttpServerLocation",
                "relativeUrl": "<relative url>"
            },
            "columnDelimiter": ",",
            "quoteChar": "\"",
            "firstRowAsHeader": true,
            "compressionCodec": "gzip"
        }
    }
}

複製活動屬性

本節提供 HTTP 來源所支援的屬性清單。

如需可用來定義活動的區段和屬性完整清單,請參閱管線

HTTP 作為來源

Azure Data Factory 支援下列檔案格式。 請參閱每篇文章,以取得以格式為基礎的設定。

在格式型複製來源的 storeSettings 設定下,HTTP 支援下列屬性:

屬性 描述 必要
type storeSettings 下的 type 屬性必須設定為 HttpReadSettings Yes
requestMethod HTTP 方法。
允許的值為 Get (預設值) 和 Post
No
additionalHeaders 其他 HTTP 要求標頭。 No
requestBody HTTP 要求的主體。 No
httpRequestTimeout 用來取得回應的 HTTP 要求會有的逾時值 (TimeSpan 值)。 此值是取得回應的逾時值,而非讀取回應資料的逾時值。 預設值為 00:01:40 No
maxConcurrentConnections 在活動執行期間建立至資料存放區的同時連線上限。 僅在想要限制並行連線時,才需要指定值。 No

範例:

"activities":[
    {
        "name": "CopyFromHTTP",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<Delimited text input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "DelimitedTextSource",
                "formatSettings":{
                    "type": "DelimitedTextReadSettings",
                    "skipLineCount": 10
                },
                "storeSettings":{
                    "type": "HttpReadSettings",
                    "requestMethod": "Post",
                    "additionalHeaders": "<header key: header value>\n<header key: header value>\n",
                    "requestBody": "<body for POST HTTP request>"
                }
            },
            "sink": {
                "type": "<sink type>"
            }
        }
    }
]

查閱活動屬性

若要了解屬性的詳細資料,請參閱查閱活動

舊版模型

注意

基於回溯相容性,仍照現狀支援下列模型。 建議您繼續使用以上各節所述的新模型,且製作 UI 已切換為產生新模型。

舊版資料集模型

屬性 描述 必要
type 資料集的 type 屬性必須設定為 HttpFile Yes
relativeUrl 包含資料之資源的相對 URL。 若未指定此屬性,則只會使用在連結服務定義中指定的 URL。 No
requestMethod HTTP 方法。 允許的值為 Get (預設值) 和 Post No
additionalHeaders 其他 HTTP 要求標頭。 No
requestBody HTTP 要求的主體。 No
format 如果您想要依原樣擷取 HTTP 端點的資料而不進行剖析,然後將資料複製到以檔案為基礎的存放區,請略過輸入和輸出資料集定義中的 format 區段。

如果您想要在複製期間剖析 HTTP 回應內容,支援下列檔案格式類型:TextFormatJsonFormatAvroFormatOrcFormatParquetFormat。 在 format 之下,將 type 屬性設定為上述其中一個值。 如需詳細資訊,請參閱 JSON 格式文字格式Avro 格式Orc 格式Parquet 格式
No
壓縮 指定此資料的壓縮類型和層級。 如需詳細資訊,請參閱支援的檔案格式和壓縮轉碼器

支援的類型:GZipDeflateBZip2ZipDeflate
支援的層級:OptimalFastest
No

注意

支援的 HTTP 要求承載大小是大約 500 KB。 如果您希望傳遞至 Web 端點的承載大小大於 500 KB,請考慮將承載分批處理成較小的區塊。

範例 1:使用 Get 方法 (預設值)

{
    "name": "HttpSourceDataInput",
    "properties": {
        "type": "HttpFile",
        "linkedServiceName": {
            "referenceName": "<HTTP linked service name>",
            "type": "LinkedServiceReference"
        },
        "typeProperties": {
            "relativeUrl": "<relative url>",
            "additionalHeaders": "Connection: keep-alive\nUser-Agent: Mozilla/5.0\n"
        }
    }
}

範例 2︰使用 Post 方法

{
    "name": "HttpSourceDataInput",
    "properties": {
        "type": "HttpFile",
        "linkedServiceName": {
            "referenceName": "<HTTP linked service name>",
            "type": "LinkedServiceReference"
        },
        "typeProperties": {
            "relativeUrl": "<relative url>",
            "requestMethod": "Post",
            "requestBody": "<body for POST HTTP request>"
        }
    }
}

舊版複製活動來源模型

屬性 描述 必要
type 複製活動來源的 type 屬性必須設定為 HttpSource Yes
httpRequestTimeout 用來取得回應的 HTTP 要求會有的逾時值 (TimeSpan 值)。 此值是取得回應的逾時值,而非讀取回應資料的逾時值。 預設值為 00:01:40 No

範例

"activities":[
    {
        "name": "CopyFromHTTP",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<HTTP input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "HttpSource",
                "httpRequestTimeout": "00:01:00"
            },
            "sink": {
                "type": "<sink type>"
            }
        }
    }
]

如需複製活動作為來源和接收端支援的資料存放區清單,請參閱支援的資料存放區和格式