Övning – Distribuera en Azure-funktion till IoT Edge
Filtrera telemetrin som skickas av enheten.
Kom ihåg att du vill minimera mängden data som skickas från varje lager. Om du vill minska mängden telemetri som skickas till ditt Azure IoT Central-program vill du filtrera data på IoT Edge-enheten.
Här använder du Azure Functions som körs på IoT Edge-enheten för att implementera ett filter. Filtret säkerställer att enheten endast skickar telemetri när omgivningstemperaturen är över 21°C.
Kommentar
Den här övningen är valfri. Om du vill slutföra den här övningen måste du skapa en Azure-prenumeration innan du börjar. Om du inte har något Azure-konto eller om du inte vill skapa ett för tillfället kan du läsa igenom anvisningarna så att du förstår den information som visas.
Konfigurera ett containerregister
Din IoT Edge-enhet måste ladda ned och installera den anpassade Azure Functions-modulen som implementerar filtret. IoT Edge-moduler paketeras som Docker-kompatibla avbildningar som du kan lagra i en containerlagringsplats. Du använder Azure Container Registry (ACR) för att lagra din nya modul och för att skapa containern från ett källprojekt.
Kör följande kommandon för att lägga till ett containerregister i resursgruppen i 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"
Anteckna registernamnet och password
värdena för användning senare i den här lektionen.
Skapa ett Azure Functions-projekt
Du använder C# för att implementera funktionen. Kör följande kommandon för att installera projektmallen och generera sedan ett skelettprojekt:
dotnet new -i Microsoft.Azure.IoT.Edge.Function
dotnet new aziotedgefunction -n FilterFunction -r $REGISTRY_NAME.azurecr.io/filterfunction
cd FilterFunction
ls
Kör följande kommando för att ersätta den befintliga FilterFunction.cs med en implementering som filtrerar telemetrin för datorns temperatur:
curl -O https://raw.githubusercontent.com/Azure-Samples/iot-central-docs-samples/main/iotedge/FilterFunction.cs
Skapa nu avbildningen och ladda upp den till containerregistret. Förvänta dig att det tar några minuter att köra det här kommandot:
az acr build --registry $REGISTRY_NAME --image filterfunction:v1 -f Dockerfile.amd64 .
Du kan lista avbildningarna i registret med följande kommando:
az acr repository list --name $REGISTRY_NAME
Uppdatera distributionsmanifestet
Om du vill använda den nya filtermodulen på din IoT Edge-enhet uppdaterar du distributionsmanifestet med den nya versionen.
Ladda ned det nya distributionsmanifestet och gränssnittsdefinitionen till den lokala datorn genom att högerklicka på följande länkar och välja Spara som:
Öppna EnvironmentalSensorManifestFilter-1-4.json i en textredigerare och uppdatera den för att använda filtermodulen från containerregistret:
- Ersätt de tre instanserna av
<YOUR CONTAINER REGISTRY NAME>
med namnet på ditt containerregister. Namnet ser ut somedgecentral27912
. - Ersätt
<YOUR CONTAINER REGISTRY PASSWORD>
med lösenordet som du antecknade tidigare i den här lektionen. - Spara ändringarna.
Den här versionen av distributionsmanifestet:
Lägger till modulen med den Azure-funktion som du skapade:
"filterfunction": { "version": "1.0", "type": "docker", "status": "running", "restartPolicy": "always", "settings": { "image": "<YOUR CONTAINER REGISTRY NAME>.azurecr.io/filterfunction:v1", "createOptions": "" }
Dirigerar utdata från modulen SimulatedTemperatureSensor till filterfunction-modulen innan du skickar den filtrerade telemetrin till ditt Azure IoT Central-program:
"routes": { "FilterFunctionToIoTCentral": "FROM /messages/modules/filterfunction/outputs/* INTO $upstream", "sensorToFilterFunction": "FROM /messages/modules/SimulatedTemperatureSensor/outputs/temperatureOutput INTO BrokeredEndpoint(\"/modules/filterfunction/inputs/input1\")" },
Så här laddar du upp det nya distributionsmanifestet:
I ditt Azure IoT Central-program går du till Edge-manifest och väljer miljösensormanifestet .
På sidan Anpassa laddar du upp den nya EnvironmentalSensorManifestFilter-1-4.json-filen . Välj Nästa.
Sidan Granska och slutför visar den nya filterfunktionsmodulen . Välj Spara.
Gå till Miljösensor edge-enheten – lagra 001-enheten på sidan Enheter och välj Moduler.
Längst upp på sidan väljer du Hantera manifest > Tilldela kantmanifest. Välj miljösensormanifestet och välj sedan Tilldela manifest.
Listan över moduler innehåller nu modulen filterfunction som körs:
Uppdatera enhetsmallen så att den nya modulen används
IoT Edge-enheten skickar nu telemetrin via filterfunktionsgränssnittet i stället för telemetrigränssnittet . Därför måste du uppdatera enhetsmallen och vyerna.
På sidan Enhetsmallar väljer du Miljösensor Edge-enhet.
Välj Moduler och välj sedan Importera moduler från manifestet.
I dialogrutan Importera moduler väljer du Miljösensor och sedan Importera.
Den nya modulen skickar nu telemetrin till Azure IoT Central. Lägg sedan till ett gränssnitt i den nya filtermodulen som anger telemetrin och uppdaterar diagrammet.
- Välj ModulfilterFunktion och sedan + Lägg till ärvt gränssnitt. Du kan behöva välja ellipserna (...) för att se det här alternativet.
- Välj panelen Importera gränssnitt . Välj den TelemetryInterfaceFilter.json fil som du laddade ned tidigare.
Du kan ta bort det ursprungliga telemetrigränssnittet eftersom SimulatedTemperatureModule inte längre skickar telemetri direkt till Azure IoT Central. Utdata från den här modulen dirigeras till FilterFunction-modulen av IoT Edge-körningen.
- Välj telemetrigränssnittet i modulen SimulatedTemperatureSensor.
- Välj Ta bort och bekräfta sedan åtgärden.
Ändra telemetrivyn Visa IoT Edge-enhet så att telemetrin som skickas av FilterFunction-modulen visas.
- I enhetsmallen väljer du telemetrivyn Visa IoT Edge-enhet och väljer sedan alternativet Redigera på diagrampanelen.
- Lägg till värden för omgivande/temperatur, luftfuktighet, maskin/temperatur och trycktelemetri .
- Välj Uppdatera och sedan Spara.
- Välj Publicera för att publicera den nya versionen av enhetsmallen.
Kontrollera ditt arbete
Så här visar du den filtrerade telemetrin från din IoT Edge-enhet:
På sidan Enheter väljer du enheten store-001 .
Välj telemetrivyn Visa IoT Edge-enhet.
Du kan se den filtrerade telemetrin i diagrammet. Det finns inga värden som visas med en genomsnittlig omgivningstemperatur på mindre än 21,0 grader.
Om enheten verkar sluta skicka telemetri beror det troligtvis på att modulen SimulatedTemperatureSensor stoppas när 500 meddelanden har skickats. Om du startar om den virtuella datorn återställs antalet och telemetrin börjar flöda igen:
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)