快速入門:使用 Azure PowerShell 建立串流分析作業

使用 Azure PowerShell 模組,即可利用 PowerShell Cmdlet 或指令碼建立和管理 Azure 資源。 本快速入門展示如何使用 Azure PowerShell 模組來部署和執行串流分析作業。

範例作業會從 IoT 中樞裝置讀取串流資料。 輸入資料是由 Raspberry Pi 線上模擬器產生。 串流分析作業會使用串流分析查詢語言來轉換資料,以篩選包含溫度超過 27° 的訊息。 然後,它會將產生的輸出事件寫入 Blob 儲存體中的檔案。

開始之前

  • 如果您沒有 Azure 訂閱,請建立免費帳戶
  • 本快速入門需要 Azure PowerShell 模組。 執行 Get-Module -ListAvailable Az 來尋找本機電腦上所安裝的版本。 如果您需要安裝或升級,請參閱安裝 Azure PowerShell 模組
  • 某些 IoT 中樞動作不受 Azure PowerShell 支援,而且必須使用 Azure CLI 2.0.70 版或更新版本和適用於 Azure CLI 的 IoT 延伸模組完成。 安裝 Azure CLI並使用 az extension add --name azure-iot 來安裝 IoT 擴充功能。

登入 Azure

使用 Connect-AzAccount 命令登入 Azure 訂用帳戶,並在快顯瀏覽器中輸入您的 Azure 認證:

# Connect to your Azure account
Connect-AzAccount

如果您有多個訂用帳戶,請執行下列 Cmdlet 以選取您想要用於本快速入門的訂用帳戶。 務必要以您的訂用帳戶名稱取代 <your subscription name>

# List all available subscriptions.
Get-AzSubscription

# Select the Azure subscription you want to use to create the resource group and resources.
Get-AzSubscription -SubscriptionName "<your subscription name>" | Select-AzSubscription

建立資源群組

使用 New-AzResourceGroup 來建立 Azure 資源群組。 資源群組是在其中部署與管理 Azure 資源的邏輯容器。

$resourceGroup = "StreamAnalyticsRG"
$location = "WestUS2"
New-AzResourceGroup `
    -Name $resourceGroup `
    -Location $location

準備輸入資料

定義串流分析作業前,先準備設定為作業輸入的資料。

下列 Azure CLI 程式碼區塊具有許多命令,可準備作業所需的輸入資料。 請檢閱下列各節以了解程式碼。

  1. 在 PowerShell 視窗中執行 az login 命令,以登入您的 Azure 帳戶。

    當您成功登入時,Azure CLI 會傳回您的訂用帳戶清單。 複製您用於此快速入門的訂用帳戶,然後執行 az account set 命令來選取該訂用帳戶。 選擇您在上一節中使用 PowerShell 選取的相同訂用帳戶。 務必要以您的訂用帳戶名稱取代 <your subscription name>

    az login
    
    az account set --subscription "<your subscription>"
    
  2. 使用 az iot hub create 命令建立 IoT 中樞。 此範例會建立名為 MyASAIoTHub 的 IoT 中樞。 因為 IoT 中樞名稱是唯一的,所以您需要提出您自己的 IoT 中樞名稱。 將 SKU 設定為 F1 可使用免費層 (如果適用於您的訂用帳戶)。 否則,請選擇下一個最低層。

    az iot hub create --name "MyASAIoTHub" --resource-group $resourceGroup --sku S1
    

    建立 IoT 中樞後,使用 az iot hub show-connection-string 命令來取得 IoT 中樞連接字串。 複製整個連接字串,並加以儲存。 當您將 IoT 中樞新增為串流分析作業的輸入時,您會需要它。

    az iot hub show-connection-string --resource-group $resourceGroup --hub-name "MyASAIoTHub"
    
  3. 使用 az iot hub device-identity create 命令將裝置新增至 IoT 中樞。 此範例會建立名為 MyASAIoTDevice 的裝置。

    az iot hub device-identity create --resource-group $resourceGroup --hub-name "MyASAIoTHub" --device-id "MyASAIoTDevice"
    
  4. 使用 az iot hub device-identity connection-string show 命令來取得裝置連接字串。 複製整個連接字串並加以儲存,以便在建立 Raspberry Pi 模擬器時使用。

    az iot hub device-identity connection-string show --resource-group $resourceGroup --hub-name "MyASAIoTHub" --device-id "MyASAIoTDevice" --output table
    

    輸出範例:

    HostName=MyASAIoTHub.azure-devices.net;DeviceId=MyASAIoTDevice;SharedAccessKey=a2mnUsg52+NIgYudxYYUNXI67r0JmNubmfVafojG8=
    

建立 Blob 儲存體

下列 Azure PowerShell 程式碼區塊會使用命令來建立用於作業輸出的 Blob 儲存體。 檢閱區段以了解程式碼。

  1. 使用 New-AzStorageAccount Cmdlet 來建立標準的一般用途儲存體帳戶。 這個範例會建立名為 myasaquickstartstorage 的儲存體帳戶,並含有本機備援儲存體 (LRS) 和 Blob 加密 (預設會啟用)。

  2. 取出儲存體帳戶內容 $storageAccount.Context,定義要使用的儲存體帳戶。 使用儲存體帳戶時,會參考內容而非重複提供認證。

  3. 使用 New-AzStorageContainer 建立儲存體容器。

  4. 複製程式碼所輸出的儲存體金鑰,並儲存該金鑰,以便稍後建立串流作業的輸出。

    $storageAccountName = "myasaquickstartstorage"
    $storageAccount = New-AzStorageAccount `
      -ResourceGroupName $resourceGroup `
      -Name $storageAccountName `
      -Location $location `
      -SkuName Standard_LRS `
      -Kind Storage
    
    $ctx = $storageAccount.Context
    $containerName = "container1"
    
    New-AzStorageContainer `
      -Name $containerName `
      -Context $ctx
    
    $storageAccountKey = (Get-AzStorageAccountKey `
      -ResourceGroupName $resourceGroup `
      -Name $storageAccountName).Value[0]
    
    Write-Host "The <storage account key> placeholder needs to be replaced in your output json files with this key value:"
    Write-Host $storageAccountKey -ForegroundColor Cyan
    

建立串流分析作業

使用 New-AzStreamAnalyticsJob Cmdlet 建立串流分析作業。 此 Cmdlet 會將作業名稱、資源群組名稱、位置和 SKU 名稱作為參數。 作業名稱可以是任何可識別作業的易記名稱。 只能有英數字元、連字號與底線,且其長度必須介於 3 到 63 個字元之間。

New-AzStreamAnalyticsJob執行 Cmdlet。

$jobName = "MyStreamingJob"
New-AzStreamAnalyticsJob `
  -ResourceGroupName $resourceGroup `
  -Name $jobName `
  -Location centralus `
  -SkuName Standard

設定作業的輸入

使用 New-AzStreamAnalyticsInput Cmdlet 新增作業的輸入。 此 Cmdlet 會採用作業名稱、作業輸入名稱、資源群組名稱和作業輸入定義來作為參數。 作業輸入定義是 JSON 檔案,其中包含設定作業輸入所需的屬性。 在此範例中,您會建立 blob 儲存體作為輸入。

在本機電腦上,建立名為 JobInputDefinition.json 的檔案,並於其中新增下列 JSON 資料。

重要

  • 將取代 accesspolicykey 為您在上一節中所儲存 IoT 中樞連接字串的 SharedAccessKey 部分。
  • 如果您針對 IoT 中樞使用不同的名稱,請更新 iotHubNamespace 的值。
{
    "properties": {
        "type": "Stream",
        "datasource": {
            "type": "Microsoft.Devices/IotHubs",
            "properties": {
                "iotHubNamespace": "MyASAIoTHub",
                "sharedAccessPolicyName": "iothubowner",
                "sharedAccessPolicyKey": "accesspolicykey",
                "endpoint": "messages/events",
                "consumerGroupName": "$Default"
                }
        },
        "compression": {
            "type": "None"
        },
        "serialization": {
            "type": "Json",
            "properties": {
                "encoding": "UTF8"
            }
        }
    },
    "name": "IoTHubInput",
    "type": "Microsoft.StreamAnalytics/streamingjobs/inputs"
}

$jobInputDefinitionFile PowerShell 變數設定為您儲存作業輸入定義 JSON 檔案所在的路徑。

$jobInputDefinitionFile = "C:\JobInputDefinition.json"

接下來,執行 New-AzStreamAnalyticsInput Cmdlet 來建立串流分析作業的 Azure IoT 中樞輸入。

$jobInputName = "IoTHubInput"
New-AzStreamAnalyticsInput `
  -ResourceGroupName $resourceGroup `
  -JobName $jobName `
  -File $jobInputDefinitionFile `
  -Name $jobInputName

設定作業的輸出

使用 New-AzStreamAnalyticsOutput Cmdlet 新增作業的輸出。 此 Cmdlet 會採用作業名稱、作業輸出名稱、資源群組名稱和作業輸出定義來作為參數。 作業輸出定義是 JSON 檔案,其中包含設定作業輸出所需的屬性。 這個範例會使用 blob 儲存體作為輸出。

在本機電腦上,建立名為 JobOutputDefinition.json 的檔案,並於其中新增下列 JSON 資料。

重要

將的 accountKey 值取代為您儲存體帳戶的存取金鑰,也就是 $storageAccountKey 值中所儲存的值。

{
    "properties": {
        "datasource": {
            "type": "Microsoft.Storage/Blob",
            "properties": {
                "storageAccounts": [
                    {
                      "accountName": "asaquickstartstorage",
                      "accountKey": "<storage account key>"
                    }
                ],
                "container": "container1",
                "pathPattern": "output/",
                "dateFormat": "yyyy/MM/dd",
                "timeFormat": "HH"
            }
        },
        "serialization": {
            "type": "Json",
            "properties": {
                "encoding": "UTF8",
                "format": "LineSeparated"
            }
        }
    },
    "name": "BlobOutput",
    "type": "Microsoft.StreamAnalytics/streamingjobs/outputs"
}

$jobOutputDefinitionFile PowerShell 變數設定為您儲存作業輸出定義 JSON 檔案所在的路徑。

$jobOutputDefinitionFile = "C:\JobOutputDefinition.json"

接下來,執行 New-AzStreamAnalyticsOutput Cmdlet 來建立串流分析作業的 Azure Blob 儲存體輸出。

$jobOutputName = "BlobOutput"

New-AzStreamAnalyticsOutput `
  -ResourceGroupName $resourceGroup `
  -JobName $jobName `
  -File $jobOutputDefinitionFile `
  -Name $jobOutputName

定義轉換查詢

使用 New-AzStreamAnalyticsTransformation Cmdlet 新增作業的轉換。 此 Cmdlet 會採用作業名稱、作業轉換名稱、資源群組名稱和作業轉換定義來作為參數。 在本機電腦上,建立名為 JobTransformationDefinition.json 的檔案,並於其中新增下列 JSON 資料。 JSON 檔案包含可定義轉換查詢的查詢參數:

{
    "name":"MyTransformation",
    "type":"Microsoft.StreamAnalytics/streamingjobs/transformations",
    "properties":{
        "streamingUnits":1,
        "script":null,
        "query":"SELECT * INTO BlobOutput FROM IoTHubInput WHERE Temperature > 27"
    }
}

接下來,執行 New-AzStreamAnalyticsTransformation Cmdlet。

$jobTransformationName = "MyJobTransformation"
$jobTransformationDefinitionFile = "C:\JobTransformationDefinition.json"
New-AzStreamAnalyticsTransformation `
    -ResourceGroupName $resourceGroup `
    -JobName $jobName `
    -Query "SELECT * INTO BlobOutput FROM IoTHubInput WHERE Temperature > 27" `
    -StreamingUnit 1 `
    -Name $jobTransformationName

執行 IoT 模擬器

  1. 開啟 Raspberry Pi Azure IoT 線上模擬器

  2. 以您在上一節中儲存的整個 Azure IoT 中樞裝置連接字串取代行 15 中的預留位置。

  3. 按一下執行。 下列輸出會顯示傳送至 IoT 中樞的感應器資料和訊息。

    Screenshot showing the Raspberry Pi Azure IoT Online Simulator.

啟動串流分析工作並查看輸出

使用 Start-AzStreamAnalyticsJob Cmdlet 啟動作業。 此 Cmdlet 會採用作業名稱、資源群組名稱、輸出啟動模式和啟動時間來作為參數。 OutputStartMode 可接受 JobStartTimeCustomTimeLastOutputEventTime。 若要了解這些值各自代表什麼,請參閱 PowerShell 文件中的參數一節。

執行下列 Cmdlet 後,如果作業啟動,它會在輸出中傳回 True。 在儲存體容器中,建立的輸出資料夾包含已轉換的資料。

Start-AzStreamAnalyticsJob `
  -ResourceGroupName $resourceGroup `
  -Name $jobName `
  -OutputStartMode 'JobStartTime'

清除資源

若不再需要,可刪除資源群組、串流作業和所有相關資源。 刪除作業可避免因為作業使用串流單位而產生費用。 如果您計劃在未來使用該作業,您可以跳過刪除動作,且目前停止作業。 如果您不要繼續使用此作業,請執行下列 Cmdlet,以刪除本快速入門所建立的所有資源:

Remove-AzResourceGroup `
  -Name $resourceGroup

下一步

在本快速入門中,您已使用 PowerShell 部署了簡單的串流分析作業。 您也可以使用 Azure 入口網站Visual Studio 部署串流分析作業。

若要了解如何設定其他輸入來源及執行即時偵測,請前往下列文章: