빠른 시작: Azure PowerShell을 사용하여 Stream Analytics 작업 만들기

Azure PowerShell 모듈은 PowerShell cmdlet 또는 스크립트를 사용하여 Azure 리소스를 만들고 관리하는 데 사용됩니다. 이 빠른 시작에서는 Azure PowerShell 모듈을 사용하여 Azure Stream Analytics 작업을 배포하고 실행하는 방법을 보여줍니다.

샘플 작업에서는 IoT Hub 서비스에서 스트리밍 데이터를 읽습니다. 이 입력 데이터는 Raspberry Pi 온라인 시뮬레이터로 생성됩니다. Stream Analytics 작업은 Stream Analytics 쿼리 언어를 사용하여 온도가 27°를 넘는 메시지를 필터링하여 데이터를 변환합니다. 그런 다음, 결과 출력 이벤트를 Blob 스토리지의 파일에 씁니다.

시작하기 전에

  • Azure 구독이 없는 경우 무료 계정을 만드세요.
  • 이 빠른 시작에서는 Azure PowerShell 모듈이 필요합니다. 로컬 컴퓨터에 설치된 버전을 확인하려면 Get-Module -ListAvailable Az을 실행합니다. 설치 또는 업그레이드해야 하는 경우 Azure PowerShell 모듈 설치를 참조하세요.
  • 일부 IoT Hub 작업은 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

입력 데이터 준비

Stream Analytics 작업을 정의하기 전에 작업에 대한 입력으로 구성된 데이터를 준비합니다.

다음 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 Hub를 만듭니다. 이 예제에서는 MyASAIoTHub라는 IoT Hub를 만듭니다. IoT Hub 이름은 고유하므로 사용자 고유의 IoT Hub 이름으로 표시해야 합니다. 구독에 사용 가능한 경우 체험 계층을 사용하도록 SKU를 F1로 설정합니다. 그러지 않으면 다음으로 가장 낮은 계층을 선택합니다.

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

    IoT Hub가 만들어지면 az iot hub show-connection-string 명령을 사용하여 IoT Hub 연결 문자열을 가져옵니다. 전체 연결 문자열을 복사하고 저장합니다. Stream Analytics 작업에 입력으로 IoT Hub를 추가할 때 필요합니다.

    az iot hub show-connection-string --resource-group $resourceGroup --hub-name "MyASAIoTHub"
    
  3. az iot hub device-identity create 명령을 사용하여 IoT Hub에 디바이스를 추가합니다. 이 예제에서는 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 Storage 만들기

다음 Azure PowerShell 코드 블록은 명령을 사용하여 작업 출력에 사용되는 Blob 스토리지를 만듭니다. 코드를 이해하려면 섹션을 검토합니다.

  1. New-AzStorageAccount cmdlet을 사용하여 표준 범용 스토리지 계정을 만듭니다. 이 예제에서는 LRS(로컬 중복 스토리지) 및 Blob 암호화(기본적으로 사용)를 사용하여 myasaquickstartstorage라는 스토리지 계정을 만듭니다.

  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
    

Stream Analytics 작업 만들기

New-AzStreamAnalyticsJob cmdlet을 사용하여 Stream Analytics 작업을 만듭니다. 이 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 Storage를 입력으로 만듭니다.

로컬 컴퓨터에서 JobInputDefinition.json이라는 파일을 만들고 여기에 다음 JSON 데이터를 추가합니다.

Important

  • accesspolicykey를 이전 섹션에서 저장한 IoT Hub 연결 문자열의 SharedAccessKey 부분으로 바꿉니다.
  • IoT Hub에 다른 이름을 사용한 경우 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을 실행하여 Stream Analytics 작업에 대한 Azure IoT Hub 입력을 만듭니다.

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

작업에 대한 출력 구성

New-AzStreamAnalyticsOutput cmdlet을 사용하여 작업에 출력을 추가합니다. 이 cmdlet은 작업 이름, 작업 출력 이름, 리소스 그룹 이름 및 작업 출력 정의를 매개 변수로 사용합니다. 작업 출력 정의는 작업 출력을 구성하는 데 필요한 속성을 포함하는 JSON 파일입니다. 이 예제에서는 출력으로 Blob Storage를 사용합니다.

로컬 컴퓨터에서 JobOutputDefinition.json이라는 파일을 만들고 여기에 다음 JSON 데이터를 추가합니다.

Important

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을 실행하여 Stream Analytics 작업에 대한 Azure Blob Storage 출력을 만듭니다.

$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. 15행의 자리 표시자를 이전 섹션에서 저장한 Azure IoT Hub 디바이스 전체 연결 문자열로 바꿉니다.

  3. 실행을 클릭합니다. IoT Hub로 전송 중인 센서 데이터와 메시지가 출력에 표시되어야 합니다.

    Screenshot showing the Raspberry Pi Azure IoT Online Simulator.

Stream Analytics 작업을 시작하고 출력을 확인합니다.

Start-AzStreamAnalyticsJob cmdlet을 사용하여 작업을 시작합니다. 이 cmdlet은 작업 이름, 리소스 그룹 이름, 출력 시작 모드 및 시작 시간을 매개 변수로 사용합니다. OutputStartModeJobStartTime, CustomTime 또는 LastOutputEventTime의 값을 허용합니다. 이러한 각 값에 대한 자세한 내용은 PowerShell 설명서의 매개 변수 섹션을 참조하세요.

다음 cmdlet을 실행한 후 작업이 시작되면 True가 출력으로 반환됩니다. 스토리지 컨테이너에서 변환된 데이터를 사용하여 출력 폴더가 생성됩니다.

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

리소스 정리

더 이상 필요하지 않으면 리소스 그룹, 스트리밍 작업 및 모든 관련 리소스를 삭제합니다. 작업을 삭제하면 작업에서 사용된 스트리밍 단위에 대한 청구를 방지합니다. 작업을 나중에 사용하려는 경우 삭제를 건너뛰고 지금은 작업을 중지할 수 있습니다. 이 작업을 계속 사용하지 않으려면 다음과 같은 cmdlet을 실행하여 빠른 시작에서 만든 리소스를 모두 삭제합니다.

Remove-AzResourceGroup `
  -Name $resourceGroup

다음 단계

이 빠른 시작에서는 PowerShell을 사용하여 간단한 Stream Analytics 작업을 배포했습니다. Azure PortalVisual Studio를 통해서도 Stream Analytics 작업을 배포할 수 있습니다.

다른 입력 원본을 구성하고 실시간 검색을 수행하는 방법을 알아보려면 다음 문서로 이동하세요.