教學課程:使用 Azure 事件方格 和 Azure Functions 將事件中樞擷取的數據從 Azure 儲存體 遷移至 Azure Synapse Analytics

在本教學課程中,您將使用 Azure 事件方格 和 Azure Functions,將事件中樞擷取的數據從 Azure Blob 儲存體 遷移至 Azure Synapse Analytics,特別是專用 SQL 集區。

Application overview

此圖表描述您在本教學課程中建置之解決方案的工作流程:

  1. 傳送至 Azure 事件中樞的數據會在 Azure Blob 記憶體中擷取。
  2. 當數據擷取完成時,就會產生事件並傳送至 Azure 事件方格。
  3. Azure 事件方格 將此事件數據轉送至 Azure 函式應用程式。
  4. 函式應用程式會使用事件數據中的 Blob URL,從記憶體擷取 Blob。
  5. 函式應用程式會將 Blob 資料遷移至 Azure Synapse Analytics。

在本文中,您會採取下列步驟:

  • 部署教學課程所需的基礎結構
  • 將程式代碼發佈至 Functions 應用程式
  • 建立事件方格訂閱
  • 將範例數據串流至事件中樞
  • 確認 Azure Synapse Analytics 中擷取的數據

必要條件

若要完成本教學課程,您必須具備:

  • 本文假設您已熟悉事件方格和事件中樞(特別是擷取功能)。 如果您不熟悉 Azure 事件方格,請參閱 Azure 事件方格 簡介。 若要瞭解 Azure 事件中樞 的擷取功能,請參閱在 Azure Blob 儲存體 或 Azure Data Lake 儲存體 中透過 Azure 事件中樞 擷取事件。
  • Azure 訂用帳戶。 如果您沒有 Azure 訂用帳戶,請在開始前建立免費帳戶
  • 具有工作負載的Visual Studio :.NET桌面開發、Azure 開發、ASP.NET 和Web開發、Node.js開發,以及 Python 開發。
  • EventHubsCaptureEventGridDemo 範例項目 下載到您的電腦。
    • WindTurbineDataGenerator – 簡單的發行者,可將範例風力渦輪機數據傳送至已啟用擷取功能的事件中樞。
    • FunctionDWDumper – 當 Avro 檔案擷取至 Azure 儲存體 Blob 時,接收來自 Azure 事件方格 通知的 Azure 函式。 它會接收 Blob 的 URI 路徑、讀取其內容,並將此數據推送至 Azure Synapse Analytics(專用 SQL 集區)。

部署基礎結構

在此步驟中,您會使用 Resource Manager 範本部署必要的基礎結構。 當您部署範本時,會建立下列資源:

  • 已啟用擷取功能的事件中樞。
  • 儲存體 擷取檔案的帳戶。
  • 裝載函式應用程式的App Service 方案
  • 用於處理事件的函式應用程式
  • 裝載數據倉儲的 SQL Server
  • 用來儲存已遷移數據的 Azure Synapse Analytics (專用 SQL 集區)

使用 Azure CLI 部署基礎結構

  1. 登入 Azure 入口網站

  2. 選取 頂端的 [Cloud Shell ] 按鈕。

    Screenshot of Azure portal showing the selection of Cloud Shell button.

  3. 您會看到 Cloud Shell 在瀏覽器底部開啟。

    1. 如果您是第一次使用 Cloud Shell:
      1. 如果您看到在 Bash 與 PowerShell 之間選取的選項,請選取 [Bash]。

      2. 選取 [建立記憶體],以建立記憶體帳戶。 Azure Cloud Shell 需要 Azure 記憶體帳戶來儲存一些檔案。

        Screenshot showing the creation of storage for Cloud Shell.

      3. 等候 Cloud Shell 初始化。

        Screenshot showing the Cloud Shell initialized.

  4. 在 Cloud Shell 中,如果尚未選取 Bash,請選取 [Bash ],如上圖所示。

  5. 執行下列 CLI 命令來建立 Azure 資源群組:

    1. 將下列命令複製並貼到 Cloud Shell 視窗中。 如有需要,請變更資源組名和位置。

      az group create -l eastus -n rgDataMigration
      
    2. 按 ENTER 鍵 。

      以下是範例:

      user@Azure:~$ az group create -l eastus -n rgDataMigration
      {
        "id": "/subscriptions/00000000-0000-0000-0000-0000000000000/resourceGroups/rgDataMigration",
        "location": "eastus",
        "managedBy": null,
        "name": "rgDataMigration",
        "properties": {
          "provisioningState": "Succeeded"
        },
        "tags": null
      }
      
  6. 執行下列 CLI 命令,以部署上一節中提及的所有資源(事件中樞、記憶體帳戶、函式應用程式、Azure Synapse Analytics):

    1. 將命令複製並貼到 Cloud Shell 視窗中。 或者,您可以複製/貼到您選擇的編輯器、設定值,然後將命令複製到 Cloud Shell。 如果您看到因 Azure 資源名稱而發生錯誤,請刪除資源群組、修正名稱,然後再次重試命令。

      重要

      在執行 命令之前,請先指定下列實體的值:

      • 您稍早建立的資源群組名稱。
      • 事件中樞命名空間的名稱。
      • 事件中樞的名稱。 您可以將值保留為 (hubdatamigration)。
      • SQL Server 的名稱。
      • SQL 用戶和密碼的名稱。
      • 資料庫的名稱。
      • 儲存體帳戶的名稱。
      • 函式應用程式的名稱。
      az deployment group create \
          --resource-group rgDataMigration \
          --template-uri https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/event-grid/EventHubsDataMigration.json \
          --parameters eventHubNamespaceName=<event-hub-namespace> eventHubName=hubdatamigration sqlServerName=<sql-server-name> sqlServerUserName=<user-name> sqlServerPassword=<password> sqlServerDatabaseName=<database-name> storageName=<unique-storage-name> functionAppName=<app-name>
      
    2. 在 Cloud Shell 視窗中按 ENTER 鍵以執行命令。 此程式可能需要一些時間,因為您正在建立一堆資源。 在命令的結果中,請確定沒有任何失敗。

  7. 選取 Cloud Shell 視窗右上角的 [Cloud Shell] 按鈕,以關閉 Cloud Shell

確認資源已建立

  1. 在 Azure 入口網站中,選取左側功能表中的 [資源群組]

  2. 在搜尋方塊中輸入資源群組的名稱,以篩選資源群組清單。

  3. 在清單中選取您的資源群組。

    Screenshot showing the selection of your resource group.

  4. 確認您在資源群組中看到下列資源:

    Screenshot showing resources in the resource group.

在 Azure Synapse Analytics 中建立數據表

在本節中,您會在稍早建立的專用 SQL 集區中建立數據表。

  1. 在資源群組中的資源清單中,選取您的 專用 SQL 集區

  2. 在 [專用 SQL 集區] 頁面上,於左側功能表中的 [一般工作] 區段中,選取 [查詢編輯器][預覽]。

    Screenshot showing the selection of Query Editor on a Dedicated SQL pool page in the Azure portal.

  3. 輸入 SQL Server 的使用者和密碼名稱,然後選取 [確定]。 如果您看到允許用戶端存取 SQL Server 的訊息,請選取 [允許列出 SQL Server> 上的 <IP <位址>] ,然後選取 [確定]。

  4. 在查詢視窗中,複製並執行下列 SQL 文稿:

    CREATE TABLE [dbo].[Fact_WindTurbineMetrics] (
        [DeviceId] nvarchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
        [MeasureTime] datetime NULL,
        [GeneratedPower] float NULL,
        [WindSpeed] float NULL,
        [TurbineSpeed] float NULL
    )
    WITH (CLUSTERED COLUMNSTORE INDEX, DISTRIBUTION = ROUND_ROBIN);
    

    Screenshot showing the query editor.

  5. 將此索引標籤或視窗保持開啟,以便確認數據已在教學課程結尾建立。

發佈 Azure Functions 應用程式

首先,從 Azure 入口網站 取得 Functions 應用程式的發行配置檔。 然後,使用發佈配置檔從 Visual Studio 發佈 Azure Functions 專案或應用程式。

取得發行設定檔

  1. 在 [ 資源群組 ] 頁面上,選取 資源清單中的 Azure Functions 應用程式

    Screenshot showing the selection of the function app in the list of resources for a resource group.

  2. 在應用程式的 [ 函式應用程式] 頁面上,選取 命令行上的 [取得發佈配置檔 ]。

    Screenshot showing the selection of the **Get Publish Profile** button on the command bar of the function app page.

  3. 下載檔案並將其儲存到 EventHubsCaptureEventGridDemo 資料夾的 FunctionEGDDumper 子資料夾中。

使用發佈配置檔發佈 Functions 應用程式

  1. 啟動 Visual Studio。

  2. 開啟您從 GitHub 下載的EventHubsCaptureEventGridDemo.sln解決方案,作為必要條件的一部分。 您可以在資料夾中找到它 /samples/e2e/EventHubsCaptureEventGridDemo

  3. 在 [方案總管] 中,以滑鼠右鍵按兩下 [FunctionEGDWDumper] 項目,然後選取 [發佈]。

  4. 在下列畫面中,選取 [開始] 或 [新增發行配置檔]。

  5. 在 [發佈] 對話框中,選取 [目標匯入配置檔],然後選取 [下一步]。

    Screenshot showing the selection **Import Profile** on the **Publish** dialog box.

  6. 在 [匯入配置檔] 索引標籤上,選取您稍早在 FunctionEGDWDumper 資料夾中儲存的發佈配置檔,然後選取 [完成]。

  7. 當 Visual Studio 設定設定檔時,請選取 [ 發佈]。 確認發行成功。

  8. 在開啟 Azure 函式頁面的網頁瀏覽器中,選取中間窗格中的 [函式]。 確認 EventGridTriggerMigrateData 函式會顯示在清單中。 如果您沒有看到,請再次嘗試從 Visual Studio 發佈,然後在入口網站中重新整理頁面。

    Screenshot showing the confirmation of function creation.

發佈函式之後,您就可以訂閱事件。

訂閱事件

  1. 在網頁瀏覽器的新索引標籤或新視窗中,登入 Azure 入口網站

  2. 在 Azure 入口網站中,選取左側功能表中的 [資源群組]

  3. 在搜尋方塊中輸入資源群組的名稱,以篩選資源群組清單。

  4. 在清單中選取您的資源群組。

  5. 從資源清單中選取事件中樞命名空間

  6. 在 [事件中 樞命名空間] 頁面上,選取 左側功能表上的 [事件 ],然後在工具欄上選取 [+ 事件訂閱 ]。

    Screenshot of the Events page for an Event Hubs namespace with Add event subscription link selected.

  7. 在 [ 建立事件訂閱 ] 頁面上,遵循下列步驟:

    1. 輸入事件訂帳戶的名稱。

    2. 輸入系統主題的名稱。 系統主題提供傳送事件的傳送者端點。 如需詳細資訊,請參閱 系統主題

    3. 針對 [ 端點類型],選取 [Azure 函式]。

    4. 針對 [端點],選取連結。

    5. 在 [ 選取 Azure 函式 ] 頁面上,如果未自動填入這些步驟,請遵循這些步驟。

      1. 選取具有 Azure 函式的 Azure 訂用帳戶。
      2. 選取函式的資源群組。
      3. 選取函式應用程式。
      4. 選取部署位置。
      5. 選取 EventGridTriggerMigrateData 函式
    6. 在 [ 選取 Azure 函式 ] 頁面上,選取 [ 確認選取專案]。

    7. 然後,回到 [ 建立事件訂閱 ] 頁面上,選取 [ 建立]。

      Screenshot of the Create an event subscription page.

  8. 確認已建立事件訂用帳戶。 切換至事件中樞命名空間之 [事件] 頁面上的 [事件訂閱] 索引標籤。

    Screenshot showing the Event Subscriptions tab on the Events page.

執行應用程式以產生數據

您已完成設定事件中樞、奉獻 SQL 集區(先前稱為 SQL 數據倉儲)、Azure 函式應用程式和事件訂用帳戶。 在執行產生事件中樞資料的應用程式之前,您需要設定一些值。

  1. 在 Azure 入口網站 中,流覽至您的資源群組,就像您稍早所做的一樣。

  2. 選取事件中樞命名空間。

  3. 在 [事件中 樞命名空間] 頁面中,選取 左側功能表上的 [共用存取原則 ]。

  4. 在原則清單中選取 [RootManageSharedAccessKey ]。

    Screenshot showing the Shared access policies page for an Event Hubs namespace.

  5. 選取 [連線 ion string-primary key] 文本框旁的 [複製] 按鈕。

  6. 返回您的 Visual Studio 解決方案。

  7. 以滑鼠右鍵按兩下 WindTurbineDataGenerator 專案,然後選取 [ 設定為啟始專案]。

  8. 在WindTurbineDataGenerator專案中,開啟 [program.cs]。

  9. 將取代<EVENT HUBS NAMESPACE CONNECTION STRING>為您從入口網站複製的 連接字串。

  10. 如果您已針對 以外的 hubdatamigration事件中樞使用不同的名稱,請將 取代 <EVENT HUB NAME> 為事件中樞的名稱。

    private const string EventHubConnectionString = "Endpoint=sb://demomigrationnamespace.servicebus.windows.net/...";
    private const string EventHubName = "hubdatamigration";
    
  11. 建置方案。 執行WindTurbineGenerator.exe應用程式。

  12. 幾分鐘后,在您開啟查詢視窗的其他瀏覽器索引標籤中,查詢數據倉儲中的數據表以取得已移轉的數據。

    select * from [dbo].[Fact_WindTurbineMetrics]
    

    Screenshot showing the query results.

監視解決方案

本節可協助您監視或疑難解答解決方案。

檢視記憶體帳戶中擷取的數據

  1. 流覽至資源群組,然後選取用來擷取事件數據的記憶體帳戶。

  2. [儲存體 帳戶] 頁面上,選取左側功能表上的 儲存體 瀏覽器

  3. 展開 [BLOB 容器],然後選取 [windturbinecapture]。

  4. 在右窗格中開啟與事件中樞命名空間相同的資料夾。

  5. 開啟與事件中樞相同的資料夾(hubdatamigration)。

  6. 鑽研資料夾,您會看到AVRO檔案。 以下是範例:

    Screenshot showing the captured file in the storage.

確認事件方格觸發程式叫用函式

  1. 瀏覽至資源群組,然後選取函式應用程式。

  2. 選取 中間窗格中的 [函式 ] 索引標籤。

  3. 從清單中選取 EventGridTriggerMigrateData 函式。

  4. 在 [ 函式 ] 頁面上,選取 左側功能表上的 [監視 ]。

  5. 選取 [ 設定 ] 以設定 Application Insights 以擷取叫用記錄。

  6. 建立新的 Application Insights 資源或使用現有的資源。

  7. 流覽回 函式的 [監視] 頁面。

  8. 確認正在傳送事件的用戶端應用程式 (WindTurbineDataGenerator) 仍在執行中。 如果沒有,請執行應用程式。

  9. 等候幾分鐘(5 分鐘以上),然後選取 [ 重新 整理] 按鈕以查看函式調用。

    Screenshot showing the Function invocations.

  10. 選取調用以查看詳細數據。

    事件方格會將事件數據散發給訂閱者。 下列範例示範在 Blob 中擷取透過事件中樞串流數據時所產生的事件數據。 特別請注意 fileUrl ,物件中的 data 屬性會指向記憶體中的 Blob。 函式應用程式會使用此 URL 來擷取具有所擷取數據的 Blob 檔案。

    {
      "topic": "/subscriptions/<AZURE SUBSCRIPTION ID>/resourcegroups/rgDataMigration/providers/Microsoft.EventHub/namespaces/spehubns1207",
      "subject": "hubdatamigration",
      "eventType": "Microsoft.EventHub.CaptureFileCreated",
      "id": "4538f1a5-02d8-4b40-9f20-36301ac976ba",
      "data": {
        "fileUrl": "https://spehubstorage1207.blob.core.windows.net/windturbinecapture/spehubns1207/hubdatamigration/0/2020/12/07/21/49/12.avro",
        "fileType": "AzureBlockBlob",
        "partitionId": "0",
        "sizeInBytes": 473444,
        "eventCount": 2800,
        "firstSequenceNumber": 55500,
        "lastSequenceNumber": 58299,
        "firstEnqueueTime": "2020-12-07T21:49:12.556Z",
        "lastEnqueueTime": "2020-12-07T21:50:11.534Z"
      },
      "dataVersion": "1",
      "metadataVersion": "1",
      "eventTime": "2020-12-07T21:50:12.7065524Z"
    }
    

確認數據儲存在專用 SQL 集區中

在開啟查詢視窗的瀏覽器索引標籤中,查詢專用SQL集區中的數據表以取得已移轉的數據。

Screenshot showing the final query results.

下一步