Azure Cosmos DB를 사용하여 Azure IoT Hub의 디바이스 연결 이벤트 정렬
아티클
Azure Event Grid를 사용하면 이벤트 기반 애플리케이션을 빌드하고 비즈니스 솔루션에서 IoT 이벤트를 쉽게 통합할 수 있습니다. 이 문서에서는 Cosmos DB, 논리 앱, IoT Hub 이벤트 및 시뮬레이션된 Raspberry Pi를 사용하여 디바이스의 연결 및 연결 해제 이벤트를 수집하고 저장하는 설정을 안내합니다.
디바이스가 실행되는 순간부터 작업 순서가 활성화됩니다.
IoT 허브 디바이스 키를 사용하여 Pi 디바이스가 시작된 다음, 중지됩니다.
IoT Hub 이벤트는 디바이스 작업을 캡처한 다음, 논리 앱에 HTTP 요청을 보냅니다.
논리 앱은 설정한 조건에 따라 HTTP 요청을 처리합니다.
논리 앱은 Cosmos DB의 새 문서에 연결 또는 연결 해제 이벤트를 기록합니다.
필수 조건
활성 Azure Cosmos DB for NoSQL 계정. 아직 만들지 않았다면, 데이터베이스 계정 만들기를 연습으로 참조하세요.
데이터베이스의 컬렉션입니다. 컬렉션 추가를 연습으로 참조하세요. 컬렉션을 만들 때 파티션 키의 /id를 사용합니다.
조건은 특정 조건을 통과한 후에 특정 작업을 실행하는 데 도움이 됩니다. 이 문서에서는 eventType이 디바이스 연결됨인지 또는 디바이스 연결 끊김인지를 확인하는 것이 조건입니다. 해당 eventType이 true일 때 실행되는 작업은 Azure Cosmos DB에서 문서를 만드는 것입니다. 이 조건은 논리 앱 디자이너에서 만들어집니다.
+ 새 단계, 기본 제공을 차례로 선택한`다음, Condition이라는 컨트롤을 찾아 선택합니다.
연결 이벤트 또는 연결 끊김 이벤트를 단일 구문 분석으로 캡처하려고 하므로 조건에서 And를 Or로 변경합니다.
값 선택 상자 내부를 선택할 수 있는 필드인 동적 콘텐츠를 보여 주는 팝업이 나타납니다.
eventType을 선택합니다. 팝업이 닫히면 본문이 이전 단계의 출력 선택에 자동으로 배치됩니다. 조건을 선택하여 조건문을 다시 엽니다.
값과 같게 유지합니다.
Microsoft.Devices.DeviceConnected를 해당 행의 마지막 값으로 입력합니다.
+ 추가를 선택하여 다른 행을 추가합니다.
이 두 번째 행은 연결 해제 이벤트를 찾는 경우를 제외하면 첫 번째 행과 비슷합니다.
eventType과 같고, 행 값에 대해 Microsoft.Devices.DeviceDisconnected를 사용합니다.
True일 경우 대화 상자에서 작업 추가를 클릭합니다.
Cosmos DB를 검색하고 Azure Cosmos DB - 문서 만들기 또는 업데이트(V3)를 선택합니다.
문서 만들기 또는 업데이트(V3) 패널이 표시됩니다. 필드에 이러한 값을 입력합니다.
Azure Cosmos DB 계정 이름: {계정 이름 추가}
데이터베이스 ID: ToDoList
컬렉션 ID: 항목
문서: 동적 콘텐츠 매개 변수 목록에서 Current item을 선택합니다.
논리 앱을 저장합니다.
HTTP URL 복사
Logic Apps Designer를 나가기 전에 논리 앱이 트리거에 대해 수신 대기하는 URL을 복사합니다. 이 URL을 사용하여 Event Grid를 구성합니다.
HTTP 요청을 받을 경우 트리거 구성 상자를 선택하여 확장합니다.
HTTP POST URL의 값을 그 옆에 있는 복사 단추를 선택하여 복사합니다.
다음 섹션에서 사용할 수 있도록 이 URL을 저장합니다.
IoT Hub 이벤트에 대한 구독 구성
이 섹션에서는 일어나는 순서대로 이벤트를 게시하도록 Azure IoT Hub 를 구성합니다.
Azure Portal에서 IoT Hub로 이동합니다.
이벤트를 선택합니다.
+ 이벤트 구독을 선택합니다.
이벤트 구독 세부 정보 입력: 설명이 포함된 이름을 제공하고 Event Grid 스키마를 이벤트 스키마로 선택합니다.
IoT 허브 리소스에 대한 시스템 토픽 이름을 만듭니다.
이벤트 유형 필드를 채웁니다. 드롭다운 목록에서 디바이스 연결됨 및 디바이스 연결 끊김만 메뉴에서 선택합니다. 화면에서 다른 곳을 클릭하여 목록을 닫고 선택 내용을 저장합니다.
디바이스를 실행하기 전에 이벤트가 처리되기까지 몇 분 정도 기다립니다. Azure 서비스가 만들어지거나 변경될 때마다 파이프라인에서 다음 단계를 너무 빨리 시작하면 불필요한 오류가 발생할 수 있습니다. 예를 들어 IoT 허브가 활성 상태가 아닌 경우 이벤트를 받을 준비가 되지 않습니다. IoT 허브 개요 페이지를 확인하여 IoT 허브가 활성 상태인지 여부를 확인합니다. 그렇지 않으면 페이지 맨 위에 경고가 표시됩니다.
디바이스 실행 및 이벤트 관찰
이벤트 구독을 설정했으면 디바이스를 연결하여 테스트해 보겠습니다.
IoT Hub에 디바이스 등록
IoT Hub에서 디바이스를 선택합니다.
창의 위쪽에서 + 디바이스 추가를 선택합니다.
디바이스 ID로 Demo-Device-1를 입력합니다.
저장을 선택합니다.
디바이스를 다시 클릭합니다. 이제 연결 문자열과 키가 채워집니다. 나중에 사용할 수 있도록 기본 연결 문자열을 복사하고 저장합니다.
코딩 영역에서 줄 15의 자리 표시자를 이전 섹션의 끝부분에서 저장한 Azure IoT Hub 디바이스 연결 문자열로 바꿉니다.
실행을 선택하여 애플리케이션을 실행합니다.
IoT Hub로 전송되는 센서 데이터와 메시지를 보여 주는 다음과 같은 출력이 표시됩니다.
논리 앱 개요 페이지를 확인하여 논리가 트리거되고 있는지 확인할 수 있습니다. 성공 또는 실패라고 표시됩니다. 여기서 문제 해결이 필요한 경우 논리 앱 상태를 확인해 보겠습니다. 트리거가 실행된 시점부터 15~30초 지연이 예상됩니다. 논리 앱 문제를 해결해야 하는 경우 이 오류 문제 해결 문서를 참조하세요.
디바이스 연결 끊김 이벤트를 트리거하는 시뮬레이터를 중지하려면 중지를 선택합니다. 이 이벤트는 연결 이벤트가 기록된 것처럼 논리 앱 개요 페이지에 기록됩니다.
이제 샘플 애플리케이션을 실행하여 IoT 허브로 이동하는 디바이스의 연결 및 연결 해제 이벤트를 수집했습니다.
Azure Cosmos DB에서 이벤트 관찰
Cosmos DB 문서에서 실행된 논리 앱의 결과를 볼 수 있습니다. 페이지를 새로 고치면 문서가 항목 컬렉션에 나타납니다. 각 연결 상태 이벤트는 고유한 id가 할당된 새 문서를 생성합니다. 다음 이미지는 디바이스가 시작되었을 때 만든 문서(연결됨)를 보여 줍니다. 연결된 이벤트 유형이 JSON 출력에 나열됩니다.