Exportieren von Daten-Streams inAWS Cloud(Konsole) - AWS IoT Greengrass

AWS IoT Greengrass Version 1 trat am 30. Juni 2023 in die erweiterte Lebensphase ein. Weitere Informationen finden Sie in der AWS IoT Greengrass V1 Wartungsrichtlinie. Nach diesem Datum AWS IoT Greengrass V1 werden keine Updates mehr veröffentlicht, die Funktionen, Verbesserungen, Bugfixes oder Sicherheitspatches bieten. Geräte, die auf laufen, werden AWS IoT Greengrass V1 nicht gestört und funktionieren weiterhin und stellen eine Verbindung zur Cloud her. Wir empfehlen Ihnen dringend, zu migrieren AWS IoT Greengrass Version 2, da dies wichtige neue Funktionen und Unterstützung für zusätzliche Plattformen bietet.

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Exportieren von Daten-Streams inAWS Cloud(Konsole)

In diesem Tutorial erfahren Sie, wie Sie das verwendenAWS IoT-Konsole zum Konfigurieren und Bereitstellen einerAWS IoT GreengrassGruppe mit aktiviertem Stream-Manager. Die Gruppe enthält eine benutzerdefinierte Lambda-Funktion, die in einen Stream im Stream-Manager schreibt, der dann automatisch in denAWS Cloud.

Der Stream-Manager macht das Aufnehmen, Verarbeiten und Exportieren von Datenstreams mit hohem Volumen effizienter und zuverlässiger. In diesem Tutorial erstellen Sie einenTransferStreamLambda-Funktion, die IoT-Daten verbraucht. Die Lambda-Funktion verwendet denAWS IoT GreengrassCore-SDK, um einen Stream im Stream-Manager zu erstellen und ihn dann zu lesen und darin zu schreiben. Der Stream-Manager exportiert dann den Stream in Kinesis Data Streams. Im folgenden Diagramm wird dieser Workflow veranschaulicht.

Diagramm des Stream-Management-Workflows.

Der Fokus dieses Lernprogramms ist es zu zeigen, wie benutzerdefinierte Lambda-Funktionen denStreamManagerClient-Objekt imAWS IoT GreengrassCore-SDK für die Interaktion mit dem Stream-Manager. Der Einfachheit halber generiert die Python-Lambda-Funktion, die Sie für dieses Lernprogramm erstellen, simulierte Gerätedaten.

Voraussetzungen

Zum Durchführen dieses Tutorials benötigen Sie Folgendes:

  • Eine Greengrass-Gruppe und ein Greengrass-Core (v1.10 oder höher). Weitere Informationen zum Erstellen einer Greengrass-Gruppe und Greengrass Core finden Sie unterErste Schritte mit AWS IoT Greengrass. Das Tutorial „Erste Schritte“ enthält auch die Schritte zur Installation der AWS IoT Greengrass-Core Software.

    Anmerkung

    Der Stream-Manager wird auf OpenWrt -Verteilungen.

  • Die Java 8-Laufzeitumgebung (JDK 8) muss auf dem Core-Gerät installiert sein.

    • Führen Sie für Debian-basierte Distributionen (einschließlich Raspbian) oder Ubuntu-basierte Distributionen den folgenden Befehl aus:

      sudo apt install openjdk-8-jdk
    • Führen Sie für Red Hat-basierte Distributionen (einschließlich Amazon Linux) den folgenden Befehl aus:

      sudo yum install java-1.8.0-openjdk

      Weitere Informationen finden Sie unter How to download and install prebuilt OpenJDK packages in der OpenJDK-Dokumentation.

  • AWS IoT GreengrassCore-SDK für Python v1.5.0 oder höher. Um zu verwendenStreamManagerClientimAWS IoT GreengrassCore SDK für Python müssen Sie:

    • Python 3.7 oder höher auf dem Core-Gerät installieren.

    • Nehmen Sie das SDK und seine Abhängigkeiten in Ihr Lambda-Funktionsbereitstellungspaket auf. Anweisungen finden Sie in diesem Tutorial.

    Tipp

    Sie können StreamManagerClient mit Java oder NodeJS verwenden. Beispielcode finden Sie unterAWS IoT GreengrassCore SDK for JavaundAWS IoT GreengrassCore SDK für Node.jsauf GitHub.

  • Ein Zielstream mit dem NamenMyKinesisStreamerstellt in Amazon Kinesis Data Streams im selbenAWS-Regionals Ihre Greengrass-Gruppe. Weitere Informationen finden Sie unterErstellen eines StreamsimEntwicklerhandbuch für Amazon Kinesis.

    Anmerkung

    In diesem Lernprogramm exportiert der Stream-Manager Daten in Kinesis Data Streams, was zu Gebühren für Ihr führtAWS-Konto. Weitere Informationen zu Preisen finden Sie unterKinesis Data Streams Streams-Preisgestaltung.

    Um Kosten zu vermeiden, können Sie dieses Lernprogramm ausführen, ohne einen Kinesis-Datenstream zu erstellen. In diesem Fall überprüfen Sie die Protokolle, um zu sehen, dass der Stream-Manager versucht hat, den Stream in Kinesis Data Streams zu exportieren.

  • Eine IAM-Richtlinie wurde zurGreengrass-Gruppenrolle.das erlaubtkinesis:PutRecordsAktion auf dem Zieldaten-Stream, wie im folgenden Beispiel gezeigt:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kinesis:PutRecords" ], "Resource": [ "arn:aws:kinesis:region:account-id:stream/MyKinesisStream" ] } ] }

Das Tutorial enthält die folgenden allgemeinen Schritte:

Für dieses Tutorial benötigen Sie ungefähr 20 Minuten.

Schritt 1: Bereitstellungspaket für die Lambda-Funktion erstellen

In diesem Schritt erstellen Sie ein Bereitstellungspaket für Lambda-Funktionen, das Python—Funktionscode und Abhängigkeiten enthält. Sie laden dieses Paket später hoch, wenn Sie das erstellenLambda-Funktion inAWS Lambda. Die Lambda-Funktion verwendet denAWS IoT GreengrassCore-SDK zum Erstellen und Interagieren mit lokalen Streams.

Anmerkung

Ihre benutzerdefinierten Lambda-Funktionen müssen dieAWS IoT GreengrassCore-SDKum mit dem Stream-Manager zu interagieren. Weitere Informationen zu den Anforderungen für den Greengrass Stream-Manager finden Sie im Artikel über die Voraussetzungen für Greengrass Stream-Manager.

  1. Herunterladen desAWS IoT GreengrassCore SDK für Pythonv1.5.0 oder höher.

  2. Entpacken Sie das heruntergeladene Paket, um das SDK zu erhalten. Das SDK ist der greengrasssdk-Ordner.

  3. Installieren Sie Paketabhängigkeiten, die mit dem SDK in Ihr Bereitstellungspaket für Lambda-Funktionen aufgenommen werden

    1. Navigieren Sie zum SDK-Verzeichnis, das die requirements.txt-Datei enthält. Diese Datei listet die Abhängigkeiten auf.

    2. Installieren Sie die SDK-Abhängigkeiten. Führen Sie beispielsweise den folgenden pip-Befehl aus, um sie im aktuellen Verzeichnis zu installieren:

      pip install --target . -r requirements.txt
  4. Speichern Sie die folgende Pythoncode-Funktion in einer lokalen Datei namens transfer_stream.py.

    Tipp

    Beispielcode, der Java und NodeJS verwendet, finden Sie unterAWS IoT GreengrassCore SDK for JavaundAWS IoT GreengrassCore SDK für Node.jsauf GitHub.

    import asyncio import logging import random import time from greengrasssdk.stream_manager import ( ExportDefinition, KinesisConfig, MessageStreamDefinition, ReadMessagesOptions, ResourceNotFoundException, StrategyOnFull, StreamManagerClient, ) # This example creates a local stream named "SomeStream". # It starts writing data into that stream and then stream manager automatically exports # the data to a customer-created Kinesis data stream named "MyKinesisStream". # This example runs forever until the program is stopped. # The size of the local stream on disk will not exceed the default (which is 256 MB). # Any data appended after the stream reaches the size limit continues to be appended, and # stream manager deletes the oldest data until the total stream size is back under 256 MB. # The Kinesis data stream in the cloud has no such bound, so all the data from this script is # uploaded to Kinesis and you will be charged for that usage. def main(logger): try: stream_name = "SomeStream" kinesis_stream_name = "MyKinesisStream" # Create a client for the StreamManager client = StreamManagerClient() # Try deleting the stream (if it exists) so that we have a fresh start try: client.delete_message_stream(stream_name=stream_name) except ResourceNotFoundException: pass exports = ExportDefinition( kinesis=[KinesisConfig(identifier="KinesisExport" + stream_name, kinesis_stream_name=kinesis_stream_name)] ) client.create_message_stream( MessageStreamDefinition( name=stream_name, strategy_on_full=StrategyOnFull.OverwriteOldestData, export_definition=exports ) ) # Append two messages and print their sequence numbers logger.info( "Successfully appended message to stream with sequence number %d", client.append_message(stream_name, "ABCDEFGHIJKLMNO".encode("utf-8")), ) logger.info( "Successfully appended message to stream with sequence number %d", client.append_message(stream_name, "PQRSTUVWXYZ".encode("utf-8")), ) # Try reading the two messages we just appended and print them out logger.info( "Successfully read 2 messages: %s", client.read_messages(stream_name, ReadMessagesOptions(min_message_count=2, read_timeout_millis=1000)), ) logger.info("Now going to start writing random integers between 0 and 1000 to the stream") # Now start putting in random data between 0 and 1000 to emulate device sensor input while True: logger.debug("Appending new random integer to stream") client.append_message(stream_name, random.randint(0, 1000).to_bytes(length=4, signed=True, byteorder="big")) time.sleep(1) except asyncio.TimeoutError: logger.exception("Timed out while executing") except Exception: logger.exception("Exception while running") def function_handler(event, context): return logging.basicConfig(level=logging.INFO) # Start up this sample code main(logger=logging.getLogger())
  5. Packen Sie die folgenden Elemente in einer ZIP-Datei mit dem Namen transfer_stream_python.zip. Dies ist das Bereitstellungspaket Ihrer Lambda-Funktion.

    • transfer_stream.py. App-Logik.

    • greengrasssdk. Erforderliche Bibliothek für Python Greengrass-Lambda-Funktionen, die MQTT-Nachrichten veröffentlichen.

      Stream-Manager-Betriebsind in Version 1.5.0 oder höher derAWS IoT GreengrassCore SDK für Python.

    • Die Abhängigkeiten, die Sie für dasAWS IoT GreengrassCore-SDK for Python (z. B.cbor2-Verzeichnisse).

    Wenn Sie die zip-Datei erstellen, schließen Sie nur diese Elemente ein, nicht den enthaltenen Ordner.

Schritt 2: Erstellen einer Lambda-Funktion

In diesem Schritt verwenden Sie denAWS Lambda-Konsole erstellen und diese zur Verwendung des Bereitstellungspakets konfigurieren. Anschließend veröffentlichen Sie eine Funktionsversion und erstellen einen Alias.

  1. Zunächst erstellen Sie die Lambda-Funktion.

    1. Wählen Sie in der AWS Management Console Services und öffnen Sie die AWS Lambda-Konsole.

    2. Klicken Sie aufFunktion erstellenund wählen Sie dannAuthor from scratch.

    3. Verwenden Sie im Abschnitt Basic information (Basisinformationen) folgende Werte:

      • Geben Sie für Function name (Funktionsname) TransferStream ein.

      • Wählen Sie für Runtime (Laufzeit) die Option Python 3.7 aus.

      • FürBerechtigungenverwenden, behalten Sie die Standardeinstellung bei. Dadurch wird eine Ausführungsrolle erstellt, die grundlegende Lambda-Berechtigungen gewährt. Diese Rolle wird nicht von verwendetAWS IoT Greengrass.

    4. Klicken Sie unten auf der Seite auf Create function.

  2. Registrieren Sie jetzt den Handler und laden Sie Ihr Bereitstellungspaket für Lambda-Funktionen hoch

    1. Auf derCodeunterQuellcode, wählenHochladen von. Wählen Sie in der Dropdown-Liste die OptionZIP-Datei.

      Die Dropdownliste Upload from mit hervorgehobener ZIP-Datei.
    2. Klicken Sie aufHochladenund wählen Sie dann Ihrtransfer_stream_python.zipBereitstellungspaket. Wählen Sie dann Save (Speichern) aus.

    3. Auf derCodefür die Funktion, unterLaufzeit-Einstellungen, wählenBearbeiten, und geben Sie die folgenden Werte ein.

      • Wählen Sie für Runtime (Laufzeit) die Option Python 3.7 aus.

      • Geben Sie unter Handler transfer_stream.function_handler ein.

    4. Wählen Sie Save (Speichern) aus.

      Anmerkung

      DieTest-Schaltfläche auf derAWS Lambda-Konsole funktioniert nicht mit dieser -Funktion. DieAWS IoT GreengrassDas Core SDK enthält keine Module, die erforderlich sind, um Ihre Greengrass Lambda-Funktionen unabhängig imAWS Lambdaconsole. Diese Module (zum Beispielgreengrass_common) werden für die Funktionen bereitgestellt, nachdem sie in Ihrem Greengrass-Kern bereitgestellt wurden.

  3. Veröffentlichen Sie jetzt die erste Version der Lambda-Funktion und erstellen Sie eineAlias für die Version.

    Anmerkung

    Greengrass-Gruppen können eine Lambda-Funktion nach Alias (empfohlen) oder nach Version referenzieren. Mit einem Alias lassen sich Code-Updates einfacher verwalten, da die Abonnementtabelle oder Gruppendefinition nicht geändert werden muss, wenn der Funktionscode aktualisiert wird. Stattdessen verweisen Sie einfach mit dem Alias auf die neue Funktionsversion.

    1. Wählen Sie im Menü Actions die Option Publish new version aus.

    2. Geben Sie unter Version description (Versionsbeschreibung) den Wert First version ein und wählen Sie dann Publish (Veröffentlichen) aus.

    3. Auf derTransferStream: 1-Konfigurationsseite, von derAktionen-Menü wählen SieErstellen eines Alias.

    4. Geben Sie auf der Seite Create a new alias folgende Werte an:

      • Geben Sie unter Name GG_TransferStream ein.

      • Wählen Sie für Version die Option 1.

      Anmerkung

      AWS IoT Greengrassunterstützt keine Lambda-Aliasse für$LATESTVersionen.

    5. Wählen Sie Create (Erstellen) aus.

Jetzt sind Sie bereit, die Lambda-Funktion zu Ihrer Greengrass-Gruppe hinzuzufügen.

Schritt 3: Hinzufügen einer Lambda-Funktion zur Greengrass-Gruppe

In diesem Schritt fügen Sie die Lambda-Funktion der Gruppe hinzu und konfigurieren dann den Lebenszyklus und die Umgebungsvariablen. Weitere Informationen finden Sie unter Steuern der Ausführung von Greengrass-Lambda-Funktionen mithilfe einer gruppenspezifischen Konfiguration.

  1. In derAWS IoTNavigationsbereich der -Konsole unterVerwalten, erweiternGreengrass-Geräteund wählen Sie dannGruppen (V1).

  2. Wählen Sie die Zielgruppe aus.

  3. Wählen Sie auf der Gruppenkonfigurationsseite die OptionLambda-FunktionenRegisterkarte.

  4. UnderMeine Lambda-Funktionen, wählenAdd.

  5. Auf derHinzufügen einer Lambda-Funktion-Seite wählen Sie die OptionLambda-Funktionfür Ihre Lambda-Funktion.

  6. Für denLambda-Version, wählenAlias: GG_TransferStream.

    Konfigurieren Sie jetzt Eigenschaften, die das Verhalten der Lambda-Funktion in der Greengrass-Gruppe bestimmen.

  7. In derKonfiguration der Lambda-Funktiondie folgenden Änderungen durch:

    • Legen Sie die Speichergrenze auf 32 MB fest.

    • FürPinned, wählenWahr.

    Anmerkung

    EINlangdauerndem(oderfestgeheftet) Lambda-Funktion startet automatisch danachAWS IoT Greengrassstartet und läuft weiter in ihrem eigenen Container. Dies steht im Gegensatz zu einemauf AnforderungLambda-Funktion, die nach einem Aufruf startet und beendet wird, sobald keine weiteren Aufgaben auszuführen sind. Weitere Informationen finden Sie unter Lebenszykluskonfiguration für Greengrass-Lambda-Funktionen.

  8. Klicken Sie aufHinzufügen einer Lambda-Funktion.

Schritt 4: Aktivieren des Stream-Managers

In diesem Schritt stellen Sie sicher, dass der Stream-Manager aktiviert ist.

  1. Wählen Sie auf der Gruppenkonfigurationsseite die OptionLambda-FunktionenRegisterkarte.

  2. UnderLambda-Funktionen, wählen SieStream-Managerund überprüfen Sie den Status. Wenn diese Option deaktiviert ist, wählen Sie Bearbeiten aus. Wählen Sie dann Aktivieren und Speichern aus. Sie können die Standardparametereinstellungen für dieses Lernprogramm verwenden. Weitere Informationen finden Sie unter Konfigurieren des AWS IoT Greengrass-Stream-Managers.

Anmerkung

Wenn Sie die Konsole verwenden, um den Stream-Manager zu aktivieren und die Gruppe bereitzustellen, wird die Speichergröße für den Stream-Manager standardmäßig auf 4194304 KB (4 GB) festgelegt. Wir empfehlen, dass Sie die Speichergröße auf mindestens 128000 KB einstellen.

Schritt 5: Konfigurieren der lokalen Protokollierung

In diesem Schritt konfigurieren SieAWS IoT Greengrass-Systemkomponenten, benutzerdefinierte Lambda-Funktionen und Konnektoren in der Gruppe, um Protokolle in das Dateisystem des Core-Geräts zu schreiben. Sie können Protokolle verwenden, um Probleme zu beheben, die auftreten können. Weitere Informationen finden Sie unter Überwachen mit AWS IoT Greengrass-Protokollen.

  1. Überprüfen Sie unter Konfiguration der lokalen Protokolle, ob die lokale Protokollierung konfiguriert ist.

  2. Wenn keine Protokolle für Greengrass-Systemkomponenten oder benutzerdefinierte Lambda-Funktionen konfiguriert sind, wählen SieBearbeiten.

  3. Klicken Sie aufBenutzer-Lambda-Funktionen auf ProtokollebeneundGreengrass-Systemprotokollebene.

  4. Behalten Sie die Standardwerte für die Protokollierungsebene und Kontingentsgrenze bei. Wählen Sie anschließend Save (Speichern) aus.

Schritt 6: Bereitstellen der Greengrass-Gruppe

Stellen Sie die Gruppe auf dem Core-Gerät bereit.

  1. Stellen Sie sicher, dass dieAWS IoT Greengrasscore läuft. Führen Sie im Raspberry Pi-Terminal die folgenden Befehle aus, falls nötig.

    1. So prüfen Sie, ob der Daemon ausgeführt wird:

      ps aux | grep -E 'greengrass.*daemon'

      Wenn die Ausgabe einen root-Eintrag für /greengrass/ggc/packages/ggc-version/bin/daemon enthält, dann wird der Daemon ausgeführt.

      Anmerkung

      Die Version in dem Pfad hängt von der AWS IoT Greengrass-Core-Softwareversion ab, die auf Ihrem Core-Gerät installiert ist.

    2. So starten Sie den Daemon:

      cd /greengrass/ggc/core/ sudo ./greengrassd start
  2. Wählen Sie auf der Gruppenkonfigurationsseite die OptionBereitstellen.

    1. In derLambda-Funktionenunter der RegisterkarteSystem-Lambda-FunktionenAbschnitt, wählen SieIP-Detektorund wähleBearbeiten.

    2. In derEinstellungen für IP-Detektor bearbeiten-Dialogfeld wählen SieAutomatisches Erkennen und Überschreiben von MQTT-Broker-.

    3. Wählen Sie Save (Speichern) aus.

      Damit können Geräte automatisch Core-Verbindungsinformationen abrufen, z. B. die IP-Adresse, DNS und die Portnummer. Die automatische Ermittlung wird empfohlen, aber AWS IoT Greengrass unterstützt auch manuell angegebene Endpunkte. Sie werden nur bei der ersten Bereitstellung der Gruppe zur Angabe der Ermittlungsmethode aufgefordert.

      Anmerkung

      Erteilen Sie bei Aufforderung die Berechtigung zum Erstellen desGreengrass-Servicerolleund assoziiere es mit deinemAWS-Kontoin der aktuellenAWS-Region. Diese Rolle erlaubtAWS IoT Greengrassum auf Ihre -Ressourcen zuzugreifenAWS-Services.

      Auf der Seite Deployments werden der Zeitstempel, die Versions-ID und der Status der Bereitstellung angegeben. Nach abgeschlossener Bereitstellung sollte der StatusCompleted (Abgeschlossen).

      Hilfe zur Problembehebung finden Sie unter Fehlerbehebung für AWS IoT Greengrass.

Schritt 7: Testen der Anwendung

DieTransferStreamDie Lambda-Funktion erzeugt simulierte Gerätedaten. Sie schreibt Daten in einen Stream, den der Stream-Manager in den Kinesis-Zieldatenstream exportiert.

  1. In der Amazon Kinesis Kinesis-Konsole unterKinesis Data Streams, wählenMyKinesisStream.

    Anmerkung

    Wenn Sie das Lernprogramm ohne Kinesis-Zieldatenstream ausgeführt haben, suchen Sie in der Protokolldatei nach dem Stream-Manager (GGStreamManager). Wenn export stream MyKinesisStream doesn't exist in einer Fehlermeldung enthalten ist, ist der Test erfolgreich. Dieser Fehler bedeutet, dass der Service versucht hat, in den Stream zu exportieren, der Stream jedoch nicht existiert.

  2. Auf derMyKinesisStream-Seite wählen SieÜberwachung. Wenn der Test erfolgreich ist, sollten Sie die Daten in den Put Records (Datensätze übergeben)-Diagrammen sehen. Je nach Verbindung kann es eine Minute dauern, bis die Daten angezeigt werden.

    Wichtig

    Löschen Sie nach Abschluss des Tests den Kinesis-Datenstream, um zusätzliche Kosten zu vermeiden.

    Oder führen Sie die folgenden Befehle aus, um den Greengrass-Daemon zu stoppen. Dadurch wird verhindert, dass der Core Nachrichten sendet, bis Sie bereit sind, den Test fortzusetzen.

    cd /greengrass/ggc/core/ sudo ./greengrassd stop
  3. Remove dasTransferStreamLambda-Funktion aus dem Core.

    1. In derAWS IoTNavigationsbereich der -Konsole unterVerwalten, erweiternGreengrass-Geräteund wählen Sie dannGruppen (V1).

    2. UnderGreengrass-Gruppenwählen Sie Ihre Gruppe aus.

    3. Auf derLambdadie Ellipsen (...) für dasTransferStream-Funktion und wählen Sie dannFunktion entfernen.

    4. Wählen Sie unter Actions (Aktionen) die Option Deploy (Bereitstellen) aus.

Um Protokollierungsinformationen anzuzeigen oder Probleme mit Streams zu beheben, suchen Sie in den Protokollen nach den Funktionen TransferStream und GGStreamManager. Sie müssen über root-Berechtigungen zum Lesen von AWS IoT Greengrass-Protokollen im Dateisystem verfügen.

  • TransferStream schreibt Protokolleinträge in greengrass-root/ggc/var/log/user/region/account-id/TransferStream.log.

  • GGStreamManager schreibt Protokolleinträge in greengrass-root/ggc/var/log/system/GGStreamManager.log.

Wenn Sie weitere Informationen zur Problembehandlung benötigen, können Siesetzen der ProtokollierungsstufezumLambda-Protokollezu-Debug-Protokolleund stellen anschließend die Gruppe erneut bereit.

Weitere Informationen finden Sie auch unter