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

이 빠른 시작에서는 Azure CLI를 사용하여 온도 판독값이 27보다 큰 실시간 스트리밍 센서 메시지를 필터링하는 Stream Analytics 작업을 정의합니다. Stream Analytics 작업은 IoT Hub에서 데이터를 읽고, 데이터를 변환하고, 출력 데이터를 Blob 스토리지의 컨테이너에 씁니다. 이 빠른 시작에서 사용된 입력 데이터는 Raspberry Pi 온라인 시뮬레이터로 생성됩니다.

시작하기 전에

Azure를 구독하고 있지 않다면 시작하기 전에 Azure 체험 계정을 만듭니다.

사전 요구 사항

  • 리소스 그룹을 만듭니다. 모든 Azure 리소스는 리소스 그룹에 배포되어야 합니다. 리소스 그룹을 사용하면 관련 Azure 리소스를 구성하고 관리할 수 있습니다.

    이 빠른 시작에서는 다음과 같이 az group create 명령을 사용하여 eastus 위치에 streamanalyticsrg라는 리소스 그룹을 만듭니다.

    az group create --name streamanalyticsrg --location eastus
    

입력 데이터 준비

Stream Analytics 작업을 정의하기 전에, 작업의 입력에 사용할 데이터를 준비해야 합니다. 다음 Azure CLI는 작업에 필요한 입력 데이터를 준비합니다.

  1. az iot hub create 명령을 사용하여 IoT Hub를 만듭니다. 이 예제에서는 MyASAIoTHub라는 IoT Hub를 만듭니다. IoT Hub 이름은 전역적으로 고유해야 하므로 이미 사용 중인 경우 이름을 변경해야 할 수 있습니다. 구독에 사용 가능한 경우 체험 계층을 사용하도록 SKU를 F1로 설정합니다. 그러지 않으면 다음으로 가장 낮은 계층을 선택합니다.

    iotHubName=MyASAIoTHub
    az iot hub create --name $iotHubName --resource-group streamanalyticsrg --sku S1
    

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

    az iot hub connection-string show --hub-name $iotHubName
    
  2. az iothub device-identity create 명령을 사용하여 IoT Hub에 디바이스를 추가합니다. 이 예제에서는 MyASAIoTDevice라는 디바이스를 만듭니다.

    az iot hub device-identity create --hub-name $iotHubName --device-id "MyASAIoTDevice"
    
  3. az iot hub device-identity connection-string show 명령을 사용하여 디바이스 연결 문자열을 가져옵니다. 전체 연결 문자열을 복사하여 Raspberry Pi 시뮬레이터를 만들 때를 위해 저장해 둡니다.

    az iot hub device-identity connection-string show --hub-name $iotHubName --device-id "MyASAIoTDevice" --output table
    

    출력 예제:

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

Blob Storage 계정 만들기

다음 Azure CLI 명령은 작업 출력에 사용되는 BLOB 스토리지 계정을 만듭니다.

  1. az storage account create 명령을 사용하여 범용 스토리지 계정을 만듭니다. 범용 스토리지 계정은 4개의 모든 서비스(Blob, 파일, 테이블 및 큐)에 사용할 수 있습니다.

    storageAccountName="asatutorialstorage$RANDOM"
    az storage account create \
        --name $storageAccountName \
        --resource-group streamanalyticsrg \
        --location eastus \
        --sku Standard_ZRS \
        --encryption-services blob
    
  2. az storage account keys list 명령을 실행하여 스토리지 계정의 키를 가져옵니다.

    key=$(az storage account keys list -g streamanalyticsrg -n $storageAccountName --query "[0].value" -o tsv)
    echo $key
    

    Important

    Azure Storage 계정의 액세스 키를 적어 둡니다. 이 빠른 시작의 뒷부분에서 이 키를 사용합니다.

  3. Blob 저장을 위한 state 컨테이너를 az storage container create 명령을 사용하여 만듭니다. 스토리지 계정 키를 사용하여 컨테이너를 만들 수 있는 권한을 작업에 부여합니다. Azure CLI 사용하여 데이터 작업에 권한을 부여하는 방법에 대한 자세한 내용은 Azure CLI를 사용하여 blob 또는 큐 데이터에 대한 액세스 권한 부여를 참조하세요.

    az storage container create \
        --account-name $storageAccountName \
        --name state \
        --account-key $key \
        --auth-mode key
    

Stream Analytics 작업 만들기

az stream-analytics job create 명령을 사용하여 Stream Analytics 작업을 만듭니다.

az stream-analytics job create \
    --job-name "streamanalyticsjob" \
    --resource-group "streamanalyticsrg" \
    --location "eastus" \
    --output-error-policy "Drop" \
    --out-of-order-policy "Drop" \
    --order-max-delay 5 \
    --arrival-max-delay 16 \
    --data-locale "en-US"

작업에 대한 입력 구성

az stream-analytics input cmdlet을 사용하여 작업에 입력을 추가합니다. 이 cmdlet은 작업 이름, 작업 입력 이름, 리소스 그룹 이름 및 JSON 형식의 입력 속성를 매개 변수로 사용합니다. 이 예제에서는 입력으로 IoT Hub를 만듭니다.

Important

  • IOT HUB ACCESS KEY을 저장한 IOT Hub 연결 문자열의 공유 액세스 키 값으로 바꿉니다. 예를 들어 IOT Hub 연결 문자열이 HostName=MyASAIoTHub.azure-devices.net;SharedAccessKeyName=iothubowner;SharedAccessKey=xxxxxxxxxxxxxx=인 경우 공유 액세스 키 값은 xxxxxxxxxxxxxx=입니다. 값을 바꾸는 동안 "(큰따옴표)에 대한 \(이스케이프) 문자를 삭제하지 않도록 합니다.
  • MyASAIoTHub 이외의 이름을 사용한 경우 다음 명령에서 iotHubNamespace의 값을 업데이트합니다. echo $iotHubName을 실행하여 IoT Hub 이름을 확인합니다.
az stream-analytics input create \
    --properties "{\"type\":\"Stream\",\"datasource\":{\"type\":\"Microsoft.Devices/IotHubs\",\"properties\":{\"consumerGroupName\":\"\$Default\",\"endpoint\":\"messages/events\",\"iotHubNamespace\":\"MyASAIoTHub\",\"sharedAccessPolicyKey\":\"IOT HUB ACCESS KEY\",\"sharedAccessPolicyName\":\"iothubowner\"}},\"serialization\":{\"type\":\"Json\",\"encoding\":\"UTF8\"}}" \
    --input-name "asaiotinput" \
    --job-name "streamanalyticsjob" \
    --resource-group "streamanalyticsrg"

작업에 대한 출력 구성

az stream-analytics output create cmdlet을 사용하여 작업에 출력을 추가합니다. 이 cmdlet은 작업 이름, 작업 출력 이름, 리소스 그룹 이름, JSON 형식의 데이터 원본 및 직렬화 형식을 매개 변수로 사용합니다.

Important

STORAGEACCOUNTNAME>을 Azure Storage 계정 이름으로 변경하고 STORAGEACCESSKEY>를 스토리지 계정의 액세스 키로 변경합니다. 이러한 값을 적어 두지 않은 경우 다음 명령을 실행하여 echo $storageAccountNameecho $key를 가져옵니다. 값을 바꾸는 동안 "(큰따옴표)에 대한 \(이스케이프) 문자를 삭제하지 않도록 합니다.

az stream-analytics output create \
    --job-name streamanalyticsjob \
    --datasource "{\"type\":\"Microsoft.Storage/Blob\",\"properties\":{\"container\":\"state\",\"dateFormat\":\"yyyy/MM/dd\",\"pathPattern\":\"{date}/{time}\",\"storageAccounts\":[{\"accountKey\":\"STORAGEACCESSKEY\",\"accountName\":\"STORAGEACCOUNTNAME\"}],\"timeFormat\":\"HH\"}}" \
    --serialization "{\"type\":\"Json\",\"properties\":{\"format\":\"Array\",\"encoding\":\"UTF8\"}}" \
    --output-name asabloboutput \
    --resource-group streamanalyticsrg

변환 쿼리 정의

az stream-analytics transformation create cmdlet을 사용하여 작업에 변환을 추가합니다.

az stream-analytics transformation create \
    --resource-group streamanalyticsrg \
    --job-name streamanalyticsjob \
    --name Transformation \
    --streaming-units "6" \
    --saql "SELECT * INTO asabloboutput FROM asaiotinput WHERE Temperature > 27"

IoT 시뮬레이터 실행

  1. Raspberry Pi Azure IoT 온라인 시뮬레이터를 엽니다.

  2. 15줄의 자리 표시자를 빠른 시작의 시작 부분에 저장한 전체 Azure IoT Hub 디바이스 연결 문자열(IoT Hub 연결 문자열 아님)로 바꿉니다.

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

    Raspberry Pi Azure IoT Online Simulator

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

az stream-analytics job start cmdlet을 사용하여 작업을 시작합니다. 이 cmdlet은 작업 이름, 리소스 그룹 이름, 출력 시작 모드 및 시작 시간을 매개 변수로 사용합니다. OutputStartModeJobStartTime, CustomTime 또는 LastOutputEventTime의 값을 허용합니다.

다음 cmdlet을 실행한 후 작업이 시작되면 True가 출력으로 반환됩니다.

az stream-analytics job start \
    --resource-group streamanalyticsrg \
    --name streamanalyticsjob \
    --output-start-mode JobStartTime

몇 분 후에 state Blob 컨테이너에 출력 파일이 생성되었는지 확인합니다.

Screenshot showing the output file in the State blob container.

파일을 다운로드하고 열어 다음과 유사한 여러 항목을 확인합니다.

{
    "messageId": 229,
    "deviceId": "Raspberry Pi Web Client",
    "temperature": 31.85214010589595,
    "humidity": 60.278830289656284,
    "EventProcessedUtcTime": "2023-02-28T22:06:33.5567789Z",
    "PartitionId": 3,
    "EventEnqueuedUtcTime": "2023-02-28T22:05:49.6520000Z",
    "IoTHub": {
        "MessageId": null,
        "CorrelationId": null,
        "ConnectionDeviceId": "MyASAIoTDevice",
        "ConnectionDeviceGenerationId": "638132150746523845",
        "EnqueuedTime": "2023-02-28T22:05:49.6520000Z",
        "StreamId": null
    }
}

리소스 정리

리소스 그룹을 삭제합니다. 그러면 Stream Analytics 작업, IoT Hub 및 Azure Storage 계정을 비롯한 리소스 그룹의 모든 리소스가 삭제됩니다.

az group delete \
    --name streamanalyticsrg \
    --no-wait

다음 단계

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

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