Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro:
IoT Edge 1.4
Důležité
Podporované verze ioT Edge 1.5 LTS a IoT Edge 1.4. Pokud používáte starší verzi, přečtěte si téma Aktualizace IoT Edge.
Nasaďte modul SQL Serveru pro ukládání dat na zařízení s Azure IoT Edge s kontejnery Linuxu.
K ukládání a dotazování dat na hraničních zařízeních použijte Azure IoT Edge a SQL Server. Azure IoT Edge má základní možnosti úložiště pro ukládání zpráv do mezipaměti, pokud zařízení přejde do offline režimu, a pak je při opětovném publikování připojení přeposílejte. Můžete ale chtít pokročilejší možnosti úložiště, jako je možnost dotazování na data místně. Vaše zařízení IoT Edge můžou používat místní databáze k provádění složitějších výpočtů bez nutnosti udržovat připojení ke službě IoT Hub.
Tento článek obsahuje pokyny k nasazení databáze SQL Serveru do zařízení IoT Edge. Azure Functions, spuštěné na zařízení IoT Edge, strukturuje příchozí data a pak je odešle do databáze. Postup v tomto článku lze použít také u jiných databází, které pracují v kontejnerech, jako je MySQL nebo PostgreSQL.
V tomto kurzu se naučíte:
- Vytvoření funkce Azure Functions pomocí editoru Visual Studio Code
- Nasazení databáze SQL do zařízení IoT Edge
- Použití editoru Visual Studio Code k sestavení modulů a jejich nasazení do zařízení IoT Edge
- Zobrazení vygenerovaných dat
Pokud nemáte účet Azure, vytvořte si bezplatný účet před tím, než začnete.
Požadavky
Než začnete s tímto kurzem, měli byste si projít předchozí kurz a nastavit vývojové prostředí pro vývoj kontejnerů s Linuxem: Vývoj modulů Azure IoT Edge pomocí editoru Visual Studio Code. Dokončením tohoto kurzu byste měli mít splněné následující požadavky:
- IoT Hub úrovně Free nebo Standard v Azure.
- Zařízení AMD64 s Azure IoT Edge s kontejnery Linuxu. Pomocí rychlých startů můžete nastavit zařízení s Linuxem nebo zařízení s Windows.
- Zařízení ARM, jako je Raspberry Pis, nemůžou spouštět SQL Server. Pokud chcete použít SQL na zařízení ARM, můžete použít Azure SQL Edge.
- Registr kontejneru, jako je Azure Container Registry.
- Visual Studio Code nakonfigurované s rozšířeními Azure IoT Edge a Azure IoT Hubu Nástroje Azure IoT Edge pro rozšíření Visual Studio Code jsou v režimu údržby.
- Stáhněte a nainstalujte do vývojového počítače systém pro správu kontejnerů kompatibilní s Dockerem . Nakonfigurujte ho pro spouštění kontejnerů Linuxu.
Tento kurz používá modul Azure Functions k odesílání dat do SQL Serveru. Pokud chcete vyvíjet modul IoT Edge pomocí Azure Functions, nainstalujte na svůj vývojový počítač následující další požadavky:
Vytvoření projektu funkce
Pokud chcete odesílat data do databáze, potřebujete modul, který dokáže správně strukturovat data a pak je uložit do tabulky.
Vytvoření nového projektu
Následující kroky ukazují, jak vytvořit funkci IoT Edge pomocí editoru Visual Studio Code a rozšíření Azure IoT Edge.
Otevřete Visual Studio Code.
Výběrempalety příkazůZobrazit> příkaz otevřete paletu příkazů editoru Visual Studio Code.
Na paletě příkazů zadejte a spusťte příkaz Azure IoT Edge: Nové řešení IoT Edge. Na paletě příkazů zadejte následující informace pro vytvoření řešení:
Field Hodnota Vybrat složku Zvolte umístění na vývojovém počítači pro Visual Studio Code a vytvořte soubory řešení. Zadejte název řešení. Zadejte popisný název vašeho řešení, například SqlSolution, nebo přijměte výchozí hodnotu. Výběr šablony modulu Zvolte Azure Functions – C#. Zadejte název modulu. Pojmenujte modul sqlFunction. Poskytnutí úložiště imagí Dockeru pro modul Úložiště imagí obsahuje název vašeho registru kontejneru a název image kontejneru. Vaše image kontejneru je předem vyplněná z posledního kroku. Nahraďte localhost:5000 hodnotou přihlašovacího serveru z registru kontejneru Azure. Přihlašovací server můžete načíst ze stránky Přehled registru kontejneru na webu Azure Portal.
Konečný řetězec vypadá jako <název> registru.azurecr.io/sqlfunction.Okno Editoru Visual Studio Code načte pracovní prostor řešení IoT Edge.
Přidání přihlašovacích údajů registru
Soubor prostředí ukládá přihlašovací údaje pro váš registr kontejneru a sdílí je s modulem runtime IoT Edge. Modul runtime tyto přihlašovací údaje potřebuje k načtení privátních imagí do zařízení IoT Edge.
Rozšíření IoT Edge se pokusí načíst přihlašovací údaje registru kontejneru z Azure a naplní je v souboru prostředí. Zkontrolujte, jestli už jsou vaše přihlašovací údaje zahrnuté. Pokud ne, přidejte je teď:
- V průzkumníku editoru Visual Studio Code otevřete soubor .env.
- Aktualizujte pole hodnotami uživatelského jména a hesla , které jste zkopírovali z registru kontejneru Azure.
- Uložte tento soubor.
Poznámka:
Tento kurz používá přihlašovací údaje správce pro Službu Azure Container Registry, které jsou vhodné pro scénáře vývoje a testování. Až budete připraveni na produkční scénáře, doporučujeme použít možnost ověřování s nejnižšími oprávněními, jako jsou instanční objekty. Další informace najdete v tématu Správa přístupu k registru kontejneru.
Výběr cílové architektury
Potřebujete vybrat, na kterou architekturu cílíte u každého řešení, protože kontejner je sestavený a spouštěný odlišně pro každý typ architektury. Výchozí hodnota je Linux AMD64.
Otevřete paletu příkazů a vyhledejte Azure IoT Edge: Nastavte výchozí cílovou platformu pro řešení Edge nebo vyberte ikonu zástupce na bočním panelu v dolní části okna.
Na paletě příkazů vyberte cílovou architekturu ze seznamu možností. Pro účely tohoto kurzu používáme jako zařízení IoT Edge virtuální počítač s Ubuntu, takže ponecháme výchozí amd64.
Aktualizace modulu vlastním kódem
V průzkumníku editoru Visual Studio Code otevřete moduly>sqlFunction sqlFunction.csproj>.
Vyhledejte skupinu odkazů na balíčky a přidejte novou, která bude obsahovat SqlClient.
<PackageReference Include="System.Data.SqlClient" Version="4.5.1"/>Uložte soubor sqlFunction.csproj .
Otevřete soubor sqlFunction.cs .
Celý obsah souboru nahraďte následujícím kódem:
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;} } }Na řádku 35 nahraďte připojovací< řetězec> SQL následujícím řetězcem. Vlastnost Zdroj dat odkazuje na kontejner SQL Serveru, který ještě neexistuje. V další části ho vytvoříte s názvem SQL . Zvolte silné heslo pro klíčové slovo Heslo .
Data Source=tcp:sql,1433;Initial Catalog=MeasurementsDB;User Id=SA;Password=<YOUR-STRONG-PASSWORD>;TrustServerCertificate=False;Connection Timeout=30;Uložte soubor sqlFunction.cs .
Přidání kontejneru SQL Serveru
Manifest nasazení deklaruje, které moduly modulu runtime IoT Edge se nainstalují na vaše zařízení IoT Edge. Zadali jste kód pro vytvoření přizpůsobeného modulu funkce v předchozí části, ale modul SQL Serveru je již vytvořený a dostupný v registru Microsoft Artifact Registry. Stačí říct modulu runtime IoT Edge, aby ho zahrnul, a pak ho nakonfigurovat na vašem zařízení.
V editoru Visual Studio Code otevřete paletu příkazů výběrempalety Příkazůzobrazení>.
Na paletě příkazů zadejte a spusťte příkaz Azure IoT Edge: Přidání modulu IoT Edge. Na paletě příkazů zadejte následující informace pro přidání nového modulu:
Field Hodnota Výběr souboru šablony nasazení Paleta příkazů zvýrazní soubordeployment.template.json ve vaší aktuální složce řešení. Vyberte tento soubor. Výběr šablony modulu Vyberte existující modul (zadejte adresu URL úplného obrázku). Zadejte název modulu. Zadejte sql. Tento název odpovídá názvu kontejneru deklarovanému v připojovacím řetězci v souboru sqlFunction.cs. Poskytnutí image Dockeru pro modul Zadáním následujícího identifikátoru URI načtete image kontejneru SQL Serveru z registru microsoft Artifact Registry. Pro image založené na Ubuntu použijte mcr.microsoft.com/mssql/server:latest. Pro image založené na RHEL (Red Hat Enterprise Linux) použijtemcr.microsoft.com/mssql/rhel/server:latest.Image kontejneru Azure SQL Edge je jednoduchá a kontejnerizovaná verze SQL Serveru, která se dá spustit na zařízeních IoT Edge. Je optimalizovaná pro hraniční scénáře a může běžet na zařízeních ARM a AMD64.
Ve složce řešení otevřete soubor deployment.template.json .
Najděte část moduly . Měli byste vidět tři moduly. Modul SimulatedTemperatureSensor je ve výchozím nastavení součástí nových řešení a poskytuje testovací data pro použití s ostatními moduly. Modul sqlFunction je modul, který jste původně vytvořili a aktualizovali novým kódem. Nakonec se modul SQL naimportoval z registru Microsoft Artifact Registry.
Návod
Modul SQL Serveru obsahuje výchozí heslo nastavené v proměnných prostředí manifestu nasazení. Kdykoli vytvoříte kontejner SQL Serveru v produkčním prostředí, měli byste změnit výchozí heslo správce systému.
Zavřete soubor deployment.template.json .
Sestavení řešení IoT Edge
V předchozích částech jste vytvořili řešení s jedním modulem a pak jste do šablony manifestu nasazení přidali další. Modul SQL Serveru je hostovaný veřejně Microsoftem, ale potřebujete kontejnerizovat kód v modulu Functions. V této části sestavíte řešení, vytvoříte image kontejneru pro modul sqlFunction a nasdílíte image do registru kontejneru.
V editoru Visual Studio Code otevřete integrovaný terminál výběrem možnosti Zobrazit>terminál.
Přihlaste se ke svému registru kontejneru v editoru Visual Studio Code, abyste mohli odeslat image do registru. Použijte stejné přihlašovací údaje služby Azure Container Registry (ACR), které jste přidali do souboru .env. V integrovaném terminálu zadejte následující příkaz:
docker login -u <ACR username> -p <ACR password> <ACR login server>Může se zobrazit upozornění zabezpečení, které doporučuje použití parametru --password-stdin. I když je jeho použití mimo rozsah tohoto článku, doporučujeme postupovat podle tohoto osvědčeného postupu. Další informace najdete v referenčních informacích k příkazu docker login .
V průzkumníku editoru Visual Studio Code klikněte pravým tlačítkem na soubor deployment.template.json a vyberte Sestavit a odeslat řešení IoT Edge.
Příkaz sestavení a nabízení spustí tři operace. Nejprve vytvoří v řešení novou složku s názvem config , která obsahuje úplný manifest nasazení, který je sestavený z informací v šabloně nasazení a dalších souborech řešení. Za druhé se spustí
docker buildsestavení image kontejneru na základě příslušného souboru Dockerfile pro vaši cílovou architekturu. Potom se spustídocker pushpro nasdílení úložiště imagí do registru kontejneru.Tento proces může trvat několik minut poprvé, ale při příštím spuštění příkazů je rychlejší.
Můžete ověřit, že se modul sqlFunction úspěšně odeslal do registru kontejneru. Na webu Azure Portal přejděte do svého registru kontejneru. Vyberte úložiště a vyhledejte sqlFunction. Další dva moduly SimulatedTemperatureSensor a SQL se do registru kontejneru nenasdílí, protože jejich úložiště už jsou v registrech Microsoftu.
Nasazení řešení do zařízení
Moduly můžete nastavit na zařízení prostřednictvím IoT Hubu, ale můžete k němu přistupovat také prostřednictvím editoru Visual Studio Code. V této části nastavíte přístup ke službě IoT Hub a pak pomocí editoru Visual Studio Code nasadíte řešení do zařízení IoT Edge.
V Průzkumníku editoru Visual Studio Code v části Azure IoT Hub rozbalte zařízení , abyste viděli seznam zařízení IoT.
Klikněte pravým tlačítkem myši na zařízení, na které chcete cílit s nasazením, a vyberte Vytvořit nasazení pro jedno zařízení.
Vyberte soubor deployment.amd64.json ve složce konfigurace a potom klikněte na vybrat manifest nasazení Edge. Nepoužívejte soubor deployment.template.json.
V zařízení rozbalte moduly a zobrazte seznam nasazených a spuštěných modulů. Klikněte na tlačítko Aktualizovat. Měli byste vidět nové moduly SQL a sqlFunction spuštěné společně s modulem SimulatedTemperatureSensor a $edgeAgent a $edgeHub.
Můžete také zkontrolovat, jestli jsou všechny moduly na vašem zařízení spuštěné a spuštěné. Spuštěním následujícího příkazu na zařízení IoT Edge zobrazte stav modulů.
iotedge listSpuštění modulů může trvat několik minut. Modul runtime IoT Edge potřebuje získat nový manifest nasazení, stáhnout image modulů z modulu runtime kontejneru a pak spustit každý nový modul.
Vytvoření databáze SQL
Když na zařízení použijete manifest nasazení, spustí se tři moduly. Modul SimulatedTemperatureSensor generuje simulovaná data prostředí. Modul sqlFunction přebírá data a formátuje je pro databázi. Tato část vás provede nastavením databáze SQL pro ukládání dat o teplotě.
Na zařízení IoT Edge spusťte následující příkazy. Tyto příkazy se připojují k modulu SQL spuštěného na vašem zařízení a vytvoří databázi a tabulku pro uložení dat o teplotě, která se do něj odesílají. Nahraďte <VAŠE-STRONG-PASSWORD> silným heslem, které jste zvolili v připojovacím řetězci.
V nástroji příkazového řádku na zařízení IoT Edge se připojte k databázi.
sudo docker exec -it sql bashOtevřete příkazový nástroj SQL.
/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P '<YOUR-STRONG-PASSWORD>'Vytvořte databázi:
CREATE DATABASE MeasurementsDB ON (NAME = MeasurementsDB, FILENAME = '/var/opt/mssql/measurementsdb.mdf') GODefinujte tabulku.
CREATE TABLE MeasurementsDB.dbo.TemperatureMeasurements (measurementTime DATETIME2, location NVARCHAR(50), temperature FLOAT) GO
Soubor Dockeru SQL Serveru můžete přizpůsobit tak, aby se sql Server automaticky nastavil tak, aby se nasadil na několik zařízení IoT Edge. Další informace najdete v ukázkovém projektu kontejneru Microsoft SQL Serveru.
Zobrazení místních dat
Po vytvoření tabulky začne modul sqlFunction ukládat data do místní databáze SQL Serveru 2017 na zařízení IoT Edge.
Spuštěním následujícího příkazu z příkazového nástroje SQL zobrazte formátovaná data tabulky:
SELECT * FROM MeasurementsDB.dbo.TemperatureMeasurements
GO
Vyčistěte zdroje
Pokud máte v plánu pokračovat k dalšímu doporučenému článku, můžete zachovat prostředky a konfigurace, které jste vytvořili, a znovu je použít. Můžete také dál používat stejné zařízení IoT Edge jako testovací zařízení.
Jinak můžete odstranit místní konfigurace a prostředky Azure, které jste vytvořili v tomto článku, abyste se vyhnuli poplatkům.
Odstranění prostředků Azure
Odstranění prostředků a skupin prostředků Azure je nevratné. Ujistěte se, že omylem nesmažete špatnou skupinu prostředků nebo jednotlivé prostředky. Pokud jste centrum IoT vytvořili ve stávající skupině prostředků, která obsahuje prostředky, které chcete zachovat, odstraňte pouze samotný prostředek ioT Hubu, nikoli skupinu prostředků.
Odstranění prostředků:
Přihlaste se k webu Azure Portal a vyberte skupiny prostředků.
Vyberte název skupiny prostředků, která obsahuje testovací prostředky IoT Edge.
Zkontrolujte seznam prostředků obsažených ve vaší skupině prostředků. Pokud chcete odstranit všechny, můžete vybrat Odstranit skupinu prostředků. Pokud chcete odstranit jenom některé z nich, můžete kliknout na jednotlivé prostředky a odstranit je jednotlivě.
V tomto kurzu jste vytvořili modul Azure Functions, který obsahuje kód pro filtrování nezpracovaných dat generovaných zařízením IoT Edge. Až budete připraveni vytvářet vlastní moduly, můžete se dozvědět více o tom, jak vyvíjet moduly Azure IoT Edge pomocí editoru Visual Studio Code.
Další kroky
Pokud chcete vyzkoušet jinou metodu úložiště na hraničních zařízeních, přečtěte si, jak používat Azure Blob Storage ve službě IoT Edge.