연습 - IoT Edge에 Azure 함수 배포
디바이스에서 보낸 원격 분석을 필터링합니다.
각 매장에서 전송되는 데이터의 양을 최소화하려고 합니다. Azure IoT Central 애플리케이션으로 전송되는 원격 분석의 양을 줄이기 위해, IoT Edge 디바이스에서 데이터를 필터링하려고 합니다.
여기서는 IoT Edge 디바이스에서 실행되는 Azure Functions를 사용하여 필터를 구현합니다. 이 필터는 주변 온도가 21°C를 초과하는 경우에만 디바이스가 원격 분석을 전송하도록 합니다.
참고 항목
이 연습은 선택 사항입니다. 이 연습을 완료하려면 시작하기 전에 Azure 구독을 만들어야 합니다. Azure 계정이 없거나 지금 만들지 않으려는 경우 제시되는 정보를 이해할 수 있도록 지침을 끝까지 읽어 보세요.
컨테이너 레지스트리 구성
IoT Edge 디바이스는 필터를 구현하는 사용자 지정 Azure Functions 모듈을 다운로드하여 설치해야 합니다. IoT Edge 모듈은 컨테이너 리포지토리에 저장할 수 있는 Docker 호환 이미지로 패키징됩니다. ACR(Azure Container Registry)을 사용하여 새 모듈을 저장하고 원본 프로젝트에서 컨테이너를 빌드합니다.
다음 명령을 실행하여 Azure의 리소스 그룹에 컨테이너 레지스트리를 추가합니다.
REGISTRY_NAME="edgecentral$RANDOM"
az acr create -n $REGISTRY_NAME -g <rgn>[sandbox resource group name]</rgn> --sku Standard --admin-enabled true
az acr credential show -n $REGISTRY_NAME
echo "Your registry name is: $REGISTRY_NAME"
이 단원의 후반부에서 사용할 레지스트리 이름과 password
값을 기록해 둡니다.
Azure Functions 프로젝트 만들기
C#을 사용하여 함수를 구현합니다. 다음 명령을 실행하여 프로젝트 템플릿을 설치한 다음, 기본 프로젝트를 생성합니다.
dotnet new -i Microsoft.Azure.IoT.Edge.Function
dotnet new aziotedgefunction -n FilterFunction -r $REGISTRY_NAME.azurecr.io/filterfunction
cd FilterFunction
ls
다음 명령을 실행하여 기존 FilterFunction.cs를 기계 온도 원격 분석 값을 필터링하는 구현으로 대체합니다.
curl -O https://raw.githubusercontent.com/Azure-Samples/iot-central-docs-samples/main/iotedge/FilterFunction.cs
이제 이미지를 빌드하여 컨테이너 레지스트리에 업로드합니다. 이 명령을 실행하는 데 몇 분 정도 걸립니다.
az acr build --registry $REGISTRY_NAME --image filterfunction:v1 -f Dockerfile.amd64 .
다음 명령을 사용하여 이미지를 레지스트리에 나열할 수 있습니다.
az acr repository list --name $REGISTRY_NAME
배포 매니페스트 업데이트
IoT Edge 디바이스에서 새 필터 모듈을 사용하려면 배포 매니페스트를 새 버전으로 업데이트합니다.
다음 링크를 마우스 오른쪽 클릭하고 다른 이름으로 저장을 선택하여 로컬 머신에 새 배포 매니페스트 및 인터페이스 정의를 다운로드합니다.
텍스트 편집기에서 EnvironmentalSensorManifestFilter-1-4.json을 열고 컨테이너 레지스트리의 필터 모듈을 사용하도록 업데이트합니다.
<YOUR CONTAINER REGISTRY NAME>
의 세 인스턴스를 컨테이너 레지스트리 이름으로 바꿉니다. 이름은edgecentral27912
과 같습니다.<YOUR CONTAINER REGISTRY PASSWORD>
을 이 단원 앞쪽에서 기록해 둔 암호로 바꿉니다.- 변경 내용을 저장합니다.
이 버전의 배포 매니페스트는 다음과 같습니다.
생성한 Azure 함수를 사용하여 모듈을 추가합니다.
"filterfunction": { "version": "1.0", "type": "docker", "status": "running", "restartPolicy": "always", "settings": { "image": "<YOUR CONTAINER REGISTRY NAME>.azurecr.io/filterfunction:v1", "createOptions": "" }
필터링된 원격 분석을 Azure IoT Central 애플리케이션에 보내기 전에, SimulatedTemperatureSensor 모듈의 출력을 filterfunction 모듈으로 라우팅합니다.
"routes": { "FilterFunctionToIoTCentral": "FROM /messages/modules/filterfunction/outputs/* INTO $upstream", "sensorToFilterFunction": "FROM /messages/modules/SimulatedTemperatureSensor/outputs/temperatureOutput INTO BrokeredEndpoint(\"/modules/filterfunction/inputs/input1\")" },
새 배포 매니페스트를 업로드하려면 다음을 수행합니다.
Azure IoT Central 애플리케이션에서 Edge 매니페스트로 이동하여 환경 센서 매니페스트를 선택합니다.
사용자 지정 페이지에서 새 EnvironmentalSensorManifestFilter-1-4.json 파일을 업로드합니다. 다음을 선택합니다.
검토 및 완료 페이지에는 새 filterfunction 모듈이 표시됩니다. 저장을 선택합니다.
디바이스 페이지에서 환경 센서 에지 디바이스 - store-001 디바이스로 이동하고 모듈을 선택합니다.
페이지 상단에서 매니페스트 관리 > 에지 매니페스트 할당을 선택합니다. 환경 센서 매니페스트를 선택한 다음 매니페스트 할당을 선택합니다.
이제 모듈 목록에 실행 중인 filterfunction 모듈이 포함됩니다.
새 모듈을 사용하도록 디바이스 템플릿 업데이트
이제 IoT Edge 디바이스는 원격 분석 인터페이스 대신 filterfunction 인터페이스를 통해 원격 분석을 전송합니다. 따라서 디바이스 템플릿 및 뷰를 업데이트해야 합니다.
디바이스 템플릿 페이지에서 환경 센서 에지 디바이스를 선택합니다.
모듈을 선택한 다음 매니페스트에서 모듈 가져오기를 선택합니다.
모듈 가져오기 대화 상자에서 환경 센서를 선택한 다음 가져오기를 선택합니다.
이제 새 모듈은 원격 분석을 Azure IoT Central로 전송합니다. 다음으로, 원격 분석을 지정하고 차트를 업데이트하는 새 필터 모듈에 인터페이스를 추가합니다.
- 모듈 FilterFunction을 선택하고 + 상속된 인터페이스 추가를 선택합니다. 이 옵션을 보려면 줄임표(...)를 선택해야 할 수도 있습니다.
- 가져오기 인터페이스 타일을 선택합니다. 이전에 다운로드한 TelemetryInterfaceFilter.json 파일을 선택합니다.
SimulatedTemperatureModule은 더 이상 원격 분석을 Azure IoT Central로 직접 전송하지 않으므로, 원래의 원격 분석 인터페이스를 제거할 수 있습니다. 이 모듈의 출력은 IoT Edge 런타임에 의해 FilterFunction 모듈로 라우팅됩니다.
- SimulatedTemperatureSensor 모듈에서 원격 분석 인터페이스를 선택합니다.
- 삭제를 선택한 다음 작업을 확인합니다.
IoT Edge 디바이스 원격 분석 보기를 수정하여 FilterFunction 모듈에서 보낸 원격 분석을 표시합니다.
- 디바이스 템플릿에서 IoT Edge 디바이스 원격 분석 보기를 선택한 다음, 차트 타일에서 편집 옵션을 선택합니다.
- 주변/온도, 습도, 머신/온도, 압력 원격 분석 값을 추가합니다.
- 업데이트를 선택한 다음 저장을 선택합니다.
- 게시를 선택하여 새 버전의 디바이스 템플릿을 게시합니다.
작업 확인
IoT Edge 디바이스에서 필터링된 원격 분석을 보려면 다음을 수행합니다.
디바이스 페이지에서 store-001 디바이스를 선택합니다.
IoT Edge 디바이스 원격 분석 보기를 선택합니다.
차트에서 필터링된 원격 분석을 볼 수 있습니다. 평균 주변 온도를 21.0도 미만으로 표시한 값이 없습니다.
디바이스가 중지하는 경우, SimulatedTemperatureSensor 모듈이 500 메시지를 보낸 후 원격 분석 전송을 중지했기 때문일 수 있습니다. 가상 머신을 다시 시작하면 카운트가 다시 설정되고 원격 분석이 다시 시작되는 것을 볼 수 있습니다.
az vm restart --resource-group <rgn>[sandbox resource group name]</rgn> \
--name $(az vm list --resource-group <rgn>[sandbox resource group name]</rgn> --query [0].name -o tsv)