Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőre vonatkozik:
IoT Edge 1.4
Fontos
Az IoT Edge 1.5 LTS és az IoT Edge 1.4 támogatott kiadások. Ha egy korábbi kiadásban dolgozik, tekintse meg az IoT Edge frissítését.
Sql Server-modul üzembe helyezése adatok tárolására egy Azure IoT Edge-et futtató eszközön Linux-tárolókkal.
Az Azure IoT Edge és az SQL Server használatával adatokat tárolhat és kérdezhet le a peremhálózaton. Az Azure IoT Edge alapvető tárolási képességekkel rendelkezik az üzenetek gyorsítótárazásához, ha egy eszköz offline állapotba kerül, majd továbbítja őket a kapcsolat újbóli létrehozásakor. Előfordulhat azonban, hogy speciálisabb tárolási képességekre van szüksége, például az adatok helyi lekérdezésére. Az IoT Edge-eszközök helyi adatbázisok használatával összetettebb számításokat végezhetnek anélkül, hogy kapcsolatot kellene fenntartaniuk az IoT Hubbal.
Ez a cikk útmutatást nyújt egy SQL Server-adatbázis IoT Edge-eszközön való üzembe helyezéséhez. Az IoT Edge-eszközön futó Azure Functions strukturálja a bejövő adatokat, majd elküldi azokat az adatbázisnak. A cikkben ismertetett lépések más tárolókban működő adatbázisokra is alkalmazhatók, például a MySQL-re vagy a PostgreSQL-re.
Ebben az oktatóanyagban a következőket sajátíthatja el:
- Azure-függvény létrehozása a Visual Studio Code használatával
- SQL-adatbázis üzembe helyezése az IoT Edge-eszközön
- Modulok létrehozása és üzembe helyezése az IoT Edge-eszközön a Visual Studio Code használatával
- Létrehozott adatok megtekintése
Ha nem rendelkezik Azure-fiókkal, a kezdés előtt hozzon létre egy ingyenes fiókot .
Előfeltételek
Az oktatóanyag megkezdése előtt végig kellett volna haladnia az előző oktatóanyagon a Linux-tárolók fejlesztéséhez szükséges fejlesztői környezet beállításához: Azure IoT Edge-modulok fejlesztése a Visual Studio Code használatával. Az oktatóanyag elvégzésével a következő előfeltételeknek kell teljesülnie:
- Ingyenes vagy standard szintű IoT Hub az Azure-ban.
- Az Azure IoT Edge-et Linux-tárolókkal futtató AMD64-eszköz. A rövid útmutatók segítségével linuxos vagyWindows rendszerű eszközt állíthat be.
- Az ARM-eszközök, például a Raspberry Pis, nem tudják futtatni az SQL Servert. Ha ARM-eszközön szeretné használni az SQL-t, használhatja az Azure SQL Edge-et.
- Egy tárolóregisztrációs adatbázis, például az Azure Container Registry.
- Az Azure IoT Edge és az Azure IoT Hub bővítményekkel konfigurált Visual Studio Code. A Visual Studio Code-bővítményhez készült Azure IoT Edge-eszközökkarbantartási módban használhatók.
- Töltsön le és telepítsen egy Docker-kompatibilis tárolókezelő rendszert a fejlesztőgépre. Konfigurálja Linux-tárolók futtatására.
Ez az oktatóanyag egy Azure Functions-modullal küld adatokat az SQL Servernek. Ha IoT Edge-modult szeretne fejleszteni az Azure Functions használatával, telepítse a következő további előfeltételeket a fejlesztőgépre:
Függvényprojekt létrehozása
Ahhoz, hogy adatokat küldjön egy adatbázisba, szüksége van egy modulra, amely megfelelően strukturálja az adatokat, majd tárolja őket egy táblában.
Új projekt létrehozása
Az alábbi lépések bemutatják, hogyan hozhat létre IoT Edge-függvényt a Visual Studio Code és az Azure IoT Edge bővítmény használatával.
Nyissa meg a Visual Studio Code-ot.
Nyissa meg a Visual Studio Code parancskatalógusát a Parancspaletta megtekintése> gombra kattintva.
A parancskatalógusba írja be és futtassa az Azure IoT Edge: Új IoT Edge-megoldás parancsot. A parancskatalógusban adja meg a következő információkat a megoldás létrehozásához:
szakterület Érték Mappa kiválasztása Válassza ki a fejlesztési gép helyét a Visual Studio Code-hoz a megoldásfájlok létrehozásához. Adjon meg egy megoldásnevet Adjon meg egy leíró nevet a megoldásnak, például az SqlSolutionnak, vagy fogadja el az alapértelmezett értéket. Modulsablon kiválasztása Válassza az Azure Functions – C# lehetőséget. Adja meg a modul nevét Nevezze el az sqlFunction modult. Docker-rendszerképtár megadása a modulhoz A rendszerképtár tartalmazza a tárolóregisztrációs adatbázis nevét és a tárolólemezkép nevét. A tároló lemezképe az utolsó lépéstől előre fel van töltve. Cserélje le a localhost:5000 értéket az Azure-tárolóregisztrációs adatbázis bejelentkezési kiszolgálójának értékére. A bejelentkezési kiszolgáló az Azure Portal tárolóregisztrációs adatbázisának Áttekintés oldaláról kérhető le.
Az utolsó sztring úgy néz ki, mint a <beállításjegyzék neve.azurecr.io/sqlfunction>.A Visual Studio Code ablak betölti az IoT Edge-megoldás munkaterületét.
A beállításjegyzék hitelesítő adatainak hozzáadása
A környezeti fájl tárolja a tárolóregisztrációs adatbázis hitelesítő adatait, és megosztja őket az IoT Edge-futtatókörnyezettel. A futtatókörnyezetnek szüksége van ezekre a hitelesítő adatokra a privát rendszerképek IoT Edge-eszközre való lekéréséhez.
Az IoT Edge-bővítmény megpróbálja lekérni a tárolóregisztrációs adatbázis hitelesítő adatait az Azure-ból, és feltölti őket a környezeti fájlban. Ellenőrizze, hogy a hitelesítő adatok már szerepelnek-e benne. Ha nem, vegye fel őket most:
- A Visual Studio Code Explorerben nyissa meg az .env fájlt.
- Frissítse a mezőket az Azure-tárolóregisztrációs adatbázisból kimásolt felhasználónévvel és jelszóértékekkel .
- Mentse a fájlt.
Megjegyzés:
Ez az oktatóanyag rendszergazdai bejelentkezési hitelesítő adatokat használ az Azure Container Registryhez, amelyek fejlesztési és tesztelési forgatókönyvek esetén kényelmesek. Ha készen áll az éles helyzetekre, javasoljuk a minimális jogosultságú hitelesítési lehetőséget, például a szolgáltatásnevek használatát. További információ: A tárolóregisztrációs adatbázishoz való hozzáférés kezelése.
A célarchitektúra kiválasztása
Ki kell választania az egyes megoldásokkal megcélzott architektúrát, mert a tároló minden architektúratípushoz más-más módon van felépítve és futtatva. Az alapértelmezett a Linux AMD64.
Nyissa meg a parancskatalógust, és keresse meg az Azure IoT Edge: Set Default Target Platform for Edge Solution (Alapértelmezett célplatform beállítása edge-megoldáshoz) parancskatalógust, vagy válassza a parancsikon ikont az ablak alján található oldalsávon.
A parancskatalógusban válassza ki a célarchitektúrát a lehetőségek listájából. Ebben az oktatóanyagban egy Ubuntu virtuális gépet használunk IoT Edge-eszközként, így megtartjuk az alapértelmezett amd64-et.
A modul frissítése egyéni kóddal
A Visual Studio Code Explorerben nyissa meg azsqlFunction>sqlFunction.csprojmodulokat>.
Keresse meg a csomaghivatkozások csoportját, és adjon hozzá egy újat az SqlClient hozzáadásához.
<PackageReference Include="System.Data.SqlClient" Version="4.5.1"/>Mentse az sqlFunction.csproj fájlt.
Nyissa meg a sqlFunction.cs fájlt.
Cserélje le a fájl teljes tartalmát a következő kódra:
using System; using System.Collections.Generic; using System.IO; using System.Text; using System.Threading.Tasks; using Microsoft.Azure.Devices.Client; using Microsoft.Azure.WebJobs; using Microsoft.Azure.WebJobs.Extensions.EdgeHub; using Microsoft.Azure.WebJobs.Host; using Microsoft.Extensions.Logging; using Newtonsoft.Json; using Sql = System.Data.SqlClient; namespace Functions.Samples { public static class sqlFunction { [FunctionName("sqlFunction")] public static async Task FilterMessageAndSendMessage( [EdgeHubTrigger("input1")] Message messageReceived, [EdgeHub(OutputName = "output1")] IAsyncCollector<Message> output, ILogger logger) { const int temperatureThreshold = 20; byte[] messageBytes = messageReceived.GetBytes(); var messageString = System.Text.Encoding.UTF8.GetString(messageBytes); if (!string.IsNullOrEmpty(messageString)) { logger.LogInformation("Info: Received one non-empty message"); // Get the body of the message and deserialize it. var messageBody = JsonConvert.DeserializeObject<MessageBody>(messageString); //Store the data in SQL db const string str = "<sql connection string>"; using (Sql.SqlConnection conn = new Sql.SqlConnection(str)) { conn.Open(); var insertMachineTemperature = "INSERT INTO MeasurementsDB.dbo.TemperatureMeasurements VALUES (CONVERT(DATETIME2,'" + messageBody.timeCreated + "', 127), 'machine', " + messageBody.machine.temperature + ");"; var insertAmbientTemperature = "INSERT INTO MeasurementsDB.dbo.TemperatureMeasurements VALUES (CONVERT(DATETIME2,'" + messageBody.timeCreated + "', 127), 'ambient', " + messageBody.ambient.temperature + ");"; using (Sql.SqlCommand cmd = new Sql.SqlCommand(insertMachineTemperature + "\n" + insertAmbientTemperature, conn)) { //Execute the command and log the # rows affected. var rows = await cmd.ExecuteNonQueryAsync(); logger.LogInformation($"{rows} rows were updated"); } } if (messageBody != null && messageBody.machine.temperature > temperatureThreshold) { // Send the message to the output as the temperature value is greater than the threshold. using (var filteredMessage = new Message(messageBytes)) { // Copy the properties of the original message into the new Message object. foreach (KeyValuePair<string, string> prop in messageReceived.Properties) {filteredMessage.Properties.Add(prop.Key, prop.Value);} // Add a new property to the message to indicate it is an alert. filteredMessage.Properties.Add("MessageType", "Alert"); // Send the message. await output.AddAsync(filteredMessage); logger.LogInformation("Info: Received and transferred a message with temperature above the threshold"); } } } } } //Define the expected schema for the body of incoming messages. class MessageBody { public Machine machine {get; set;} public Ambient ambient {get; set;} public string timeCreated {get; set;} } class Machine { public double temperature {get; set;} public double pressure {get; set;} } class Ambient { public double temperature {get; set;} public int humidity {get; set;} } }A 35. sorban cserélje le az SQL kapcsolati sztringet<> a következő sztringre. Az Adatforrás tulajdonság az SQL Server-tárolóra hivatkozik, amely még nem létezik. A következő szakaszban SQL névvel fogja létrehozni. Válasszon erős jelszót a Jelszó kulcsszóhoz.
Data Source=tcp:sql,1433;Initial Catalog=MeasurementsDB;User Id=SA;Password=<YOUR-STRONG-PASSWORD>;TrustServerCertificate=False;Connection Timeout=30;Mentse a sqlFunction.cs fájlt.
Az SQL Server-tároló hozzáadása
Az üzembe helyezési jegyzék deklarálja, hogy mely modulokat telepíti az IoT Edge-futtatókörnyezet az IoT Edge-eszközön. Az előző szakaszban megadta a testreszabott függvénymodul létrehozásához szükséges kódot, de az SQL Server-modul már létezik és elérhető a Microsoft Artifact Registryben. Csak meg kell mondania az IoT Edge-futtatókörnyezetnek, hogy vegye fel, majd konfigurálja az eszközön.
A Visual Studio Code-ban nyissa meg a parancspalettát aParancspalettamegtekintése> gombra kattintva.
A parancskatalógusba írja be és futtassa az Azure IoT Edge: Add IoT Edge modul parancsot. A parancskatalógusban adja meg a következő információkat egy új modul hozzáadásához:
szakterület Érték Üzembehelyezési sablonfájl kiválasztása A parancskatalógus kiemeli az aktuális megoldásmappában lévő deployment.template.json fájlt. Jelölje ki a fájlt. Modulsablon kiválasztása Válassza a Meglévő modult (írja be a teljes kép URL-címét). Adja meg a modul nevét Adja meg az sql-t. Ez a név megegyezik a sqlFunction.cs fájl kapcsolati sztringjében deklarált tárolónévvel. Docker-rendszerkép megadása a modulhoz Írja be a következő URI-t az SQL Server-tároló lemezképének a Microsoft Artifact Registryből való lekéréséhez. Ubuntu-alapú képekhez használja mcr.microsoft.com/mssql/server:latesta . Red Hat Enterprise Linux (RHEL) alapú rendszerképekhez használja a következőtmcr.microsoft.com/mssql/rhel/server:latest: .Az Azure SQL Edge tárolórendszerkép az SQL Server egy egyszerű, tárolóalapú verziója, amely IoT Edge-eszközökön futtatható. Peremhálózati forgatókönyvekhez van optimalizálva, és ARM- és AMD64-eszközökön is futtatható.
Nyissa meg a deployment.template.json fájlt a megoldásmappában.
Keresse meg a modulok szakaszt. Három modulnak kell megjelennie. A SimulatedTemperatureSensor modul alapértelmezés szerint szerepel az új megoldásokban, és a többi modulhoz használható tesztadatokat biztosít. Az sqlFunction modul az a modul, amelyet eredetileg létrehozott és frissített új kóddal. Végül a modul sql-jének importálása a Microsoft Artifact Registryből történt.
Jótanács
Az SQL Server modulhoz tartozik egy alapértelmezett jelszókészlet az üzembehelyezési jegyzék környezeti változóiban. Amikor egy SQL Server-tárolót éles környezetben hoz létre, módosítania kell az alapértelmezett rendszergazdai jelszót.
Zárja be a deployment.template.json fájlt.
Az IoT Edge-megoldás létrehozása
Az előző szakaszokban létrehozott egy megoldást egy modullal, majd hozzáadott egy másikat az üzembehelyezési jegyzéksablonhoz. Az SQL Server-modult a Microsoft üzemelteti nyilvánosan, de a kódot tárolóba kell helyeznie a Functions modulban. Ebben a szakaszban elkészíti a megoldást, tárolórendszerképeket hoz létre az sqlFunction modulhoz, és leküldi a lemezképet a tárolóregisztrációs adatbázisba.
A Visual Studio Code-ban nyissa meg az integrált terminált a Terminál megtekintése lehetőséget> választva.
Jelentkezzen be a tárolóregisztrációs adatbázisba a Visual Studio Code-ban, hogy a rendszerképeket leküldhesse a beállításjegyzékbe. Használja ugyanazokat az Azure Container Registry-hitelesítő adatokat, amelyeket az .env fájlhoz adott. Adja meg a következő parancsot az integrált terminálban:
docker login -u <ACR username> -p <ACR password> <ACR login server>Megjelenhet egy biztonsági figyelmeztetés, amely a --password-stdin paraméter használatát javasolja. Bár a használata kívül esik a jelen cikk hatókörén, javasoljuk, hogy kövesse ezt az ajánlott eljárást. További információ: docker login command reference.
A Visual Studio Code Explorerben kattintson a jobb gombbal a deployment.template.json fájlra, és válassza az IoT Edge-megoldás összeállítása és leküldése lehetőséget.
A buildelési és leküldéses parancs három műveletet indít el. Először létrehoz egy új mappát a konfiguráció nevű megoldásban, amely tartalmazza a teljes üzembehelyezési jegyzékfájlt, amely az üzembehelyezési sablonban és más megoldásfájlokban található információkból épül fel. Másodszor, a tárolórendszerkép létrehozásához fut
docker builda célarchitektúra megfelelő dockerfile-fájlja alapján. Ezután leküldidocker pusha rendszerkép-adattárat a tárolóregisztrációs adatbázisba.Ez a folyamat első alkalommal több percet is igénybe vehet, de a parancsok legközelebbi futtatása gyorsabb lesz.
Ellenőrizheti, hogy az sqlFunction modul sikeresen le lett-e küldve a tárolóregisztrációs adatbázisba. Az Azure Portalon keresse meg a tárolóregisztrációs adatbázist. Válassza ki az adattárakat , és keressen rá az sqlFunction kifejezésre. A másik két modul, a SimulatedTemperatureSensor és az sql nem lesz leküldve a tárolóregisztrációs adatbázisba, mert az adattáraik már szerepelnek a Microsoft-adatbázisokban.
A megoldás üzembe helyezése egy eszközön
Az IoT Hubon keresztül állíthat be modulokat egy eszközön, de az IoT Hubot és az eszközöket a Visual Studio Code-on keresztül is elérheti. Ebben a szakaszban be kell állítania az IoT Hubhoz való hozzáférést, majd a Visual Studio Code használatával üzembe helyezheti a megoldást az IoT Edge-eszközön.
A Visual Studio Code Explorer Azure IoT Hub szakaszában bontsa ki az Eszközök elemet az IoT-eszközök listájának megtekintéséhez.
Kattintson a jobb gombbal arra az eszközre, amelyet az üzembe helyezéssel meg szeretne célozni, és válassza az Üzembe helyezés létrehozása önálló eszközhöz lehetőséget.
Válassza ki a deployment.amd64.json fájlt a konfigurációs mappában, majd kattintson az Edge-alapú üzembehelyezési jegyzék kiválasztása elemre. Ne használja a deployment.template.json fájlt.
Az eszköz alatt bontsa ki a Modulok elemet az üzembe helyezett és a futó modulok listájának megtekintéséhez. Kattintson a frissítés gombra. A SimulatedTemperatureSensor modullal, valamint a $edgeAgent és $edgeHub együtt futó új SQL- és sqlFunction-modulokat kell látnia.
Azt is ellenőrizheti, hogy az összes modul működik-e az eszközön. Az IoT Edge-eszközön futtassa az alábbi parancsot a modulok állapotának megtekintéséhez.
iotedge listA modulok elindítása eltarthat néhány percig. Az IoT Edge-futtatókörnyezetnek meg kell kapnia az új üzembehelyezési jegyzékfájlt, le kell húznia a modul lemezképeit a tároló futtatókörnyezetéből, majd el kell indítania minden új modult.
Az SQL-adatbázis létrehozása
Amikor alkalmazza az üzembehelyezési jegyzékfájlt az eszközre, három modul fog futni. A SimulatedTemperatureSensor modul szimulált környezeti adatokat hoz létre. Az sqlFunction modul egy adatbázis adatait veszi át és formázja. Ez a szakasz végigvezeti az SQL-adatbázis beállításán a hőmérsékleti adatok tárolásához.
Futtassa az alábbi parancsokat az IoT Edge-eszközön. Ezek a parancsok csatlakoznak az eszközön futó SQL-modulhoz , és létrehoznak egy adatbázist és egy táblát a neki küldött hőmérsékleti adatok tárolásához. Cserélje le <a YOUR-STRONG-PASSWORD> elemet a kapcsolati sztringben kiválasztott erős jelszóra.
Az IoT Edge-eszköz parancssori eszközén csatlakozzon az adatbázishoz.
sudo docker exec -it sql bashNyissa meg az SQL-parancseszközt.
/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P '<YOUR-STRONG-PASSWORD>'Az adatbázis létrehozása:
CREATE DATABASE MeasurementsDB ON (NAME = MeasurementsDB, FILENAME = '/var/opt/mssql/measurementsdb.mdf') GOAdja meg a táblát.
CREATE TABLE MeasurementsDB.dbo.TemperatureMeasurements (measurementTime DATETIME2, location NVARCHAR(50), temperature FLOAT) GO
Testre szabhatja az SQL Server docker-fájlját, hogy automatikusan beállítsa az SQL Server több IoT Edge-eszközön való üzembe helyezését. További információ: Microsoft SQL Server tárolóbemutató projekt.
A helyi adatok megtekintése
A tábla létrehozása után az sqlFunction modul megkezdi az adatok tárolását egy helyi SQL Server 2017-adatbázisban az IoT Edge-eszközön.
Az SQL-parancs eszközén belül futtassa a következő parancsot a formázott táblaadatok megtekintéséhez:
SELECT * FROM MeasurementsDB.dbo.TemperatureMeasurements
GO
Erőforrások tisztítása
Ha folytatni szeretné a következő ajánlott cikket, megtarthatja a létrehozott erőforrásokat és konfigurációkat, és újra felhasználhatja őket. Azt is megteheti, hogy ugyanazt az IoT Edge-eszközt használja, mint egy teszteszközt.
Ellenkező esetben törölheti a cikkben létrehozott helyi konfigurációkat és Azure-erőforrásokat a díjak elkerülése érdekében.
Azure-erőforrások törlése
Az Azure-erőforrások és erőforráscsoportok törlése visszafordíthatatlan. Ügyeljen arra, hogy véletlenül se törölje a rossz erőforráscsoportot vagy erőforrásokat. Ha egy meglévő erőforráscsoporton belül hozta létre az IoT Hubot, amelynek erőforrásait meg szeretné tartani, csak magát az IoT Hub-erőforrást törölje, nem pedig az erőforráscsoportot.
Az erőforrások törlése:
Jelentkezzen be az Azure Portalra, majd válassza ki az Erőforráscsoportokat.
Válassza ki az IoT Edge-teszterőforrásokat tartalmazó erőforráscsoport nevét.
Tekintse át az erőforráscsoportban található erőforrások listáját. Ha az összeset törölni szeretné, válassza az Erőforráscsoport törlése lehetőséget. Ha csak néhányat szeretne törölni, az egyes erőforrásokra kattintva egyenként törölheti őket.
Ebben az oktatóanyagban létrehozott egy Azure Functions-modult, amely kódot tartalmaz az IoT Edge-eszköz által létrehozott nyers adatok szűréséhez. Ha készen áll saját modulok létrehozására, többet is megtudhat arról, hogyan fejleszthet Azure IoT Edge-modulokat a Visual Studio Code használatával.
Következő lépések
Ha egy másik tárolási módszert szeretne kipróbálni a peremhálózaton, olvassa el, hogyan használhatja az Azure Blob Storage-t az IoT Edge-en.