共用方式為


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

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

應用程式概觀

下圖說明您在本教學課程中建置的解決方案所採用的工作流程︰

  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 Storage 中透過 Azure 事件中樞擷取事件
  • Azure 訂用帳戶。 如果您沒有 Azure 訂用帳戶,請在開始前建立免費帳戶
  • Visual Studio,搭配適用於 .NET 桌面開發、Azure 開發、ASP.NET和網頁開發、Node.js 開發及 Python 開發的工作負載。
  • EventHubsCaptureEventGridDemo 範例專案下載到您的電腦。
    • WindTurbineDataGenerator – 一個簡單的發行者,會將範例風力發電機資料傳送至已啟用擷取功能的事件中樞。
    • FunctionDWDumper – 一個 Azure 函式,會在 Avro 檔案被擷取至 Azure 儲存體 Blob 時收到 Azure 事件方格通知。 此函式會接收 Blob 的 URI 路徑、讀取其內容,並將此資料推送至 Azure Synapse Analytics (專用 SQL 集區)。

部署基礎結構

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

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

使用 Azure CLI 來部署基礎結構

  1. 登入 Azure 入口網站

  2. 選取位於最上方的 [Cloud Shell] 按鈕。

    Azure 入口網站 螢幕快照,其中顯示 [Cloud Shell] 按鈕的選取專案。

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

    1. 如果您是第一次使用 Cloud Shell:
      1. 如果您看到從 [Bash] 和 [PowerShell] 兩者中擇一的選項,請選取 [Bash]

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

        顯示建立 Cloud Shell 記憶體的螢幕快照。

      3. 等待 Cloud Shell 完成初始化。

        顯示 Cloud Shell 已初始化的螢幕快照。

  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 伺服器的名稱。
      • 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 視窗右上角的 X 按鈕,以關閉 Cloud Shell。

確認資源已建立

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

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

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

    顯示資源群組選取項目的螢幕快照。

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

    顯示資源群組中資源的螢幕快照。

在 Azure Synapse Analytics 中建立資料表

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

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

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

    顯示 Azure 入口網站 中專用 SQL 集區頁面上選取 查詢編輯器 的螢幕快照。

  3. 輸入 SQL 伺服器的使用者名稱密碼,然後選取 [確定]。 如果您看到有關允許用戶端存取 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);
    

    顯示查詢編輯器的螢幕快照。

  5. 讓此索引標籤或視窗保持開啟,以便您在本教學課程結尾處確認資料已建立。

發佈 Azure Functions 應用程式

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

取得發行設定檔

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

    此螢幕快照顯示資源群組資源清單中的函式應用程式選取專案。

  2. 在應用程式的 [函數應用程式] 頁面上,選取命令列上的 [取得發行設定檔]

    這個螢幕快照顯示函式應用程式頁面命令列上 [取得發佈設定檔] 按鈕的選取專案。

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

使用發行設定檔來發佈函數應用程式

  1. 啟動 Visual Studio。

  2. 開啟您為了符合必要條件而從 GitHub 下載的 EventHubsCaptureEventGridDemo.sln 解決方案。 您可以在 /samples/e2e/EventHubsCaptureEventGridDemo 資料夾中找到該解決方案。

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

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

  5. 在 [發佈] 對話方塊中,針對 [目標] 選取 [匯入設定檔],然後選取 [下一步]

    顯示 [發佈] 對話框上選取 [匯入配置檔] 的螢幕快照。

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

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

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

    顯示函式建立確認的螢幕快照。

發行函式之後,您已準備好訂閱事件。

訂閱事件

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

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

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

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

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

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

    事件中樞命名空間的 [事件] 頁面螢幕快照,其中已選取 [新增事件訂閱] 連結。

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

    1. 輸入事件訂閱的名稱。

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

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

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

    5. 在 [選取 Azure 函式] 頁面上,如果未自動填入內容,請依照下列步驟操作。

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

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

      [建立事件訂閱] 頁面的螢幕快照。

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

    顯示 [事件] 頁面上 [事件訂閱] 索引標籤的螢幕快照。

執行應用程式以產生資料

您已完成事件中樞、專用 SQL 集區 (先前稱為 SQL 資料倉儲)、Azure 函式應用程式及事件訂閱的設定。 在執行產生事件中樞資料的應用程式之前,您需要設定幾個值。

  1. 在 Azure 入口網站中,再次瀏覽至您的資源群組。

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

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

  4. 選取原則清單中的 RootManageSharedAccessKey

    此螢幕快照顯示事件中樞命名空間的 [共用存取原則] 頁面。

  5. 選取 [連接字串 - 主要金鑰] 文字方塊旁的複製按鈕。

  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]
    

    顯示查詢結果的螢幕快照。

重要

我們使用 連接字串 來驗證 Azure 事件中樞 命名空間,讓教學課程保持簡單。 建議您在生產環境中使用Microsoft Entra ID 驗證。 使用應用程式時,您可以啟用應用程式的受控識別,並在事件中樞命名空間上指派適當的角色(Azure 事件中樞 擁有者、Azure 事件中樞 數據傳送者或 Azure 事件中樞 數據接收者)。 如需詳細資訊,請參閱 使用 entra ID 授權存取事件中樞Microsoft。

監視解決方案

本節可協助您進行解決方案的監視或疑難排解。

在儲存體帳戶中檢視已擷取的資料

  1. 瀏覽至資源群組,然後選取用來擷取事件資料的儲存體帳戶。

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

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

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

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

  6. 深入瀏覽資料夾,您會看到 AVRO 檔案。 以下是範例:

    顯示記憶體中已擷取檔案的螢幕快照。

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

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

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

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

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

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

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

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

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

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

    顯示函式調用的螢幕快照。

  10. 選取叫用以查看詳細資料。

    Event Grid 會將事件資料散發給訂閱者。 下列範例顯示在 Blob 中擷取透過事件中樞串流的資料時所產生的事件資料。 請特別留意,data 物件中的 fileUrl 屬性會指向儲存體中的 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 集區中的資料表以找出遷移的資料。

顯示最終查詢結果的螢幕快照。

下一步