Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Wichtig
Azure Stack Edge Pro FPGA-Geräte haben im Februar 2024 das Ende der Lebensdauer erreicht.
In diesem Artikel erfahren Sie, wie Sie ein IoT Edge-Modul für die Bereitstellung mit Ihrem Azure Stack Edge Pro FPGA-Gerät erstellen. Azure Stack Edge Pro FPGA ist eine Speicherlösung, mit der Sie Daten verarbeiten und über das Netzwerk an Azure senden können.
Sie können Azure IoT Edge-Module mit Ihrem Azure Stack Edge Pro FPGA verwenden, um die Daten während des Transfers zu Azure zu transformieren. Das in diesem Artikel verwendete Modul implementiert die Logik zum Kopieren einer Datei aus einer lokalen Freigabe in eine Cloudfreigabe auf Ihrem Azure Stack Edge Pro FPGA-Gerät.
In diesem Artikel erfahren Sie, wie Sie:
- Erstellen Sie eine Containerregistrierung zum Speichern und Verwalten Ihrer Module (Docker-Images).
- Erstellen Sie ein IoT Edge-Modul für die Bereitstellung auf Ihrem Azure Stack Edge Pro FPGA-Gerät.
Informationen zum IoT Edge-Modul
Ihr Azure Stack Edge Pro FPGA-Gerät kann IoT Edge-Module bereitstellen und ausführen. Edgemodule sind im Wesentlichen Docker-Container, die eine bestimmte Aufgabe ausführen, z. B. das Aufnehmen einer Nachricht von einem Gerät, das Transformieren einer Nachricht oder das Senden einer Nachricht an einen IoT Hub. In diesem Artikel erstellen Sie ein Modul, das Dateien aus einer lokalen Freigabe in eine Cloudfreigabe auf Ihrem Azure Stack Edge Pro FPGA-Gerät kopiert.
- Dateien werden in die lokale Freigabe auf Ihrem Azure Stack Edge Pro FPGA-Gerät geschrieben.
- Der Ereignisgenerator erstellt ein Dateiereignis für jede Datei, die in die lokale Freigabe geschrieben wird. Die Dateiereignisse werden auch generiert, wenn eine Datei verändert wird. Die Dateiereignisse werden dann an den IoT Edge Hub (in der IoT Edge-Laufzeitumgebung) gesendet.
- Das benutzerdefinierte IoT Edge-Modul verarbeitet das Dateiereignis, um ein Dateiereignisobjekt zu erstellen, das auch einen relativen Pfad für die Datei enthält. Das Modul generiert einen absoluten Pfad mithilfe des relativen Dateipfads und kopiert die Datei aus der lokalen Freigabe in die Cloudfreigabe. Das Modul löscht dann die Datei aus der lokalen Freigabe.
Sobald sich die Datei in der Cloudfreigabe befindet, wird sie automatisch in Ihr Azure Storage-Konto hochgeladen.
Voraussetzungen
Bevor Sie beginnen, stellen Sie sicher, dass Sie folgendes haben:
Ein laufendes Azure Stack Edge Pro FPGA-Gerät.
- Das Gerät verfügt auch über eine zugeordnete IoT Hub-Ressource.
- Das Gerät ist mit der Edge-Computing-Rolle konfiguriert. Weitere Informationen finden Sie, indem Sie zu Compute konfigurieren für Ihr Azure Stack Edge Pro FPGA gehen.
Die folgenden Entwicklungsressourcen:
- Visual Studio Code.
- Erweiterung C# für Visual Studio Code (unterstützt durch OmniSharp).
- Azure IoT Edge-Erweiterung für Visual Studio Code.
- .NET Core 2.1 SDK.
- Docker CE. Möglicherweise müssen Sie ein Konto erstellen, um die Software herunterzuladen und zu installieren.
Erstellen einer Containerregistrierung
Eine Azure-Containerregistrierung ist eine private Docker-Registrierung in Azure, in der Sie Ihre privaten Docker-Containerimages speichern und verwalten können. Die beiden beliebten Docker-Registrierungsdienste, die in der Cloud verfügbar sind, sind Azure Container Registry und Docker Hub. In diesem Artikel wird die Containerregistrierung verwendet.
Melden Sie sich von einem Browser aus beim Azure-Portalan.
Wählen Sie Erstellen einer Ressource > Container > Containerregistrierungaus. Klicken Sie auf Erstellen.
Versorgen:
Ein eindeutiger Registrierungsname in Azure, der 5 bis 50 alphanumerische Zeichen enthält.
Wählen Sie ein Abonnement aus.
Erstellen Sie eine neue oder wählen Sie eine vorhandene Ressourcengruppeaus.
Wählen Sie einen Standort aus. Es wird empfohlen, dass dieser Speicherort mit der Azure Stack Edge-Ressource identisch ist.
Schalten Sie den Benutzer Administrator auf aktivieren.
Legen Sie die SKU auf Basic-fest.
Wählen Sie Erstellenaus.
Nachdem Ihre Containerregistrierung erstellt wurde, navigieren Sie zu ihr und wählen Sie Zugriffsschlüsselaus.
Kopieren Sie die Werte für Anmeldeserver, Benutzernameund Kennwort. Sie verwenden diese Werte später, um das Docker-Image in Ihrer Registrierung zu veröffentlichen und die Registrierungsanmeldeinformationen zur Azure IoT Edge-Laufzeit hinzuzufügen.
Erstellen eines IoT Edge-Modulprojekts
Die folgenden Schritte erstellen ein IoT Edge-Modulprojekt basierend auf dem .NET Core 2.1 SDK. Das Projekt verwendet Visual Studio Code und die Azure IoT Edge-Erweiterung.
Erstellen einer neuen Lösung
Erstellen Sie eine C#-Lösungsvorlage, die Sie mit Ihrem eigenen Code anpassen können.
Wählen Sie in Visual Studio Code Ansicht > Befehlspalette aus, um die VS Code-Befehlspalette zu öffnen.
Geben Sie in der Befehlspalette den Befehl Azure ein, und führen Sie ihn aus: Melden Sie sich an, und folgen Sie den Anweisungen, um sich bei Ihrem Azure-Konto anzumelden. Wenn Sie bereits angemeldet sind, können Sie diesen Schritt überspringen.
Geben Sie in der Befehlspalette den Befehl Azure IoT Edge: Neue IoT Edge-Lösungein, und führen Sie ihn aus. Geben Sie in der Befehlspalette die folgenden Informationen zum Erstellen Ihrer Lösung an:
Wählen Sie den Ordner aus, in dem Sie die Lösung erstellen möchten.
Geben Sie einen Namen für Ihre Lösung an, oder akzeptieren Sie die Standard-EdgeSolution-.
Wählen Sie C#-Modul als Modulvorlage aus.
Ersetzen Sie den Standardmodulnamen durch den Namen, den Sie zuweisen möchten, in diesem Fall ist es FileCopyModule.
Geben Sie die Containerregistrierung an, die Sie im vorherigen Abschnitt als Image-Repository für Ihr erstes Modul erstellt haben. Ersetzen Sie localhost:50000 durch den von Ihnen kopierten Anmeldeserverwert.
Die letzte Zeichenfolge sieht wie
<Login server name>/<Module name>aus. In diesem Beispiel lautet die Zeichenfolge:mycontreg2.azurecr.io/filecopymodule.
Wechseln Sie zu Datei > Öffnen Sie den Ordner.
Navigieren Sie zu dem EdgeSolution Ordner, den Sie zuvor erstellt haben, und zeigen Sie auf ihn. Das VS Code-Fenster lädt Ihren IoT Edge-Lösungsarbeitsbereich mit seinen fünf obersten Komponenten. Sie werden den Ordner .vscode, die Datei .gitignore, die Datei .env und die deployment.template.json in diesem Artikel nicht bearbeiten.
Die einzige Komponente, die Sie ändern, ist der Ordner "Module". Dieser Ordner enthält den C#-Code für Ihr Modul und Docker-Dateien, um Ihr Modul als Containerimage zu erstellen.
Aktualisieren des Moduls mit benutzerdefiniertem Code
Öffnen Sie im VS Code-Explorer Module > FileCopyModule > Program.cs.
Fügen Sie oben im FileCopyModule-Namespacedie folgenden Using-Anweisungen für Typen hinzu, die später verwendet werden. Microsoft.Azure.Devices.Client.Transport.Mqtt ist ein Protokoll zum Senden von Nachrichten an ioT Edge Hub.
namespace FileCopyModule { using Microsoft.Azure.Devices.Client.Transport.Mqtt; using Newtonsoft.Json;Fügen Sie der Program-Klasse die InputFolderPath- und OutputFolderPath- variable hinzu.
class Program { static int counter; private const string InputFolderPath = "/home/input"; private const string OutputFolderPath = "/home/output";Fügen Sie unmittelbar nach dem vorherigen Schritt die FileEvent Klasse hinzu, um den Nachrichtentext zu definieren.
/// <summary> /// The FileEvent class defines the body of incoming messages. /// </summary> private class FileEvent { public string ChangeType { get; set; } public string ShareRelativeFilePath { get; set; } public string ShareName { get; set; } }In der Init-Methodeerstellt und konfiguriert der Code ein ModuleClient--Objekt. Dieses Objekt ermöglicht es dem Modul, eine Verbindung mit der lokalen Azure IoT Edge-Laufzeit mithilfe des MQTT-Protokolls zum Senden und Empfangen von Nachrichten herzustellen. Die Verbindungszeichenfolge, die in der Init-Methode verwendet wird, wird vom IoT Edge-Laufzeitmodul für das Modul bereitgestellt. Der Code registriert einen FileCopy-Rückruf, um Nachrichten von einem IoT Edge-Hub über den Input1 Endpunkt zu empfangen. Ersetzen Sie die Init-Methode durch den folgenden Code.
/// <summary> /// Initializes the ModuleClient and sets up the callback to receive /// messages containing file event information /// </summary> static async Task Init() { MqttTransportSettings mqttSetting = new MqttTransportSettings(TransportType.Mqtt_Tcp_Only); ITransportSettings[] settings = { mqttSetting }; // Open a connection to the IoT Edge runtime ModuleClient ioTHubModuleClient = await ModuleClient.CreateFromEnvironmentAsync(settings); await ioTHubModuleClient.OpenAsync(); Console.WriteLine("IoT Hub module client initialized."); // Register callback to be called when a message is received by the module await ioTHubModuleClient.SetInputMessageHandlerAsync("input1", FileCopy, ioTHubModuleClient); }Entfernen Sie den Code für PipeMessage-Methode und fügen Sie den Code für FileCopy-ein.
/// <summary> /// This method is called whenever the module is sent a message from the IoT Edge Hub. /// This method deserializes the file event, extracts the corresponding relative file path, and creates the absolute input file path using the relative file path and the InputFolderPath. /// This method also forms the absolute output file path using the relative file path and the OutputFolderPath. It then copies the input file to output file and deletes the input file after the copy is complete. /// </summary> static async Task<MessageResponse> FileCopy(Message message, object userContext) { int counterValue = Interlocked.Increment(ref counter); try { byte[] messageBytes = message.GetBytes(); string messageString = Encoding.UTF8.GetString(messageBytes); Console.WriteLine($"Received message: {counterValue}, Body: [{messageString}]"); if (!string.IsNullOrEmpty(messageString)) { var fileEvent = JsonConvert.DeserializeObject<FileEvent>(messageString); string relativeFileName = fileEvent.ShareRelativeFilePath.Replace("\\", "/"); string inputFilePath = InputFolderPath + relativeFileName; string outputFilePath = OutputFolderPath + relativeFileName; if (File.Exists(inputFilePath)) { Console.WriteLine($"Moving input file: {inputFilePath} to output file: {outputFilePath}"); var outputDir = Path.GetDirectoryName(outputFilePath); if (!Directory.Exists(outputDir)) { Directory.CreateDirectory(outputDir); } File.Copy(inputFilePath, outputFilePath, true); Console.WriteLine($"Copied input file: {inputFilePath} to output file: {outputFilePath}"); File.Delete(inputFilePath); Console.WriteLine($"Deleted input file: {inputFilePath}"); } else { Console.WriteLine($"Skipping this event as input file doesn't exist: {inputFilePath}"); } } } catch (Exception ex) { Console.WriteLine("Caught exception: {0}", ex.Message); Console.WriteLine(ex.StackTrace); } Console.WriteLine($"Processed event."); return MessageResponse.Completed; }Speichern Sie diese Datei.
Auch können Sie ein vorhandenes Codebeispiel für dieses Projekt herunterladen. Anschließend können Sie die Datei, die Sie gespeichert haben, mit der Datei program.cs in diesem Beispiel überprüfen.
Erstellen Ihrer IoT Edge-Lösung
Im vorherigen Abschnitt haben Sie eine IoT Edge-Lösung erstellt und dem FileCopyModule Code hinzugefügt, um Dateien aus der lokalen Freigabe in die Cloudfreigabe zu kopieren. Jetzt müssen Sie die Lösung als Containerimage erstellen und an Ihre Containerregistrierung übertragen.
Wechseln Sie in VSCode zu Terminal > Neuen Terminal, um ein neues integriertes Visual Studio Code-Terminal zu öffnen.
Melden Sie sich bei Docker an, indem Sie den folgenden Befehl im integrierten Terminal eingeben.
docker login <ACR login server> -u <ACR username>Verwenden Sie den Anmeldeserver und den Benutzernamen, den Sie aus Der Containerregistrierung kopiert haben.
Wenn Sie zur Eingabe des Kennworts aufgefordert werden, geben Sie das Kennwort an. Sie können auch die Werte für Anmeldeserver, Benutzername und Kennwort aus dem Zugriffsschlüssel in Ihrer Containerregistrierung im Azure-Portal abrufen.
Nachdem die Anmeldeinformationen angegeben wurden, können Sie Ihr Modulimage an Ihre Azure-Containerregistrierung übertragen. Klicken Sie im VS Code Explorer mit der rechten Maustaste auf die module.json Datei, und wählen Sie Build and Push IoT Edge solutionaus.
Wenn Sie Visual Studio Code anweisen, Ihre Lösung zu erstellen, werden zwei Befehle im integrierten Terminal ausgeführt: Docker-Build und Docker-Push. Diese beiden Befehle erstellen Ihren Code, containerisieren die CSharpModule.dllund übertragen dann den Code an die Containerregistrierung, die Sie beim Initialisieren der Lösung angegeben haben.
Sie werden aufgefordert, die Modulplattform auszuwählen. Wählen Sie amd64 entsprechend Linux aus.
Wichtig
Nur die Linux-Module werden unterstützt.
Möglicherweise wird die folgende Warnung angezeigt, die Sie ignorieren können:
Program.cs(77,44): Warnung CS1998: Diese asynchrone Methode enthält keine "await"-Operatoren und wird synchron ausgeführt. Erwägen Sie die Verwendung des Operators "await", um nicht blockierende API-Aufrufe zu erwarten, oder "await Task.Run(...)", um CPU-gebundene Arbeit in einem Hintergrundthread auszuführen.
Sie können die vollständige Containerimageadresse mit Tag im integrierten Terminal von VS Code sehen. Die Bildadresse wird aus Informationen erstellt, die sich in der module.json-Datei mit dem Format
<repository>:<version>-<platform>befinden. In diesem Artikel sollte es wiemycontreg2.azurecr.io/filecopymodule:0.0.1-amd64aussehen.
Nächste Schritte
Informationen zum Bereitstellen und Ausführen dieses Moduls auf Azure Stack Edge Pro FPGA finden Sie in den Schritten in Hinzufügen eines Moduls.