Azure Cosmos DB를 사용하여 Azure IoT Hub의 디바이스 연결 이벤트 정렬

Azure Event Grid를 사용하면 이벤트 기반 애플리케이션을 빌드하고 비즈니스 솔루션에서 IoT 이벤트를 쉽게 통합할 수 있습니다. 이 문서에서는 Cosmos DB, 논리 앱, IoT Hub 이벤트 및 시뮬레이션된 Raspberry Pi를 사용하여 디바이스의 연결 및 연결 해제 이벤트를 수집하고 저장하는 설정을 안내합니다.

디바이스가 실행되는 순간부터 작업 순서가 활성화됩니다.

  1. IoT 허브 디바이스 키를 사용하여 Pi 디바이스가 시작된 다음, 중지됩니다.

  2. IoT Hub 이벤트는 디바이스 작업을 캡처한 다음, 논리 앱에 HTTP 요청을 보냅니다.

  3. 논리 앱은 설정한 조건에 따라 HTTP 요청을 처리합니다.

  4. 논리 앱은 Cosmos DB의 새 문서에 연결 또는 연결 해제 이벤트를 기록합니다.

    Screenshot of the setup we'll create for this article. This setup shows how all services and devices are connected.

필수 조건

  • 활성 Azure Cosmos DB for NoSQL 계정. 아직 만들지 않았다면, 데이터베이스 계정 만들기를 연습으로 참조하세요.

  • 데이터베이스의 컬렉션입니다. 컬렉션 추가를 연습으로 참조하세요. 컬렉션을 만들 때 파티션 키의 /id를 사용합니다.

  • Azure 구독 Azure 구독이 아직 없는 경우 시작하기 전에 무료 구독을 만듭니다.

  • Azure 구독의 IoT Hub입니다. CLI 또는 Azure Portal을 사용하여 만듭니다.

논리 앱 만들기

논리 앱을 만들고 가상 머신에 대한 리소스 그룹을 모니터링하는 Event Grid 트리거를 추가해 보겠습니다.

논리 앱 리소스 만들기

  1. Azure Portal에서 +리소스 만들기를 선택한 다음 통합, 논리 앱을 차례로 선택합니다.

    Screenshot of how to find and select a logic app in the Azure portal.

  2. 양식을 작성하여 다음을 포함하는 새 논리 앱을 만듭니다.

    • 구독

    • 리소스 그룹(또는 새 리소스 그룹 만들기)

    • 구독에서 고유한 논리 앱 이름

    • IoT 허브의 지역

    • 로그 분석을 사용하도록 설정하기 위한 아니요

    • 사용량의 계획 유형

      참고 항목

      사용량 계획 유형은 UI에서 논리 앱 디자이너를 사용하도록 설정하는 옵션입니다. 표준(기본값)을 선택하는 경우 논리 앱 디자이너를 사용할 수 있도록 새 워크플로를 만들어야 합니다.

    Screenshot of how to create a logic app in the Azure portal.

  3. 검토 + 만들기를 선택하여 구성을 검토한 다음, 만들기를 선택하여 논리 앱을 만듭니다.

  4. 이제 논리 앱에 대한 Azure 리소스를 만들었습니다. Azure가 논리 앱을 배포한 후 리소스로 이동을 선택합니다. 논리 앱 디자이너는 일반적인 패턴에 대한 템플릿을 표시하므로 더 빨리 시작할 수 있습니다.

  5. 논리 앱 디자이너에서 템플릿 섹션이 표시될 때까지 스크롤한 다음, 논리 앱을 처음부터 빌드할 수 있도록 빈 논리 앱을 선택합니다.

트리거 선택

트리거는 논리 앱을 시작하는 특정 이벤트입니다. 이 자습서에서는 워크플로를 시작하는 트리거를 HTTP를 통해 요청을 받습니다.

  1. 커넥터 및 트리거 검색 창에 HTTP를 입력하고 Enter 키를 누릅니다.

  2. HTTP 요청이 수신될 때 요청을 트리거로 선택합니다.

    Screenshot of how to find select HTTP request trigger.

  3. 샘플 페이로드를 사용하여 스키마 생성을 선택합니다.

    Screenshot of how to use a sample payload to generate a schema.

  4. 다음 샘플 JSON 코드를 텍스트 상자에 붙여넣은 다음, 완료를 선택합니다.

    이 JSON은 템플릿으로만 사용되므로 정확한 값은 중요하지 않습니다.

    [{
     "id": "fbfd8ee1-cf78-74c6-dbcf-e1c58638ccbd",
     "topic":
       "/SUBSCRIPTIONS/DEMO5CDD-8DAB-4CF4-9B2F-C22E8A755472/RESOURCEGROUPS/EGTESTRG/PROVIDERS/MICROSOFT.DEVICES/IOTHUBS/MYIOTHUB",
     "subject": "devices/Demo-Device-1",
     "eventType": "Microsoft.Devices.DeviceConnected",
     "eventTime": "2018-07-03T23:20:11.6921933+00:00",
     "data": {
       "deviceConnectionStateEventInfo": {
         "sequenceNumber":
           "000000000000000001D4132452F67CE200000002000000000000000000000001"
       },
       "hubName": "MYIOTHUB",
       "deviceId": "48e44e11-1437-4907-83b1-4a8d7e89859e",
       "moduleId": ""
     },
     "dataVersion": "1",
     "metadataVersion": "1"
    }]
    

    Screenshot of the sample JSON payload pasted into the text box in Azure.

조건 만들기

조건은 특정 조건을 통과한 후에 특정 작업을 실행하는 데 도움이 됩니다. 이 문서에서는 eventType이 디바이스 연결됨인지 또는 디바이스 연결 끊김인지를 확인하는 것이 조건입니다. 해당 eventType이 true일 때 실행되는 작업은 Azure Cosmos DB에서 문서를 만드는 것입니다. 이 조건은 논리 앱 디자이너에서 만들어집니다.

  1. + 새 단계, 기본 제공을 차례로 선택한`다음, Condition이라는 컨트롤을 찾아 선택합니다.

  2. 연결 이벤트 또는 연결 끊김 이벤트를 단일 구문 분석으로 캡처하려고 하므로 조건에서 AndOr로 변경합니다.

  3. 값 선택 상자 내부를 선택할 수 있는 필드인 동적 콘텐츠를 보여 주는 팝업이 나타납니다.

    • eventType을 선택합니다. 팝업이 닫히면 본문이전 단계의 출력 선택에 자동으로 배치됩니다. 조건을 선택하여 조건문을 다시 엽니다.

    • 값과 같게 유지합니다.

    • Microsoft.Devices.DeviceConnected를 해당 행의 마지막 값으로 입력합니다.

    • + 추가를 선택하여 다른 행을 추가합니다.

    • 이 두 번째 행은 연결 해제 이벤트를 찾는 경우를 제외하면 첫 번째 행과 비슷합니다.

      eventType같고, 행 값에 대해 Microsoft.Devices.DeviceDisconnected를 사용합니다.

      Screenshot of the full For Each condition.

  4. True일 경우 대화 상자에서 작업 추가를 클릭합니다.

    Screenshot of the 'If true' box in Azure.

  5. Cosmos DB를 검색하고 Azure Cosmos DB - 문서 만들기 또는 업데이트(V3)를 선택합니다.

    Screenshot of the search for Azure Cosmos DB.

  6. 문서 만들기 또는 업데이트(V3) 패널이 표시됩니다. 필드에 이러한 값을 입력합니다.

    Azure Cosmos DB 계정 이름: {계정 이름 추가}

    데이터베이스 ID: ToDoList

    컬렉션 ID: 항목

    문서: 동적 콘텐츠 매개 변수 목록에서 Current item을 선택합니다.

    Screenshot shows an Execute stored procedure (V3) item with 'Add new parameter' selected.

  7. 논리 앱을 저장합니다.

HTTP URL 복사

Logic Apps Designer를 나가기 전에 논리 앱이 트리거에 대해 수신 대기하는 URL을 복사합니다. 이 URL을 사용하여 Event Grid를 구성합니다.

  1. HTTP 요청을 받을 경우 트리거 구성 상자를 선택하여 확장합니다.

  2. HTTP POST URL의 값을 그 옆에 있는 복사 단추를 선택하여 복사합니다.

    Screenshot of where to find the HTTP URL to copy.

  3. 다음 섹션에서 사용할 수 있도록 이 URL을 저장합니다.

IoT Hub 이벤트에 대한 구독 구성

이 섹션에서는 일어나는 순서대로 이벤트를 게시하도록 Azure IoT Hub 를 구성합니다.

  1. Azure Portal에서 IoT Hub로 이동합니다.

  2. 이벤트를 선택합니다.

    Screenshot of where the Events button is located in the IoT Hub menu.

  3. + 이벤트 구독을 선택합니다.

    Create new event subscription

  4. 이벤트 구독 세부 정보 입력: 설명이 포함된 이름을 제공하고 Event Grid 스키마이벤트 스키마로 선택합니다.

  5. IoT 허브 리소스에 대한 시스템 토픽 이름을 만듭니다.

  6. 이벤트 유형 필드를 채웁니다. 드롭다운 목록에서 디바이스 연결됨디바이스 연결 끊김만 메뉴에서 선택합니다. 화면에서 다른 곳을 클릭하여 목록을 닫고 선택 내용을 저장합니다.

    Set event types to look for

  7. 엔드포인트 정보에서 엔드포인트 유형을 웹후크로 선택하고, 엔드포인트 선택을 클릭하고, 논리 앱에서 복사한 URL을 붙여넣고, 선택을 확인합니다.

    Select endpoint url

  8. 이제 양식이 다음 예제와 같이 표시됩니다.

    Screenshot of the form to create an event subscription.

    만들기를 선택하여 이벤트 구독을 저장합니다.

    Important

    디바이스를 실행하기 전에 이벤트가 처리되기까지 몇 분 정도 기다립니다. Azure 서비스가 만들어지거나 변경될 때마다 파이프라인에서 다음 단계를 너무 빨리 시작하면 불필요한 오류가 발생할 수 있습니다. 예를 들어 IoT 허브가 활성 상태가 아닌 경우 이벤트를 받을 준비가 되지 않습니다. IoT 허브 개요 페이지를 확인하여 IoT 허브가 활성 상태인지 여부를 확인합니다. 그렇지 않으면 페이지 맨 위에 경고가 표시됩니다.

    Screenshot of an IoT Hub error that says it's not in an active state.

디바이스 실행 및 이벤트 관찰

이벤트 구독을 설정했으면 디바이스를 연결하여 테스트해 보겠습니다.

IoT Hub에 디바이스 등록

  1. IoT Hub에서 디바이스를 선택합니다.

  2. 창의 위쪽에서 + 디바이스 추가를 선택합니다.

  3. 디바이스 IDDemo-Device-1를 입력합니다.

  4. 저장을 선택합니다.

    Screenshot of location of the Add Device button.

  5. 디바이스를 다시 클릭합니다. 이제 연결 문자열과 키가 채워집니다. 나중에 사용할 수 있도록 기본 연결 문자열을 복사하고 저장합니다.

    Screenshot of location of the Primary Connection String for your device.

Raspberry Pi 시뮬레이터 시작

Raspberry Pi 웹 시뮬레이터를 사용하여 디바이스 연결을 시뮬레이션해 보겠습니다.

Raspberry Pi 시뮬레이터 시작

Raspberry Pi 웹 시뮬레이터에서 샘플 애플리케이션 실행

이 샘플 앱은 디바이스 연결 이벤트를 트리거합니다.

  1. 코딩 영역에서 줄 15의 자리 표시자를 이전 섹션의 끝부분에서 저장한 Azure IoT Hub 디바이스 연결 문자열로 바꿉니다.

    Screenshot of where to add your primary connection string in the Raspberry Pi script.

  2. 실행을 선택하여 애플리케이션을 실행합니다.

    IoT Hub로 전송되는 센서 데이터와 메시지를 보여 주는 다음과 같은 출력이 표시됩니다.

    Screenshot of what to expect in your output console when you run the Raspberry Pi.

  3. 논리 앱 개요 페이지를 확인하여 논리가 트리거되고 있는지 확인할 수 있습니다. 성공 또는 실패라고 표시됩니다. 여기서 문제 해결이 필요한 경우 논리 앱 상태를 확인해 보겠습니다. 트리거가 실행된 시점부터 15~30초 지연이 예상됩니다. 논리 앱 문제를 해결해야 하는 경우 이 오류 문제 해결 문서를 참조하세요.

    Screenshot of the status updates on your logic app Overview page.

  4. 디바이스 연결 끊김 이벤트를 트리거하는 시뮬레이터를 중지하려면 중지를 선택합니다. 이 이벤트는 연결 이벤트가 기록된 것처럼 논리 앱 개요 페이지에 기록됩니다.

이제 샘플 애플리케이션을 실행하여 IoT 허브로 이동하는 디바이스의 연결 및 연결 해제 이벤트를 수집했습니다.

Azure Cosmos DB에서 이벤트 관찰

Cosmos DB 문서에서 실행된 논리 앱의 결과를 볼 수 있습니다. 페이지를 새로 고치면 문서가 항목 컬렉션에 나타납니다. 각 연결 상태 이벤트는 고유한 id가 할당된 새 문서를 생성합니다. 다음 이미지는 디바이스가 시작되었을 때 만든 문서(연결됨)를 보여 줍니다. 연결된 이벤트 유형이 JSON 출력에 나열됩니다.

Screenshot of the newly generated connection state event in a Cosmos DB collection.

Azure CLI 사용

Azure Portal을 사용하는 대신 Azure CLI를 사용하여 IoT Hub 단계를 설정할 수 있습니다. 자세한 내용은 이벤트 구독 만들기IoT 디바이스 만들기에 대한 Azure 명령줄 인터페이스 페이지를 참조하세요.

리소스 정리

이 자습서에서는 Azure 구독에 요금을 부과하는 리소스를 사용했습니다. 자습서를 사용해 보고 결과 테스트를 완료한 경우 유지하지 않으려는 리소스를 사용하지 않도록 설정하거나 삭제합니다.

논리 앱

논리 앱에 대한 작업을 잃지 않으려면 삭제하는 대신에 비활성화합니다.

  1. 논리 앱으로 이동

  2. 개요 블레이드에서 삭제 또는 사용 안 함을 선택합니다.

    구독마다 하나의 무료 Azure IoT Hub를 가질 수 있습니다. 이 자습서에 대한 무료 허브를 만든 경우 요금이 부과되는 것을 막기 위해 삭제할 필요가 없습니다.

IoT 허브 또는 Event Grid

  1. IoT Hub로 이동

  2. 개요 블레이드에서 삭제를 선택합니다.

  3. IoT 허브를 유지하더라도 만든 이벤트 구독을 삭제하는 것이 좋습니다. IoT 허브에서 Event Grid를 선택합니다.

  4. 제거할 이벤트 구독을 선택한 다음, 삭제를 선택합니다.

Cosmos DB

Azure Portal에서 Azure Cosmos DB 계정을 제거하려면 리소스로 이동하여 위쪽 메뉴 모음에서 계정 삭제를 선택합니다. 자세한 지침은 Azure Cosmos DB 계정 삭제를 참조하세요.

다음 단계