빠른 시작: Visual Studio Code를 사용하여 Stream Analytics 작업 만들기

이 빠른 시작에서는 로컬 컴퓨터에서 Visual Studio Code용 ASA 도구 확장을 사용하여 ASA(Azure Stream Analytics) 작업을 생성, 실행 및 제출하는 방법을 보여 줍니다. IoT Hub에서 실시간 스트리밍 데이터를 읽고 온도가 27°를 초과하는 이벤트를 필터링하는 ASA 작업을 빌드하는 방법을 알아봅니다. 출력 결과는 Blob Storage의 파일로 전송됩니다. 이 빠른 시작에서 사용된 입력 데이터는 Raspberry Pi 온라인 시뮬레이터로 생성됩니다.

참고 항목

Visual Studio Code 도구는 중국 동부, 중국 북부, 독일 중부 및 독일 북동부 지역의 작업을 지원하지 않습니다.

필수 조건

Azure Stream Analytics Tools 확장 설치

  1. VS Code(Visual Studio Code)를 엽니다.

  2. 왼쪽 창의 확장에서 Stream Analytics를 검색하고, Azure Stream Analytics Tools 확장에서 설치를 선택합니다.

    Screenshot showing the Extensions page of Visual Studio Code with an option to install Stream Analytics extension.

  3. 설치한 후 작업 표시줄에서 Azure 아이콘을 선택하고 Azure에 로그인합니다.

    Screenshot showing how to sign in to Azure.

  4. 로그인하면 Azure 계정에서 구독을 볼 수 있습니다.

참고 항목

ASA 도구 확장은 VS Code를 열 때마다 자동으로 로그인됩니다. 계정에 2단계 인증이 있는 경우 PIN 대신 전화 인증을 사용하는 것이 좋습니다. Azure 계정을 로그아웃하려면 Ctrl + Shift + P를 누르고 Azure: Sign Out을 입력합니다.

입력 데이터 준비

Stream Analytics 작업을 정의하기 전에 입력 데이터를 준비해야 합니다. 실시간 센서 데이터가 IoT Hub로 수집되고 나중에 작업 입력으로 구성됩니다. 작업에 필요한 입력 데이터를 준비하려면 다음 단계를 따릅니다.

  1. Azure Portal에 로그인합니다.

  2. 리소스 만들기 > 사물 인터넷 > IoT Hub를 선택합니다.

    Screenshot showing the Create Resource page for Iot Hub.

  3. IoT Hub 페이지에서 다음 정보를 입력합니다.

    • 구독에서 Azure 구독을 선택합니다.
    • 리소스 그룹에서 기존 리소스 그룹을 선택하거나 새 리소스 그룹을 만듭니다.
    • IoT 허브 이름에서 IoT 허브 이름을 입력합니다.
    • 지역에서 가장 가까운 지역을 선택합니다.

    Screenshot showing the IoT Hub page for creation.

  4. 관리 페이지로 이동하여 가격 책정 및 크기 조정 계층에 대해 F1: 무료 계층을 선택합니다(구독에서 계속 사용할 수 있는 경우). 자세한 내용은 Azure IoT Hub 가격 책정을 참조하세요.

    Screenshot showing the IoT Hub management page.

  5. 검토 + 만들기를 선택합니다. IoT 허브 정보를 검토하고, 만들기를 선택합니다. 이 프로세스는 IoT Hub를 배포하는 데 몇 분 정도 걸릴 수 있습니다.

  6. IoT 허브가 만들어지면 리소스로 이동을 선택하여 IoT Hub 페이지로 이동합니다. '

  7. IoT Hub 페이지의 왼쪽 메뉴에서 디바이스를 선택한 다음, + 디바이스 추가를 선택합니다.

    Screenshot showing the Add Device button on the Devices page.

  8. 디바이스 ID를 입력하고 저장을 선택합니다.

    Screenshot showing the Add Device page.

  9. 디바이스가 만들어지면 IoT 디바이스 목록에 디바이스가 표시됩니다. 표시되지 않으면 페이지에서 새로 고침 단추를 선택합니다.

    Screenshot showing the selection of the device on the Devices page.

  10. 목록에서 디바이스를 선택합니다. 나중에 사용할 수 있도록 기본 연결 문자열을 복사하고 메모장에 저장합니다.

    Screenshot showing the primary connection string of the device you created.

IoT 시뮬레이터 실행

  1. 새 브라우저 탭에서 Raspberry Pi Azure IoT 온라인 시뮬레이터를 엽니다.

  2. 15번째 줄의 자리 표시자를 이전에 저장한 IoT 허브 디바이스 연결 문자열로 바꿉니다.

  3. 실행을 선택합니다. IoT 허브로 보내는 센서 데이터와 메시지가 출력에 표시됩니다.

    Screenshot showing the Raspberry Pi Azure IoT Online Simulator with output.

Blob Storage 만들기

  1. Azure Portal의 왼쪽 위 모서리에서 리소스 만들기>스토리지>스토리지 계정을 차례로 선택합니다.

    Screenshot showing the Create storage account menu.

  2. 스토리지 계정 만들기 창에서 스토리지 계정 이름, 위치 및 리소스 그룹을 입력합니다. 만든 IoT 허브와 동일한 위치 및 리소스 그룹을 선택합니다. 그런 다음, 검토만들기를 선택하여 스토리지 계정을 만듭니다.

    Screenshot showing the Create storage account page.

  3. 스토리지 계정 페이지의 왼쪽 메뉴에서 컨테이너를 선택한 다음, 명령 모음에서 + 컨테이너를 선택합니다.

    Screenshot showing the Containers page.

  4. 새 컨테이너 페이지에서 컨테이너에 대한 이름을 제공하고, 퍼블릭 액세스 수준프라이빗(익명 권한 없음)으로 두고, 확인을 선택합니다.

    Screenshot showing the creation of a blob container page.

Stream Analytics 프로젝트 만들기

  1. Visual Studio Code에서 Ctrl+Shift+P를 누르고 ASA: Create New Project를 입력합니다.

    Screenshot showing the selection of ASA: Create New Project in the command palette.

  2. 프로젝트 이름(예: myASAproj)을 입력하고, 프로젝트의 폴더를 선택합니다.

    Screenshot showing entering an ASA project name.

  3. ASA 프로젝트가 작업 영역에 추가됩니다. 프로젝트는 Inputs, OutputsFunctions의 3개 폴더로 구성됩니다. 또한 쿼리 스크립트(*.asaql), JobConfig.json 파일 및 asaproj.json 구성 파일이 있습니다.

    Screenshot showing Stream Analytics project files in Visual Studio Code.

    asaproj.json 파일에는 Azure에 Stream Analytics 작업을 제출하는 데 필요한 입력, 출력 및 작업 구성 설정이 포함되어 있습니다.

    참고 항목

    명령 팔레트에서 입력 및 출력을 추가하면 해당 경로가 asaproj.json에 자동으로 추가됩니다. 입력 또는 출력을 추가하거나 제거할 때 asaproj.json에서 수동으로 추가 또는 제거해야 합니다. 입력 및 출력을 한 곳에 배치한 다음, 각 asaproj.json 파일에서 경로를 지정하여 다른 작업에서 참조하도록 선택할 수 있습니다.

변환 쿼리 정의

  1. myASAproj.asaql 파일을 열고 다음 쿼리를 추가합니다.

    SELECT *
    INTO Output
    FROM Input
    WHERE Temperature > 27
    

    Screenshot showing the transformation query.

작업 입력 구성

  1. Stream Analytics 프로젝트에서 마우스 오른쪽 단추로 Inputs 폴더를 클릭합니다. 그런 다음 바로 가기 메뉴에서 ASA: 입력 추가를 선택합니다.

    Screenshot showing the ASA: Add input menu in Visual Studio Code.

    또는 Ctrl+Shift+P를 눌러 명령 팔레트를 열고, ASA: Add Input을 입력합니다.

  2. 입력 형식으로 IoT Hub를 선택합니다.

    Screenshot showing the selection of your IoT hub in VS Code command palette.

  3. 드롭다운 메뉴에서 ASA 스크립트 *.asaqlAzure 구독을 선택한 다음, ENTER를 누릅니다.

  4. Inputs 폴더 아래에 IoTHub1.json 파일이 만들어진 것을 확인할 수 있습니다. 설정을 다음과 같은 제안 값으로 바꾸고 여기에 언급되지 않은 필드의 기본값을 유지합니다.

    설정 제안 값 Description
    이름 입력 이 입력 이름은 쿼리의 FROM 문에 사용됩니다.
    IotHubNamespace spiothub IoT Hub의 이름입니다. 구독에서 선택하면 IoT Hub 이름이 자동으로 검색됩니다.
    SharedAccessPolicyName iothubowner

    Screenshot showing the IoT Hub configuration in VS Code.

  5. 데이터 미리 보기를 선택하여 입력 데이터가 작업에 대해 성공적으로 구성되었는지 확인합니다. IoT Hub의 샘플을 가져오고 미리 보기 창에 표시됩니다.

    Screenshot showing the preview of input data in your IoT hub.

작업 출력 구성

  1. Ctrl+Shift+P를 눌러 명령 팔레트를 열고, ASA: Add Output을 입력합니다.

  2. 싱크 유형에 대해 Data Lake Storage Gen2/Blob Storage를 선택합니다.

  3. 이 출력을 사용하여 쿼리 스크립트를 선택합니다.

  4. 출력 파일 이름으로 BlobStorage1을 입력합니다.

  5. 다음 값을 사용하여 설정을 편집합니다. 여기서 설명되지 않은 필드의 경우 기본값을 유지합니다.

    설정 제안 값 Description
    이름 출력 이 출력 이름은 쿼리의 INTO 문에 사용됩니다.
    스토리지 계정 spstorageaccount0901 스토리지 계정의 이름을 선택하거나 입력합니다. 스토리지 계정 이름이 동일한 구독에 만들어지면 자동으로 검색됩니다.
    컨테이너 spcontainer 스토리지 계정에서 만든 기존 컨테이너를 선택합니다.

Screenshot showing the configuration of output for the Stream Analytics job.

스크립트를 컴파일하고 Azure에 제출

스크립트 컴파일은 구문을 확인하고, 자동 배포를 위한 Azure Resource Manager 템플릿을 생성합니다.

  1. 스크립트를 마우스 오른쪽 단추로 클릭하고 ASA: 스크립트 컴파일을 선택합니다.

    Screenshot showing the compilation of script option from the Stream Analytics explorer in VS Code.

  2. 컴파일 후 두 개의 Azure Resource Manager 템플릿이 있는 프로젝트 아래에 Deploy 폴더가 표시됩니다. 이러한 두 파일은 자동 배포에 사용됩니다.

    Screenshot showing the generated deployment templates in the project folder.

  3. 쿼리 편집기에서 Azure에 제출을 선택합니다.

    Screenshot showing the submit job button to submit the Stream Analytics job to Azure.

    그런 다음, 지침에 따라 구독 선택 > 작업 선택 > 새 작업 만들기 > 작업 이름 입력 > 리소스 그룹 및 지역 선택 프로세스를 완료합니다.

  4. Azure에 게시를 선택하고 완료합니다. 작업 상태를 보여 주는 새 탭인 클라우드 작업 보기가 열릴 때까지 기다립니다.

    Screenshot showing the publish to Azure button in VS Code.

Stream Analytics 작업 시작 및 출력 확인

  1. 클라우드 작업 보기 탭에서 시작을 선택하여 클라우드에서 작업을 실행합니다. 이 프로세스를 완료하는 데 몇 분 정도 걸릴 수 있습니다.

    Screenshot showing the Start job button in the Cloud view page.

  2. 작업이 성공적으로 시작되면 작업 상태가 실행 중으로 변경됩니다. ASA 작업이 실행되는 방법을 보여 주는 논리 다이어그램을 볼 수 있습니다.

    Screenshot showing the job running status in VS Code.

  3. 출력 결과를 보려면 Visual Studio Code 확장 또는 Azure Portal에서 Blob 스토리지를 열면 됩니다.

    Screenshot showing the output file in the Blob container.

    파일을 다운로드하고 열어서 출력을 확인합니다.

    {"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"}}
    

리소스 정리

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

  1. Azure Portal의 왼쪽 메뉴에서 리소스 그룹을 선택한 다음, 만든 리소스의 이름을 선택합니다.

  2. 리소스 그룹 페이지에서 삭제를 선택합니다. 텍스트 상자에서 삭제할 리소스의 이름을 입력한 다음, 삭제를 선택합니다.

다음 단계

Visual Studio Code용 ASA 도구 확장에 대해 자세히 알아보려면 다음 문서를 계속 진행합니다.