라즈베리파이에 Azure IoT Edge를 설치하고 Azure IoT Hub를 통해서 모듈을 배포해보겠습니다. 특히 Azure 마켓플레이스에 등록된 IoT Edge 모듈을 사용하는 방법도 살펴보겠습니다.
이번 실습을 통해서
- Azure IoT Hub 만들기
- IoT Hub에 Azure IoT Edge 디바이스 생성
- 라즈베리파이에 Azure IoT Edge 런타임 설치
- Azure 마켓플레이스에 있는 모듈 설치하기
-
Azure 구독
구독이 없으면 무료 체험계정 만들기
Azure IoT Edge가 작동될 라즈베리파이 기기를 준비합니다. 라즈베리파이에는 Rasbian 리눅스가 설치되어 있어야 합니다. 설치 방법은 Setting up your Raspberry Pi를 참조 바랍니다.
라즈베리파이에 모니터와 키보드, 마우스를 연결하여 무선 네트워크를 연결하고 IP를 확인합니다.
라즈베리파이에 SSH를 연결할 수 있도록 설정합니다. 초기 아이디와 비밀번호는 pi/raspberry 입니다.
Putty 등의 툴을 이용하여 SSH에 접속합니다.
Azure 포탈에서 Azure IoT Hub를 만듭니다.
Step 1.1 : Azure 포탈에 로그인
웹브라우저로 http://portal.azure.com에 접속한 후 로그인 합니다.
Create a resource -> Internet of Things -> IoT Hub 를 선택합니다.
4가지 파라미터를 입력하여 IoT Hub를 생성합니다.
파라미터 | 설명 | 예 |
---|---|---|
구독 | Subscription to use for the new IoT Hub | Azure Free Account |
Resource Group | Create a new Resource Group for this lab | IoTHOLGroup |
지역 | Data center region nearest to you | Korea Central |
IoT Hub 이름 | Provide a name that is globally unique | MsIoTBootCamp1234 |
- 4가지 값을 입력하여 IoT Hub를 만듭니다.
- IoT Hub 이름은 유일해야 합니다. 녹색 체크박스 확인
- Next: Size and scale>> 선택
IoT Hub는 가격과 관련된 Scale과 크기가 있습니다. 각 Scale tier는 서로 다른 한도와 기능제약을 가지고 있습니다. 실제 시나리오에 맡는 크기와 Scale을 선택해야 합니다.
여기에서는 무료를 선택하고 F1: Free tier for Pricing and scale tier
Review + create 를 클릭합니다.
Note
무료 IoT Hub는 구독당 하나만 만들수 있습니다. 이미 F1 IoT Hub를 가지고 있다면 Standard 1 (S1)을 선택합니다.
참조 : https://docs.microsoft.com/en-us/azure/iot-hub/iot-hub-scaling
Create 버튼을 눌러 IoT Hub 인스턴스를 생성합니다.
배포가 완료될 때까지 기다립니다.
이번엔 라즈베리파이를 위한 새로운 Azure IOT Edge Device를 등록합니다.
Go to resource
버튼을 눌러 IoT Hub에 들어갑니다.
IoT Edge 메뉴를 선택합니다
새로운 IoT Edge 디바이스를 추가합니다.
Click Add an IoT Edge device
디바이스 아이디는 IoT Edge 디바이스를 구분하는 ID로 사용됩니다.
-
유일한 이름을 사용합니다. e.g. IoTHOLRpi
-
Save 클릭
새로운 IoT Edge 디바이스를 Refresh 버튼을 눌러 확인합니다.
IoT Edge 디바이스를 IoT Hub에 연결하려면 Connection String이 필요합니다. 디바이스 Connection String은 IoT Hub가 디바이스를 인증하는데 사용됩니다.
향후 사용을 위해서 복사해 놓습니다.
참고문서 : https://devblogs.microsoft.com/iotdev/understand-different-connection-strings-in-azure-iot-hub/
IoT Edge 메뉴에서 디바이스 이름을 클릭하면 Device Details 페이지를 통해 IoT Edge 디바이스의 상세 정보를 볼 수 있습니다.
Tip
각 디바이스마다 두개의 Connection String을 제공합니다.
Connection String 두개 중에 하나를 복사해 둡니다.
Important
Step 0에서 라즈베리파이에 SSH 또는 Desktop에 연결할 수 있어야 합니다.
IoT Hub연결을 위한 설정을 위해 라즈베리파이에 접속합니다.
이전단계에서 Azure IoT Edge 런타임을 설치했다면 Step 5로 이동합니다.
이번엔 라즈베리파이에 Azure IoT Edge 런타임을 설치해보겠습니다. Linux(x64)에서 Azure IoT Edge 런타임 설치 문서를 따라서 진행합니다.
$ curl https://packages.microsoft.com/config/debian/stretch/multiarch/prod.list > ./microsoft-prod.list
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 77 100 77 0 0 235 0 --:--:-- --:--:-- --:--:-- 235
$ sudo cp ./microsoft-prod.list /etc/apt/sources.list.d/
$ curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 983 100 983 0 0 2445 0 --:--:-- --:--:-- --:--:-- 2445
$ sudo cp ./microsoft.gpg /etc/apt/trusted.gpg.d/
$ sudo apt-get update
$ sudo apt-get install moby-engine
$ sudo apt-get install moby-cli
일부 오류가 보이는데 우선 무시하고 넘어갑니다.
$ curl -sSL https://raw.githubusercontent.com/moby/moby/master/contrib/check-config.sh -o check-config.sh
$ chmod +x check-config.sh
$ ./check-config.sh
만약 check-config.sh 에서 에러가 나면 sudo modprobe configs 를 입력하여 /proc/config.gz 파일을 생성합니다.
$ sudo apt-get update
$ sudo apt-get install iotedge
데몬은 /etc/iotedge/config.yaml에 있는 구성 파일을 사용하여 구성할 수 있습니다. 이 파일은 기본적으로 쓰기 금지되어 있습니다 편집하려면 관리자 권한이 필요합니다.
VSCode에서 복사해 놓은 디바이스 Connection String을 YAML파일에 입력해줍니다. 잘 사용하는 에디터를 이용해서 수정합니다.
$ sudo nano /etc/iotedge/config.yaml
provisioning:
source: "manual"
device_connection_string: "<ADD DEVICE CONNECTION STRING HERE>"
# provisioning:
# source: "dps"
# global_endpoint: "https://global.azure-devices-provisioning.net"
# scope_id: "{scope_id}"
# registration_id: "{registration_id}"
파일을 저장하고 닫습니다. CTRL + X, Y, Enter
$ sudo systemctl restart iotedge
systemctl 명령을 이용해서 서비스 실행상태를 확인합니다.
$ systemctl status iotedge
● iotedge.service - Azure IoT Edge daemon
Loaded: loaded (/lib/systemd/system/iotedge.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2019-06-24 05:51:26 UTC; 13s ago
Docs: man:iotedged(8)
Main PID: 5932 (iotedged)
Tasks: 9 (limit: 9513)
CGroup: /system.slice/iotedge.service
└─5932 /usr/bin/iotedged -c /etc/iotedge/config.yaml
Jun 24 05:51:28 UbuntuIoT iotedged[5932]: 2019-06-24T05:51:28Z [INFO] - Updating identity for module $edgeAgent
Jun 24 05:51:28 UbuntuIoT iotedged[5932]: 2019-06-24T05:51:28Z [INFO] - Pulling image mcr.microsoft.com/azureiotedge-agent:1.0...
Jun 24 05:51:35 UbuntuIoT iotedged[5932]: 2019-06-24T05:51:35Z [INFO] - Successfully pulled image mcr.microsoft.com/azureiotedge-agent:1.0
Jun 24 05:51:35 UbuntuIoT iotedged[5932]: 2019-06-24T05:51:35Z [INFO] - Creating module edgeAgent...
lines 1-19/19 (END)
iotedge 명령으로 배포되고 실행중인 모듈 리스트를 확인합니다.
$ sudo iotedge list
NAME STATUS DESCRIPTION CONFIG
edgeAgent running Up 2 minutes mcr.microsoft.com/azureiotedge-agent:1.0
edgeHub running Up a minute mcr.microsoft.com/azureiotedge-hub:1.0
Azure 마켓플레이스에는 마이크로소프트가 검증해 놓은 엔터프라이즈 환경에서 사용할 수 있는 다양한 Azure의 애플리케이션과 서비스가 있는 온라인 마켓입니다. 여기에는 미리 많들어 놓은 여러가지 IoT Edge 모듈을 찾아볼 수 있습니다. 이중에서 온도센서 시뮬레이터를 사용해 보겠습니다.
Azure 포탈에서도 마켓플레이스를 제공합니다.
마켓플레이스에서 simulated 를 입력하여 검색한 후 Simulated Temperature Sensor를 클릭 합니다.
Create를 클릭합니다.
이 단계에서는 어떤 디바이스에 모듈을 배포할지 선택합니다. 이전에 만든 IoT Edge 디바이스를 선택합니다.
Parameter | Description | Example |
---|---|---|
구독 | 구독을 선택합니다. | Azure Free Account |
IoT Hub | 이전단계에서 만든 IoT Hub를 선택합니다. | IoTHOLHub |
IoT Edge Device 이름 | 이전단계에서 만든 IoT Edge 디바이스를 선택합니다. | IoTHOLRpi |
Create 를 클릭하여 다음 단계로 넘어갑니다.
어떤 경우에는 추가적인 정보를 제공하기도 합니다.
Next 을 클릭하여 넘어갑니다.
IoT Edge 모듈에서 나가고 들어오는 메시지에 대한 라우팅 설정을 해줄 수 있습니다. 여기에서는 모든 메시지를 클라우드 ($upstream)로 보내도록 설정합니다.
{
"routes": {
"route": "FROM /messages/* INTO $upstream",
"upstream": "FROM /messages/* INTO $upstream"
}
}
Next 을 클릭하여 넘어갑니다.
Reference : https://docs.microsoft.com/en-us/azure/iot-edge/module-composition#declare-routes
Submit 버튼을 눌러 temperature simulator를 IoT Edge 디바이스(Windows Server 2019)에 배포합니다.
simulated temperature sensor 모듈은 테스트를 위한 온도데이터를 생성합니다. 이런 센서는 서버실, 공장, 풍력발전기 등에 설치 되어 온도, 습도, 압력 등의 값을 발생 시킵니다.
모듈이 클라우드로 부터 IoT Hub를 통해 디바이스까지 배포가 되었는지 확인 합니다.
sudo iotedge list
온도센서에서 클라우드로 보내는 메시지를 모듈 로그를 통해서 확인합니다.
sudo iotedge logs SimulatedTemperatureSensor -f
이번에는 Device Explorer를 통해서 IoT Hub가 받은 메시지를 확인해 보겠습니다. Device Explorer는 현재 Windows OS에서만 작동합니다. Device Explorer의 설치는 Device Explorer 설치링크에서 다운로드 받아서 설치합니다.
IoT Hub에 접근하기 위해서는 다시 Connection String이 필요합니다. 이번에는 IoT Hub Connection String입니다. Device Connection String과 헷갈리면 안됩니다.