教學課程:使用 Azure 事件方格和 Azure Functions 將事件中樞擷取的資料從 Azure 儲存體移轉至 Azure Synapse Analytics
在本教學課程中,您將使用 Azure 事件方格和 Azure Functions,將事件中樞擷取的資料從 Azure Blob 儲存體移轉至 Azure Synapse Analytics,特別是專用 SQL 集區。
下圖說明您在本教學課程中建置的解決方案所採用的工作流程︰
- 將傳送至 Azure 事件中樞的資料擷取到 Azure Blob 儲存體中。
- 資料擷取完成時就會產生事件,並傳送至 Azure 事件方格。
- Azure 事件方格會將此事件資料轉接至 Azure 函式應用程式。
- 此函式應用程式會使用事件資料中的 Blob URL 來擷取儲存體中的 Blob。
- 函式應用程式會將 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 來部署基礎結構
登入 Azure 入口網站。
選取位於最上方的 [Cloud Shell] 按鈕。
您會看到 Cloud Shell 在瀏覽器底部開啟。
在 Cloud Shell 中,如果尚未選取 Bash,請選取 [Bash],如上圖所示。
執行下列 CLI 命令以建立 Azure 資源群組:
複製下列命令並貼到 Cloud Shell 視窗中。 視需要變更資源群組名稱和位置。
az group create -l eastus -n rgDataMigration
按 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 }
執行下列 CLI 命令,以部署上一節中提到的所有資源 (事件中樞、儲存體帳戶、函式應用程式、Azure Synapse Analytics):
複製下列命令並貼到 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>
在 Cloud Shell 視窗中按 ENTER 鍵,以執行命令。 此流程可能需要一些時間,因為您會建立大量資源。 在命令的結果中,確定沒有任何失敗的狀況。
選取入口網站中的 Cloud Shell 按鈕 (或) Cloud Shell 視窗右上角的 X 按鈕,以關閉 Cloud Shell。
確認資源已建立
在 Azure Synapse Analytics 中建立資料表
在本節中,您會在稍早建立的專用 SQL 集區中建立資料表。
在資源群組中的資源清單內,選取您的專用 SQL 集區。
在 [專用 SQL 集區] 頁面上,從左側功能表的 [一般工作] 區段中選取 [查詢編輯器 (預覽)]。
輸入 SQL 伺服器的使用者名稱和密碼,然後選取 [確定]。 如果您看到有關允許用戶端存取 SQL Server 的訊息,請選取 [允許列出 SQL Server 上的 IP 位址]<><>,然後選取 [確定]。
在查詢視窗中,複製並執行下列 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);
讓此索引標籤或視窗保持開啟,以便您在本教學課程結尾處確認資料已建立。
發佈 Azure Functions 應用程式
首先,從 Azure 入口網站取得函數應用程式的發行設定檔。 然後,使用發行設定檔從 Visual Studio 發佈 Azure Functions 專案或應用程式。
取得發行設定檔
在 [資源群組] 頁面上,選取資源清單中的 [Azure Functions 應用程式]。
在應用程式的 [函數應用程式] 頁面上,選取命令列上的 [取得發行設定檔]。
下載並將檔案儲存到 [EventHubsCaptureEventGridDemo] 資料夾的 [FunctionEGDDumper] 子資料夾中。
使用發行設定檔來發佈函數應用程式
啟動 Visual Studio。
開啟您為了符合必要條件而從 GitHub 下載的 EventHubsCaptureEventGridDemo.sln 解決方案。 您可以在
/samples/e2e/EventHubsCaptureEventGridDemo
資料夾中找到該解決方案。在 [方案總管] 中,以滑鼠右鍵按一下 FunctionEGDWDumper 專案,然後選取 [發佈]。
在下列畫面中,選取 [開始] 或 [新增發行設定檔]。
在 [發佈] 對話方塊中,針對 [目標] 選取 [匯入設定檔],然後選取 [下一步]。
在 [匯入設定檔] 索引標籤上,選取您稍早在 [FunctionEGDWDumper] 資料夾中儲存的發佈設定檔,然後選取 [完成]。
當 Visual Studio 完成設定檔設定時,選取 [發佈]。 確認發佈成功。
在開啟的 [Azure 函式] 的網頁瀏覽器頁面中,選取中間窗格中的 [函式]。 確認 EventGridTriggerMigrateData 函式顯示在清單中。 若未看到,請嘗試從 Visual Studio 重新發佈,然後重新整理入口網站中的頁面。
發行函式之後,您已準備好訂閱事件。
訂閱事件
在網頁瀏覽器的新索引標籤或新視窗中,登入 Azure 入口網站。
在 Azure 入口網站中,選取左側功能表中的 [資源群組]。
在搜尋方塊中輸入您資源群組的名稱,以篩選資源群組的清單。
在清單中選取您的資源群組。
從資源清單中選取 [事件中樞命名空間]。
在 [事件中樞命名空間] 頁面上,選取左側功能表上的 [事件],然後在工具列上選取 [+ 事件訂閱]。
在 [建立事件訂閱] 頁面上,遵循下列步驟:
輸入事件訂閱的名稱。
輸入系統主題的名稱。 系統主題會提供一個端點供傳送者傳送事件。 如需詳細資訊,請參閱系統主題
針對 [端點類型],選取 [Azure 函式]。
針對 [端點],選取連結。
在 [選取 Azure 函式] 頁面上,如果未自動填入內容,請依照下列步驟操作。
- 選取具有 Azure 函式的 Azure 訂用帳戶。
- 選取函式的資源群組。
- 選取函式應用程式。
- 選取部署位置。
- 選取 EventGridTriggerMigrateData 函式。
在 [選取 Azure 函式] 頁面上,選取 [確認選取項目]。
然後回到 [建立事件訂閱] 頁面,選取 [建立]。
確認已建立事件訂閱。 在事件中樞命名空間的 [事件] 頁面上,切換至 [事件訂閱] 索引標籤。
執行應用程式以產生資料
您已完成事件中樞、專用 SQL 集區 (先前稱為 SQL 資料倉儲)、Azure 函式應用程式及事件訂閱的設定。 在執行產生事件中樞資料的應用程式之前,您需要設定幾個值。
在 Azure 入口網站中,再次瀏覽至您的資源群組。
選取事件中樞命名空間。
在 [事件中樞命名空間] 頁面中,選取左側功能表上的 [共用存取原則]。
選取原則清單中的 RootManageSharedAccessKey。
選取 [連接字串 - 主要金鑰] 文字方塊旁的複製按鈕。
返回您的 Visual Studio 解決方案。
以滑鼠右鍵按一下 WindTurbineDataGenerator 專案,然後選取 [設定為啟始專案]。
在 WindTurbineDataGenerator 專案中,開啟 program.cs。
將
<EVENT HUBS NAMESPACE CONNECTION STRING>
取代為您從入口網站複製的連接字串。如果您為事件中樞使用了不同於
hubdatamigration
的名稱,請用事件中樞的名稱取代<EVENT HUB NAME>
。private const string EventHubConnectionString = "Endpoint=sb://demomigrationnamespace.servicebus.windows.net/..."; private const string EventHubName = "hubdatamigration";
建置方案。 執行 WindTurbineGenerator.exe 應用程式。
經過幾分鐘之後,在已開啟查詢視窗的另一個瀏覽器索引標籤中,查詢資料倉儲中的資料表以找出遷移的資料。
select * from [dbo].[Fact_WindTurbineMetrics]
重要
我們使用 連接字串 來驗證 Azure 事件中樞 命名空間,讓教學課程保持簡單。 建議您在生產環境中使用Microsoft Entra ID 驗證。 使用應用程式時,您可以啟用應用程式的受控識別,並在事件中樞命名空間上指派適當的角色(Azure 事件中樞 擁有者、Azure 事件中樞 數據傳送者或 Azure 事件中樞 數據接收者)。 如需詳細資訊,請參閱 使用 entra ID 授權存取事件中樞Microsoft。
監視解決方案
本節可協助您進行解決方案的監視或疑難排解。
在儲存體帳戶中檢視已擷取的資料
瀏覽至資源群組,然後選取用來擷取事件資料的儲存體帳戶。
在 [儲存體帳戶] 頁面上,選取左側功能表上的 [儲存體瀏覽器]。
展開 [BLOB 容器],然後選取 [windturbinecapture]。
在右窗格中,開啟與您的事件中樞命名空間同名的資料夾。
開啟與您的事件中樞同名的資料夾 (hubdatamigration)。
深入瀏覽資料夾,您會看到 AVRO 檔案。 以下是範例:
確認事件方格觸發程序已叫用函式
瀏覽至資源群組,然後選取函式應用程式。
選取中間窗格中的 [函式] 索引標籤。
從清單中選取 EventGridTriggerMigrateData 函式。
在 [函式] 頁面上,選取左側功能表上的 [監視器]。
選取 [設定] 進行 Application Insights 設定,以擷取叫用記錄。
建立新的 Application Insights 資源,或使用現有的資源。
瀏覽回函式的 [監視器] 頁面。
確認正在傳送事件的用戶端應用程式 (WindTurbineDataGenerator) 仍在執行中。 若非如此,請執行應用程式。
等候幾分鐘 (5 分鐘或更久),然後選取 [重新整理] 按鈕以查看函式叫用。
選取叫用以查看詳細資料。
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 集區中的資料表以找出遷移的資料。
下一步
- 如需設定及執行範例的詳細資訊,請參閱事件中樞擷取和 Event Grid 範例。
- 在本教學課程中,您已為
CaptureFileCreated
事件建立事件訂用帳戶。 如需此事件及 Azure Blob 儲存體所支援之所有事件的詳細資訊,請參閱 Azure 事件中樞作為事件方格來源。 - 若要了解更多有關事件中樞擷取功能的資訊,請參閱在 Azure Blob 儲存體或 Azure Data Lake Storage 中透過 Azure 事件中樞擷取事件。