快速入門:使用 Visual Studio Code 建立串流分析作業
此快速入門說明如何在您的本機電腦中使用適用於 Visual Studio Code 的 ASA 工具延伸模組,來建立、執行及提交 Azure 串流分析 (ASA) 作業。 您將了解如何建置 ASA 作業,以讀取來自 IoT 中樞的即時串流資料,並篩選溫度大於 27°的事件。 輸出結果會傳送至 Blob 儲存體中的檔案。 本快速入門中使用的輸入資料是由 Raspberry Pi 線上模擬器產生。
注意
Visual Studio Code 工具不支援中國東部、中國北部、德國中部和德國東北部區域中的作業。
必要條件
- Azure 訂閱。 如果您沒有 Azure 訂閱,請建立免費帳戶。
- Visual Studio Code \(英文\)。
安裝 Azure 串流分析工具擴充功能
開啟 Visual Studio Code (VS Code)。
從左窗格上的 [延伸模組],搜尋串流分析,然後選取 Azure 串流分析工具延伸模組上的 [安裝]。
安裝之後,選取活動列上的 Azure 圖示,然後登入 Azure。
登入之後,您就可以在 Azure 帳戶底下看到訂用帳戶。
注意
當您每次開啟 VS Code 時,ASA 工具延伸模組都會自動將您登入。 如果您的帳戶使用雙因素驗證,建議您使用電話驗證而非使用 PIN 碼。 若要登出您的 Azure 帳戶,按 Ctrl + Shift + P
並輸入 Azure: Sign Out
。
準備輸入資料
定義串流分析作業前,您應先準備輸入資料。 即時感應器資料會內嵌至 IoT 中樞,然後設定為作業輸入。 若要準備作業所需的輸入資料,請遵循下列步驟:
登入 Azure 入口網站。
選取 [建立資源]> [物聯網] > [IoT 中樞]。
在 [IoT 中樞] 頁面上,輸入下列資訊:
- 訂用帳戶,選取您的 Azure 訂用帳戶。
- 資源群組,選取現有的資源群組,或建立新的資源群組。
- IoT 中樞名稱,輸入您 IoT 中樞的名稱。
- 區域,選取與您最接近的區域。
移至 [管理] 頁面,針對 [定價與級別層],選取 [F1: 免費層] (如果您仍然可在訂用帳戶上取得此選項)。 如需詳細資訊,請參閱 Azure IoT 中樞價格。
選取 [檢閱 + 建立]。 檢閱您的 IoT 中樞資訊,然後選取 [建立]。 此流程可能需要幾分鐘才能部署您的 IoT 中樞。
建立 IoT 中樞之後,選取 [前往資源] 以瀏覽至 [IoT 中樞] 頁面。 '
在 [IoT 中樞] 頁面上,選取左側功能表上的 [裝置],然後選取 [+ 新增裝置]。
提供裝置識別碼,然後選取 [儲存]。
建立裝置之後,您應該會從 [IoT 裝置] 清單中看到裝置。 如果您沒有看到 [重新整理] 按鈕,請選取頁面上的 [重新整理] 按鈕。
從清單中選取您的裝置。 複製主要連接字串,然後將它儲存到記事本以供日後使用。
執行 IoT 模擬器
在新的瀏覽器索引標籤中,開啟 Raspberry Pi Azure IoT 線上模擬器 \(英文\)。
將行 15 中的預留位置取代為您先前儲存的 Azure IoT 中樞裝置連接字串。
選取執行。 下列輸出會顯示傳送至 IoT 中樞的感應器資料和訊息。
建立 Blob 儲存體
從 Azure 入口網站的左上角,選取 [建立資源]>[儲存體]>[儲存體帳戶]。
在 [建立儲存體帳戶] 窗格中,輸入儲存體帳戶名稱、位置和資源。 選擇與您建立的 IoT 中樞相同的位置和資源群組。 然後,選取 [檢閱] 和 [建立] 以建立儲存體帳戶。
在 [儲存體帳戶] 頁面上,選取左側功能表中的 [容器],然後選取命令列上的 [+ 容器]。
從 [新增容器] 頁面中,提供容器的名稱、將 [公用存取層級] 保留為 [私人 (沒有匿名存取)],然後選取 [確定]。
建立串流分析專案
在 Visual Studio Code 中,按 Ctrl+Shift+P,並輸入 ASA:建立新專案。
輸入您的專案名稱 (例如 myASAproj),然後選取專案的資料夾。
ASA 專案即會新增至您的工作區。 其包含三個資料夾:輸入、輸出和功能。 此外也包含查詢指令碼 (*.asaql)、JobConfig.json 檔案和 asaproj.json 組態檔。
Asaproj.json 檔案包含將串流分析作業提交至 Azure 所需的輸入、輸出和作業組態設定。
注意
當您從命令選擇區新增輸入和輸出時,對應的路徑會自動新增至 asaproj.json。 如果您直接在磁碟上新增或移除輸入或輸出,您必須手動從 asaproj.json 加以新增或移除。 您可以選擇將輸入和輸出放在某個位置,然後在每個 asaproj.json 檔案中指定路徑,以在不同的作業中參考這些輸入和輸出。
定義轉換查詢
設定作業輸入
以滑鼠右鍵按一下您串流分析專案中的輸入資料夾。 然後,從捷徑功能表中選取 [ASA:新增輸入]。
或者,按 Ctrl+Shift+P 以開啟命令選擇區,並輸入 ASA:新增輸入。
選擇 [IoT 中樞] 作為輸入類型。
從下拉式功能表中,選取 ASA 指令碼 *.asaql 和 [Azure 訂用帳戶],然後按 ENTER。
在 [輸入] 資料夾底下,您會看到已建立 IoTHub1.json 檔案。 將設定取代為下列建議值,並保留此處未提及之欄位的預設值。
設定 建議的值 名描述 Name 輸入 此輸入名稱會用於查詢中的 FROM 陳述式。 IotHubNamespace spiothub 您 IoT 中樞的名稱。 如果從您的訂用帳戶選取,就會自動偵測到 IoT 中樞名稱。 SharedAccessPolicyName iothubowner 選取 [預覽資料],以查看是否已為您的作業成功設定輸入資料。 它將擷取 IoT 中樞範例,並在預覽視窗中顯示。
設定作業輸出
按 Ctrl+Shift+P 以開啟命令選擇區,並輸入 ASA:新增輸出。
針對接收類型選擇 [Data Lake Storage Gen2/Blob 儲存體]。
使用此輸出來選取查詢指令碼。
輸入 BlobStorage1 作為輸出檔案名稱。
使用下列值來編輯設定。 請將此處未提及的欄位保留為預設值。
設定 建議的值 名描述 Name 輸出 此輸出名稱會用於查詢中的 INTO 陳述式。 儲存體帳戶 spstorageaccount0901 選擇或輸入儲存體帳戶的名稱。 系統會自動偵測建立在相同訂用帳戶中的儲存體帳戶名稱。 容器 spcontainer 選取您在儲存體帳戶中建立的現有容器。
編譯指令碼並提交至 Azure
指令碼編譯會檢查語法和產生選自動部署的 Azure Resource Manager 範本。
以滑鼠右鍵按一下指令碼,然後選取 [ASA:編譯指令碼]。
編譯之後,您會在專案底下看到 [部署] 資料夾,其中包含兩個 Azure Resource Manager 範本。 這兩個檔案會用於自動部署。
在查詢編輯器中,選取 [提交至 Azure]。
然後遵循指示來完成流程:選取訂用帳戶 > 選取作業 > 建立新作業 > 輸入作業名稱 > 選擇資源群組和區域。
選取 [發行至 Azure],然後完成。 等候它開啟新的索引標籤 [雲端作業檢視],其中顯示您的作業狀態。
啟動串流分析工作並查看輸出
在 [雲端作業檢視] 索引標籤上,選取 [開始] 以在雲端中執行作業。 此程序可能需要幾分鐘才能完成。
如果您的作業成功啟動,作業狀態就會變更為 [執行中]。 您可以看到一個邏輯圖表,其中顯示 ASA 作業的執行方式。
若要檢視輸出結果,您可以在 Visual Studio Code 延伸模組中或 Azure 入口網站中開啟 Blob 儲存體。
下載並開啟檔案以查看輸出。
{"messageId":11,"deviceId":"Raspberry Pi Web Client","temperature":28.165519323167562,"humidity":76.875393581654379,"EventProcessedUtcTime":"2022-09-01T22:53:58.1015921Z","PartitionId":3,"EventEnqueuedUtcTime":"2022-09-01T22:52:57.6250000Z","IoTHub":{"MessageId":null,"CorrelationId":null,"ConnectionDeviceId":"MyASAIoTDevice","ConnectionDeviceGenerationId":"637976642928634103","EnqueuedTime":"2022-09-01T22:52:57.6290000Z"}} {"messageId":14,"deviceId":"Raspberry Pi Web Client","temperature":29.014941877871451,"humidity":64.93477299527828,"EventProcessedUtcTime":"2022-09-01T22:53:58.2421545Z","PartitionId":3,"EventEnqueuedUtcTime":"2022-09-01T22:53:03.6100000Z","IoTHub":{"MessageId":null,"CorrelationId":null,"ConnectionDeviceId":"MyASAIoTDevice","ConnectionDeviceGenerationId":"637976642928634103","EnqueuedTime":"2022-09-01T22:53:03.6140000Z"}} {"messageId":17,"deviceId":"Raspberry Pi Web Client","temperature":28.032846241745975,"humidity":66.146114343897338,"EventProcessedUtcTime":"2022-09-01T22:53:58.2421545Z","PartitionId":3,"EventEnqueuedUtcTime":"2022-09-01T22:53:19.5960000Z","IoTHub":{"MessageId":null,"CorrelationId":null,"ConnectionDeviceId":"MyASAIoTDevice","ConnectionDeviceGenerationId":"637976642928634103","EnqueuedTime":"2022-09-01T22:53:19.5830000Z"}} {"messageId":18,"deviceId":"Raspberry Pi Web Client","temperature":30.176185593576143,"humidity":72.697359909427419,"EventProcessedUtcTime":"2022-09-01T22:53:58.2421545Z","PartitionId":3,"EventEnqueuedUtcTime":"2022-09-01T22:53:21.6120000Z","IoTHub":{"MessageId":null,"CorrelationId":null,"ConnectionDeviceId":"MyASAIoTDevice","ConnectionDeviceGenerationId":"637976642928634103","EnqueuedTime":"2022-09-01T22:53:21.6140000Z"}} {"messageId":20,"deviceId":"Raspberry Pi Web Client","temperature":27.851894248213021,"humidity":71.610229530268214,"EventProcessedUtcTime":"2022-09-01T22:53:58.2421545Z","PartitionId":3,"EventEnqueuedUtcTime":"2022-09-01T22:53:25.6270000Z","IoTHub":{"MessageId":null,"CorrelationId":null,"ConnectionDeviceId":"MyASAIoTDevice","ConnectionDeviceGenerationId":"637976642928634103","EnqueuedTime":"2022-09-01T22:53:25.6140000Z"}} {"messageId":21,"deviceId":"Raspberry Pi Web Client","temperature":27.718624694772238,"humidity":66.540445035685153,"EventProcessedUtcTime":"2022-09-01T22:53:58.2421545Z","PartitionId":3,"EventEnqueuedUtcTime":"2022-09-01T22:53:48.0820000Z","IoTHub":{"MessageId":null,"CorrelationId":null,"ConnectionDeviceId":"MyASAIoTDevice","ConnectionDeviceGenerationId":"637976642928634103","EnqueuedTime":"2022-09-01T22:53:48.0830000Z"}} {"messageId":22,"deviceId":"Raspberry Pi Web Client","temperature":27.7849054424326,"humidity":74.300662748167085,"EventProcessedUtcTime":"2022-09-01T22:54:09.3393532Z","PartitionId":3,"EventEnqueuedUtcTime":"2022-09-01T22:54:09.2390000Z","IoTHub":{"MessageId":null,"CorrelationId":null,"ConnectionDeviceId":"MyASAIoTDevice","ConnectionDeviceGenerationId":"637976642928634103","EnqueuedTime":"2022-09-01T22:54:09.2400000Z"}} {"messageId":28,"deviceId":"Raspberry Pi Web Client","temperature":30.839892925680324,"humidity":76.237611741451786,"EventProcessedUtcTime":"2022-09-01T22:54:47.8053253Z","PartitionId":3,"EventEnqueuedUtcTime":"2022-09-01T22:54:47.6180000Z","IoTHub":{"MessageId":null,"CorrelationId":null,"ConnectionDeviceId":"MyASAIoTDevice","ConnectionDeviceGenerationId":"637976642928634103","EnqueuedTime":"2022-09-01T22:54:47.6150000Z"}} {"messageId":29,"deviceId":"Raspberry Pi Web Client","temperature":30.561040300759053,"humidity":78.3845172058103,"EventProcessedUtcTime":"2022-09-01T22:54:49.8070489Z","PartitionId":3,"EventEnqueuedUtcTime":"2022-09-01T22:54:49.6030000Z","IoTHub":{"MessageId":null,"CorrelationId":null,"ConnectionDeviceId":"MyASAIoTDevice","ConnectionDeviceGenerationId":"637976642928634103","EnqueuedTime":"2022-09-01T22:54:49.5990000Z"}} {"messageId":31,"deviceId":"Raspberry Pi Web Client","temperature":28.163585438418679,"humidity":60.0511571297096,"EventProcessedUtcTime":"2022-09-01T22:55:25.1528729Z","PartitionId":3,"EventEnqueuedUtcTime":"2022-09-01T22:55:24.9050000Z","IoTHub":{"MessageId":null,"CorrelationId":null,"ConnectionDeviceId":"MyASAIoTDevice","ConnectionDeviceGenerationId":"637976642928634103","EnqueuedTime":"2022-09-01T22:55:24.9120000Z"}} {"messageId":32,"deviceId":"Raspberry Pi Web Client","temperature":31.00503387156985,"humidity":78.68821066044552,"EventProcessedUtcTime":"2022-09-01T22:55:43.2652127Z","PartitionId":3,"EventEnqueuedUtcTime":"2022-09-01T22:55:43.0480000Z","IoTHub":{"MessageId":null,"CorrelationId":null,"ConnectionDeviceId":"MyASAIoTDevice","ConnectionDeviceGenerationId":"637976642928634103","EnqueuedTime":"2022-09-01T22:55:43.0520000Z"}}
清除資源
若不再需要,請刪除資源群組、串流分析作業和所有相關資源。 刪除作業可避免因為作業使用串流單位而產生費用。 如果您計劃在未來使用該作業,您可以將其停止並在之後需要時重新啟動。 如果您將不繼續使用此作業,請使用下列步驟,刪除本快速入門所建立的所有資源:
從 Azure 入口網站的左側功能表中,選取 [資源群組],然後選取您所建立資源的名稱。
在資源群組頁面上,選取 [刪除]。 在下一個視窗中輸入要刪除的資源名稱,然後選取 [刪除]。
下一步
若要深入了解適用於 Visual Studio Code 的 ASA 工具延伸模組,請繼續下列文章: