빠른 시작: 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 구독. Azure 구독이 없는 경우 무료 계정을 만드세요.
- Visual Studio Code
Azure Stream Analytics Tools 확장 설치
VS Code(Visual Studio Code)를 엽니다.
왼쪽 창의 확장에서 Stream Analytics를 검색하고, Azure Stream Analytics Tools 확장에서 설치를 선택합니다.
설치한 후 작업 표시줄에서 Azure 아이콘을 선택하고 Azure에 로그인합니다.
로그인하면 Azure 계정에서 구독을 볼 수 있습니다.
참고 항목
ASA 도구 확장은 VS Code를 열 때마다 자동으로 로그인됩니다. 계정에 2단계 인증이 있는 경우 PIN 대신 전화 인증을 사용하는 것이 좋습니다. Azure 계정을 로그아웃하려면 Ctrl + Shift + P
를 누르고 Azure: Sign Out
을 입력합니다.
입력 데이터 준비
Stream Analytics 작업을 정의하기 전에 입력 데이터를 준비해야 합니다. 실시간 센서 데이터가 IoT Hub로 수집되고 나중에 작업 입력으로 구성됩니다. 작업에 필요한 입력 데이터를 준비하려면 다음 단계를 따릅니다.
Azure Portal에 로그인합니다.
리소스 만들기 > 사물 인터넷 > IoT Hub를 선택합니다.
IoT Hub 페이지에서 다음 정보를 입력합니다.
- 구독에서 Azure 구독을 선택합니다.
- 리소스 그룹에서 기존 리소스 그룹을 선택하거나 새 리소스 그룹을 만듭니다.
- IoT 허브 이름에서 IoT 허브 이름을 입력합니다.
- 지역에서 가장 가까운 지역을 선택합니다.
관리 페이지로 이동하여 가격 책정 및 크기 조정 계층에 대해 F1: 무료 계층을 선택합니다(구독에서 계속 사용할 수 있는 경우). 자세한 내용은 Azure IoT Hub 가격 책정을 참조하세요.
검토 + 만들기를 선택합니다. IoT 허브 정보를 검토하고, 만들기를 선택합니다. 이 프로세스는 IoT Hub를 배포하는 데 몇 분 정도 걸릴 수 있습니다.
IoT 허브가 만들어지면 리소스로 이동을 선택하여 IoT Hub 페이지로 이동합니다. '
IoT Hub 페이지의 왼쪽 메뉴에서 디바이스를 선택한 다음, + 디바이스 추가를 선택합니다.
디바이스 ID를 입력하고 저장을 선택합니다.
디바이스가 만들어지면 IoT 디바이스 목록에 디바이스가 표시됩니다. 표시되지 않으면 페이지에서 새로 고침 단추를 선택합니다.
목록에서 디바이스를 선택합니다. 나중에 사용할 수 있도록 기본 연결 문자열을 복사하고 메모장에 저장합니다.
IoT 시뮬레이터 실행
새 브라우저 탭에서 Raspberry Pi Azure IoT 온라인 시뮬레이터를 엽니다.
15번째 줄의 자리 표시자를 이전에 저장한 IoT 허브 디바이스 연결 문자열로 바꿉니다.
실행을 선택합니다. IoT 허브로 보내는 센서 데이터와 메시지가 출력에 표시됩니다.
Blob Storage 만들기
Azure Portal의 왼쪽 위 모서리에서 리소스 만들기>스토리지>스토리지 계정을 차례로 선택합니다.
스토리지 계정 만들기 창에서 스토리지 계정 이름, 위치 및 리소스 그룹을 입력합니다. 만든 IoT 허브와 동일한 위치 및 리소스 그룹을 선택합니다. 그런 다음, 검토 및 만들기를 선택하여 스토리지 계정을 만듭니다.
스토리지 계정 페이지의 왼쪽 메뉴에서 컨테이너를 선택한 다음, 명령 모음에서 + 컨테이너를 선택합니다.
새 컨테이너 페이지에서 컨테이너에 대한 이름을 제공하고, 퍼블릭 액세스 수준을 프라이빗(익명 권한 없음)으로 두고, 확인을 선택합니다.
Stream Analytics 프로젝트 만들기
Visual Studio Code에서 Ctrl+Shift+P를 누르고 ASA: Create New Project를 입력합니다.
프로젝트 이름(예: myASAproj)을 입력하고, 프로젝트의 폴더를 선택합니다.
ASA 프로젝트가 작업 영역에 추가됩니다. 프로젝트는 Inputs, Outputs 및 Functions의 3개 폴더로 구성됩니다. 또한 쿼리 스크립트(*.asaql), JobConfig.json 파일 및 asaproj.json 구성 파일이 있습니다.
asaproj.json 파일에는 Azure에 Stream Analytics 작업을 제출하는 데 필요한 입력, 출력 및 작업 구성 설정이 포함되어 있습니다.
참고 항목
명령 팔레트에서 입력 및 출력을 추가하면 해당 경로가 asaproj.json에 자동으로 추가됩니다. 입력 또는 출력을 추가하거나 제거할 때 asaproj.json에서 수동으로 추가 또는 제거해야 합니다. 입력 및 출력을 한 곳에 배치한 다음, 각 asaproj.json 파일에서 경로를 지정하여 다른 작업에서 참조하도록 선택할 수 있습니다.
변환 쿼리 정의
작업 입력 구성
Stream Analytics 프로젝트에서 마우스 오른쪽 단추로 Inputs 폴더를 클릭합니다. 그런 다음 바로 가기 메뉴에서 ASA: 입력 추가를 선택합니다.
또는 Ctrl+Shift+P를 눌러 명령 팔레트를 열고, ASA: Add Input을 입력합니다.
입력 형식으로 IoT Hub를 선택합니다.
드롭다운 메뉴에서 ASA 스크립트 *.asaql 및 Azure 구독을 선택한 다음, ENTER를 누릅니다.
Inputs 폴더 아래에 IoTHub1.json 파일이 만들어진 것을 확인할 수 있습니다. 설정을 다음과 같은 제안 값으로 바꾸고 여기에 언급되지 않은 필드의 기본값을 유지합니다.
설정 제안 값 Description 이름 입력 이 입력 이름은 쿼리의 FROM 문에 사용됩니다. IotHubNamespace spiothub IoT Hub의 이름입니다. 구독에서 선택하면 IoT Hub 이름이 자동으로 검색됩니다. SharedAccessPolicyName iothubowner 데이터 미리 보기를 선택하여 입력 데이터가 작업에 대해 성공적으로 구성되었는지 확인합니다. IoT Hub의 샘플을 가져오고 미리 보기 창에 표시됩니다.
작업 출력 구성
Ctrl+Shift+P를 눌러 명령 팔레트를 열고, ASA: Add Output을 입력합니다.
싱크 유형에 대해 Data Lake Storage Gen2/Blob Storage를 선택합니다.
이 출력을 사용하여 쿼리 스크립트를 선택합니다.
출력 파일 이름으로 BlobStorage1을 입력합니다.
다음 값을 사용하여 설정을 편집합니다. 여기서 설명되지 않은 필드의 경우 기본값을 유지합니다.
설정 제안 값 Description 이름 출력 이 출력 이름은 쿼리의 INTO 문에 사용됩니다. 스토리지 계정 spstorageaccount0901 스토리지 계정의 이름을 선택하거나 입력합니다. 스토리지 계정 이름이 동일한 구독에 만들어지면 자동으로 검색됩니다. 컨테이너 spcontainer 스토리지 계정에서 만든 기존 컨테이너를 선택합니다.
스크립트를 컴파일하고 Azure에 제출
스크립트 컴파일은 구문을 확인하고, 자동 배포를 위한 Azure Resource Manager 템플릿을 생성합니다.
스크립트를 마우스 오른쪽 단추로 클릭하고 ASA: 스크립트 컴파일을 선택합니다.
컴파일 후 두 개의 Azure Resource Manager 템플릿이 있는 프로젝트 아래에 Deploy 폴더가 표시됩니다. 이러한 두 파일은 자동 배포에 사용됩니다.
쿼리 편집기에서 Azure에 제출을 선택합니다.
그런 다음, 지침에 따라 구독 선택 > 작업 선택 > 새 작업 만들기 > 작업 이름 입력 > 리소스 그룹 및 지역 선택 프로세스를 완료합니다.
Azure에 게시를 선택하고 완료합니다. 작업 상태를 보여 주는 새 탭인 클라우드 작업 보기가 열릴 때까지 기다립니다.
Stream Analytics 작업 시작 및 출력 확인
클라우드 작업 보기 탭에서 시작을 선택하여 클라우드에서 작업을 실행합니다. 이 프로세스를 완료하는 데 몇 분 정도 걸릴 수 있습니다.
작업이 성공적으로 시작되면 작업 상태가 실행 중으로 변경됩니다. ASA 작업이 실행되는 방법을 보여 주는 논리 다이어그램을 볼 수 있습니다.
출력 결과를 보려면 Visual Studio Code 확장 또는 Azure Portal에서 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"}}
리소스 정리
더 이상 필요하지 않으면 리소스 그룹, Stream Analytics 작업 및 모든 관련 리소스를 삭제합니다. 작업을 삭제하면 작업에서 사용된 스트리밍 단위에 대한 청구를 방지합니다. 작업을 나중에 사용하려는 경우 중지하고 나중에 필요할 때 다시 시작할 수 있습니다. 이 작업을 계속 사용하지 않으려면 다음 단계를 사용하여 이 빠른 시작에서 만든 모든 리소스를 삭제합니다.
Azure Portal의 왼쪽 메뉴에서 리소스 그룹을 선택한 다음, 만든 리소스의 이름을 선택합니다.
리소스 그룹 페이지에서 삭제를 선택합니다. 텍스트 상자에서 삭제할 리소스의 이름을 입력한 다음, 삭제를 선택합니다.
다음 단계
Visual Studio Code용 ASA 도구 확장에 대해 자세히 알아보려면 다음 문서를 계속 진행합니다.