Ausführen von Lambda-Funktionen auf dem AWS IoT Greengrass Core - 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.

Ausführen von Lambda-Funktionen auf dem AWS IoT Greengrass Core

AWS IoT Greengrass bietet eine containerisierte Lambda-Laufzeitumgebung für benutzerdefinierten Code, den Sie in erstellenAWS Lambda. Lambda-Funktionen, die in einer -AWS IoT GreengrassCore-Ausführung in der lokalen Lambda-Laufzeit des Cores bereitgestellt werden. Lokale Lambda-Funktionen können durch lokale Ereignisse, Nachrichten aus der Cloud und andere Quellen ausgelöst werden, die Client-Geräten lokale Rechenfunktionen bieten. Sie können beispielsweise Greengrass-Lambda-Funktionen verwenden, um Gerätedaten zu filtern, bevor Sie die Daten in die Cloud übertragen.

Um eine Lambda-Funktion in einem Kern bereitzustellen, fügen Sie die Funktion einer Greengrass-Gruppe hinzu (indem Sie auf die vorhandene Lambda-Funktion verweisen), konfigurieren gruppenspezifische Einstellungen für die Funktion und stellen die Gruppe dann bereit. Wenn die Funktion auf -AWSServices zugreift, müssen Sie der Greengrass-Gruppenrolle auch alle erforderlichen Berechtigungen hinzufügen.

Sie können Parameter konfigurieren, die bestimmen, wie die Lambda-Funktionen ausgeführt werden, einschließlich Berechtigungen, Isolation, Speicherlimits und mehr. Weitere Informationen finden Sie unter Steuern der Ausführung von Greengrass-Lambda-Funktionen mithilfe einer gruppenspezifischen Konfiguration.

Anmerkung

Diese Einstellungen ermöglichen auch die Ausführung von AWS IoT Greengrass in einem Docker-Container. Weitere Informationen finden Sie unter Ausführen von AWS IoT Greengrass in einem Docker-Container.

In der folgenden Tabelle sind die unterstützten AWS Lambda-Laufzeiten und die Versionen der AWS IoT Greengrass Core-Software aufgelistet, die sie ausführen können.

Sprache oder Plattform GGC-Version
Python 3.8 1.11
Python 3.7 1.9 oder höher
Python 2.7* 1.0 oder höher
Java 8 1.1 oder höher
Node.js 12.x* 1.10 oder höher
Node.js 8.10* 1.9 oder höher
Node.js 6.10* 1.1 oder höher
C, C++ 1.6 oder höher

* Sie können Lambda-Funktionen ausführen, die diese Laufzeiten auf unterstützten Versionen von verwendenAWS IoT Greengrass, aber Sie können sie nicht in erstellenAWS Lambda. Wenn sich die Laufzeit auf Ihrem Gerät von der für diese Funktion angegebenen AWS Lambda-Laufzeitumgebung unterscheidet, können Sie Ihre eigene Laufzeit mithilfe von FunctionRuntimeOverride in auswählenFunctionDefintionVersion. Weitere Informationen finden Sie unter CreateFunctionDefinition. Weitere Informationen zu unterstützten Laufzeiten finden Sie unter Laufzeit-Supportrichtlinie im AWS Lambda Entwicklerhandbuch für .

-SDKs für Greengrass-Lambda-Funktionen

AWS bietet drei SDKs, die von Greengrass-Lambda-Funktionen verwendet werden können, die auf einem -AWS IoT GreengrassKern ausgeführt werden. Da diese SDKs in verschiedenen Paketen enthalten sind, können sie von Funktionen gleichzeitig genutzt werden. Um ein SDK in einer Greengrass-Lambda-Funktion zu verwenden, fügen Sie es in das Bereitstellungspaket der Lambda-Funktion ein, das Sie in hochladenAWS Lambda.

AWS IoT Greengrass Core-SDK

Ermöglicht lokalen Lambda-Funktionen die Interaktion mit dem Kern für:

  • Austauschen von MQTT-Nachrichten mit AWS IoT Core.

  • Tauschen Sie MQTT-Nachrichten mit Connectors, Client-Geräten und anderen Lambda-Funktionen in der Greengrass-Gruppe aus.

  • Interagieren mit dem lokalen Shadow-Service.

  • Rufen Sie andere lokale Lambda-Funktionen auf.

  • Zugreifen auf geheime Ressourcen.

  • Interagieren Sie mit dem Stream-Manager.

AWS IoT Greengrass stellt das AWS IoT Greengrass Core SDK in den folgenden Sprachen und Plattformen auf bereit GitHub.

So schließen Sie die AWS IoT Greengrass Core-SDK-Abhängigkeit in das Bereitstellungspaket der Lambda-Funktion ein:

  1. Laden Sie die Sprache oder Plattform des AWS IoT Greengrass Core-SDK-Pakets herunter, das der Laufzeit Ihrer Lambda-Funktion entspricht.

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

  3. Fügen Sie greengrasssdk in das Bereitstellungspaket der Lambda-Funktion ein, das Ihren Funktionscode enthält. Dies ist das Paket, in das Sie hochladen, AWS Lambda wenn Sie die Lambda-Funktion erstellen.

 

StreamManagerClient

Für Stream-Manager-Operationen können nur die folgenden AWS IoT Greengrass Core-SDKs verwendet werden: SDKs

  • Java SDK (v1.4.0 oder höher)

  • Python SDK (v1.5.0 oder höher)

  • Node.js SDK (v1.6.0 oder höher)

Um das AWS IoT Greengrass Core SDK für Python für die Interaktion mit dem Stream-Manager zu verwenden, müssen Sie Python 3.7 oder höher installieren. Sie müssen auch Abhängigkeiten installieren, um sie in Ihre Bereitstellungspakete für Python-Lambda-Funktionen aufzunehmen:

  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

 

Installieren des AWS IoT Greengrass Core SDK für Python auf dem Core-Gerät

Wenn Sie Python-Lambda-Funktionen ausführen, können Sie auch verwenden, pip um das AWS IoT Greengrass Core SDK für Python auf dem Core-Gerät zu installieren. Anschließend können Sie Ihre Funktionen bereitstellen, ohne das SDK in das Bereitstellungspaket der Lambda-Funktion aufzunehmen. Weitere Informationen finden Sie unter greengrasssdk.

Diese Unterstützung ist für Cores mit Größenbeschränkungen vorgesehen. Wir empfehlen, dass Sie das SDK nach Möglichkeit in Ihre Bereitstellungspakete für Lambda-Funktionen aufnehmen.

 

AWS IoT Greengrass Machine Learning SDK

Ermöglicht lokale Lambda-Funktionen, Machine Learning (ML)-Modelle zu nutzen, die im Greengrass-Kern als ML-Ressourcen bereitgestellt werden. Lambda-Funktionen können das -SDK verwenden, um einen lokalen Inferenzservice aufzurufen und mit diesem zu interagieren, der auf dem Core als Konnektor bereitgestellt wird. Lambda-Funktionen und ML-Konnektoren können das SDK auch verwenden, um Daten zum Hochladen und Veröffentlichen an den ML-Feedback-Konnektor zu senden. Weitere Informationen einschließlich Codebeispielen, die das SDK verwenden, finden Sie unter Anschluss zur ML-Bildklassifizierung, Objekterkennungsstecker und ML-Feedback-.

In der folgenden Tabelle werden die unterstützten Sprachen oder Plattformen für SDK-Versionen sowie die Versionen der AWS IoT Greengrass Core-Software aufgeführt, auf denen sie ausgeführt werden können.

SDK-Version Sprache oder Plattform Erforderliche GGC-Version Änderungsprotokoll
1.1.0 Python 3.7 oder 2.7 1.9.3 oder höher Unterstützung für Python 3.7 und neuer feedback-Client hinzugefügt.
1.0.0 Python 2.7 1.7 oder höher Erstversion.

Informationen zum Download finden Sie unter AWS IoT Greengrass ML-SDK-Software.

AWS-SDKs

Ermöglicht lokale Lambda-Funktionen, um direkte Aufrufe an -AWSServices wie Amazon S3, DynamoDBAWS IoT , und zu tätigenAWS IoT Greengrass. Um ein AWS SDK in einer Greengrass-Lambda-Funktion zu verwenden, müssen Sie es in Ihr Bereitstellungspaket aufnehmen. Wenn Sie das AWS SDK im selben Paket wie das AWS IoT Greengrass Core SDK verwenden, stellen Sie sicher, dass Ihre Lambda-Funktionen die richtigen Namespaces verwenden. Greengrass-Lambda-Funktionen können nicht mit Cloud-Services kommunizieren, wenn der Kern offline ist.

Laden Sie das AWS-SDK aus dem Ressourcencenter für die ersten Schritte herunter.

Weitere Informationen zum Erstellen eines Bereitstellungspakets finden Sie unter Erstellen und Verpacken einer Lambda-Funktion im Tutorial Erste Schritte oder Erstellen eines Bereitstellungspakets im AWS Lambda -Entwicklerhandbuch.

Migrieren von cloudbasierten Lambda-Funktionen

Das AWS IoT Greengrass Core SDK folgt dem AWS SDK-Programmiermodell, das das Portieren von Lambda-Funktionen, die für die Cloud entwickelt wurden, zu Lambda-Funktionen vereinfacht, die auf einem -AWS IoT GreengrassKern ausgeführt werden.

Die folgende Python-Lambda-Funktion verwendet beispielsweise die , AWS SDK for Python (Boto3) um eine Nachricht zum Thema some/topic in der Cloud zu veröffentlichen:

import boto3 iot_client = boto3.client("iot-data") response = iot_client.publish( topic="some/topic", qos=0, payload="Some payload".encode() )

Um die Funktion für einen -AWS IoT GreengrassKern zu portieren, ändern Sie in der import Anweisung und client Initialisierung den boto3 Modulnamen in greengrasssdk, wie im folgenden Beispiel gezeigt:

import greengrasssdk iot_client = greengrasssdk.client("iot-data") iot_client.publish(topic="some/topic", qos=0, payload="Some payload".encode())
Anmerkung

Das AWS IoT Greengrass Core SDK unterstützt nur das Senden von MQTT-Nachrichten mit QoS = 0. Weitere Informationen finden Sie unter Nachrichtenqualität des Service.

Die Ähnlichkeit zwischen Programmiermodellen ermöglicht es Ihnen auch, Ihre Lambda-Funktionen in der Cloud zu entwickeln und sie dann AWS IoT Greengrass mit minimalem Aufwand zu zu migrieren. Lambda-ausführbare Dateien werden nicht in der Cloud ausgeführt, sodass Sie das AWS SDK nicht verwenden können, um sie vor der Bereitstellung in der Cloud zu entwickeln.

Referenzieren von Lambda-Funktionen nach Alias oder Version

Greengrass-Gruppen können eine Lambda-Funktion nach Alias (empfohlen) oder Version referenzieren. Die Verwendung eines Alias erleichtert die Verwaltung von Codeaktualisierungen, da Sie Ihre Abonnementtabelle oder Gruppendefinition nicht ändern müssen, wenn der Funktionscode aktualisiert wird. Stattdessen verweisen Sie den Alias einfach auf die neue Funktionsversion. Aliase werden während der Gruppenbereitstellung in Versionsnummern aufgelöst. Bei Verwendung eines Alias wird die aufgelöste Version auf die Version aktualisiert, auf die das Alias zum Zeitpunkt der Bereitstellung weist.

AWS IoT Greengrass unterstützt keine Lambda-Aliase für $LATEST-Versionen. $LATEST-Versionen sind nicht an unveränderliche, veröffentlichte Funktionsversionen gebunden und können jederzeit geändert werden, was dem AWS IoT GreengrassPrinzip der Versionsunveränderlichkeit entspricht.

Eine gängige Praxis, um Ihre Greengrass-Lambda-Funktionen mit Codeänderungen auf dem neuesten Stand zu halten, ist die Verwendung eines Alias namens PRODUCTION in Ihrer Greengrass-Gruppe und Ihren Abonnements. Wenn Sie neue Versionen Ihrer Lambda-Funktion in die Produktion heraufstufen, verweisen Sie den Alias auf die neueste stabile Version und stellen Sie die Gruppe erneut bereit. Sie können diese Methode auch für ein Rollback auf eine frühere Version verwenden.

Kommunikationsabläufe für Greengrass-Lambda-Funktionen

Greengrass-Lambda-Funktionen unterstützen verschiedene Methoden der Kommunikation mit anderen Mitgliedern der AWS IoT Greengrass Gruppe, lokalen -Services und Cloud-Services (einschließlich AWS-Services).

Kommunikation über MQTT-Nachrichten

Lambda-Funktionen können MQTT-Nachrichten mit einem Publish-Subscribe-Muster senden und empfangen, das von Abonnements gesteuert wird.

Dieser Kommunikationsablauf ermöglicht es Lambda-Funktionen, Nachrichten mit den folgenden Entitäten auszutauschen:

  • Client-Geräte in der Gruppe.

  • Konnektoren in der Gruppe.

  • Andere Lambda-Funktionen in der Gruppe.

  • AWS IoT.

  • Lokaler Geräteschattenservice.

Ein Abonnement definiert eine Nachrichtenquelle, ein Meldeziel und ein Thema (oder Objekt), das verwendet wird, um Nachrichten von der Quelle zum Ziel weiterzuleiten. Nachrichten, die in einer Lambda-Funktion veröffentlicht werden, werden an den registrierten Handler der Funktion übergeben. Abonnements bieten mehr Sicherheit und vorhersehbare Interaktionen. Weitere Informationen finden Sie unter Verwaltete Abonnements im MQTT Messaging-Workflow.

Anmerkung

Wenn der Kern offline ist, können Greengrass-Lambda-Funktionen Nachrichten mit Client-Geräten, Connectors, anderen Funktionen und lokalen Schatten austauschen, aber Nachrichten an AWS IoT werden in die Warteschlange gestellt. Weitere Informationen finden Sie unter MQTT-Nachrichtenwarteschlange für Cloud-Ziele.

Andere Kommunikationsströme

  • Um mit lokalen Geräte- und Volume-Ressourcen und Machine-Learning-Modellen auf einem Core-Gerät zu interagieren, verwenden Greengrass-Lambda-Funktionen plattformspezifische Betriebssystemschnittstellen. Beispielsweise können Sie die open-Methode im os-Modul in Python-Funktionen verwenden. Damit eine Funktion auf eine Ressource zugreifen kann, muss die Funktion der Ressource zugeordnet und die Berechtigungen read-only oder read-write müssen gewährt werden. Weitere Informationen, einschließlich der Verfügbarkeit von AWS IoT Greengrass Kernversionen, finden Sie unter Greifen Sie mit Lambda-Funktionen und -Konnektoren auf lokale Ressourcen zu und Zugreifen auf Machine-Learning-Ressourcen über Lambda-Funktionscode.

    Anmerkung

    Wenn Sie Ihre Lambda-Funktion ohne Containerisierung ausführen, können Sie keine angefügten lokalen Geräte- und Volume-Ressourcen verwenden und müssen direkt auf diese Ressourcen zugreifen.

  • Lambda-Funktionen können den Lambda Client im AWS IoT Greengrass Core SDK verwenden, um andere Lambda-Funktionen in der Greengrass-Gruppe aufzurufen.

  • Lambda-Funktionen können das AWS SDK verwenden, um mit -AWSServices zu kommunizieren. Weitere Informationen finden Sie unter AWS SDK .

  • Lambda-Funktionen können Schnittstellen von Drittanbietern verwenden, um mit externen Cloud-Services zu kommunizieren, ähnlich wie bei Cloud-basierten Lambda-Funktionen.

Anmerkung

Greengrass-Lambda-Funktionen können nicht mit AWS oder anderen Cloud-Services kommunizieren, wenn der Kern offline ist.

Abrufen des Eingabe-MQTT-Themas (oder -Betreffs)

AWS IoT Greengrass verwendet Abonnements, um den Austausch von MQTT-Nachrichten zwischen Client-Geräten, Lambda-Funktionen und Connectors in einer Gruppe sowie mit AWS IoT oder dem lokalen Schattenservice zu steuern. Abonnements definieren eine Nachrichtenquelle, ein Nachrichtenziel und ein MQTT-Thema, die zum Routen von Nachrichten verwendet werden. Wenn das Ziel eine Lambda-Funktion ist, wird der Handler der Funktion aufgerufen, wenn die Quelle eine Nachricht veröffentlicht. Weitere Informationen finden Sie unter Kommunikation über MQTT-Nachrichten.

Das folgende Beispiel zeigt, wie eine Lambda-Funktion das Eingabethema von der abrufen kanncontext, die an den Handler übergeben wird. Dies geschieht durch Zugriff auf den subject-Schlüssel aus der Kontexthierarchie (context.client_context.custom['subject']). In diesem Beispiel wird außerdem die Eingabe-JSON-Nachricht geparst und anschließend das geparste Thema und die Nachricht veröffentlicht.

Anmerkung

In der AWS IoT Greengrass-API wird das Thema eines Abonnements durch die subject-Eigenschaft dargestellt.

import greengrasssdk import logging client = greengrasssdk.client('iot-data') OUTPUT_TOPIC = 'test/topic_results' def get_input_topic(context): try: topic = context.client_context.custom['subject'] except Exception as e: logging.error('Topic could not be parsed. ' + repr(e)) return topic def get_input_message(event): try: message = event['test-key'] except Exception as e: logging.error('Message could not be parsed. ' + repr(e)) return message def function_handler(event, context): try: input_topic = get_input_topic(context) input_message = get_input_message(event) response = 'Invoked on topic "%s" with message "%s"' % (input_topic, input_message) logging.info(response) except Exception as e: logging.error(e) client.publish(topic=OUTPUT_TOPIC, payload=response) return

Um die Funktion zu testen, fügen Sie sie mithilfe der Standardkonfigurationseinstellungen Ihrer Gruppe hinzu. Fügen Sie anschließend die folgenden Abonnements hinzu und stellen Sie die Gruppe bereit. Anweisungen finden Sie unter Modul 3 (Teil 1): Lambda-Funktionen aufAWS IoT Greengrass.

Quelle Ziel Themenfilter
IoT Cloud Diese Funktion test/input_message
Diese Funktion IoT Cloud test/topic_results

Nach Abschluss der Bereitstellung rufen Sie die Funktion auf.

  1. Öffnen Sie in der -AWS IoTKonsole die Seite MQTT-Testclient.

  2. Abonnieren Sie das test/topic_results Thema, indem Sie die Registerkarte Thema abonnieren auswählen.

  3. Veröffentlichen Sie eine Nachricht zu dem test/input_message Thema, indem Sie die Registerkarte In einem Thema veröffentlichen auswählen. In diesem Beispiel müssen Sie die test-key-Eigenschaft in die JSON-Nachricht einbinden.

    { "test-key": "Some string value" }

    Ist der Befehl erfolgreich, veröffentlicht die Funktion die Eingabethema- und Nachrichtenzeichenfolge im test/topic_results-Thema.

Lebenszykluskonfiguration für Greengrass-Lambda-Funktionen

Der Lebenszyklus der Greengrass-Lambda-Funktion bestimmt, wann eine Funktion gestartet wird und wie sie Container erstellt und verwendet. Der Lebenszyklus legt außerdem fest, wie Variablen und die Vorverarbeitungslogik außerhalb des Funktionshandlers beibehalten werden.

AWS IoT Greengrass unterstützt die Lebenszyklen „On-Demand“ (Standard) oder „Langlebig“:

  • On-Demand-Funktionen starten bei Aufruf und stoppen, wenn keine weiteren Aufgaben auszuführen sind. Ein Aufruf der Funktion erstellt einen separaten Container (oder eine Sandbox) für die Verarbeitung der Aufrufe, es sei senn, ein vorhandener Container kann erneut verwendet werden. Daten, die an die Funktion gesendet werden, können von jedem der Container abgerufen werden.

    Es können mehrere Aufrufe einer On-Demand--Funktion parallel ausgeführt werden.

    Variablen und die Vorverarbeitungslogik, die außerhalb des Funktionshandlers definiert sind, werden nicht beibehalten, wenn neue Container erstellt werden.

  • Langlebige (oder angeheftete) Funktionen werden automatisch gestartet, wenn der AWS IoT Greengrass Kern gestartet und in einem einzigen Container ausgeführt wird. Alle Daten, die an die Funktion gesendet werden, können vom selben Container abgerufen werden.

    Mehrere Aufrufe werden so lange in eine Warteschlange verschoben, bis frühere Aufrufe ausgeführt werden.

    Variablen und die Vorverarbeitungslogik, die außerhalb des Funktionshandlers definiert sind, werden für jeden Aufruf des Funktionshandlers beibehalten.

    Langlebige Lambda-Funktionen sind nützlich, wenn Sie ohne anfängliche Eingabe mit der Arbeit beginnen müssen. Eine langlebige Funktion kann beispielsweise ein ML-Modell laden und mit dessen Verarbeitung beginnen, um für den Empfang von Gerätedaten bereit zu sein.

    Anmerkung

    Denken Sie daran, dass die Zeitüberschreitungen von langlebigen Funktionen den Aufrufen ihrer Handler zugeordnet sind. Wenn Sie unbegrenzt laufenden Code ausführen möchten, muss er außerhalb des Handlers gestartet werden. Stellen Sie sicher, dass kein blockierender Code außerhalb des Handlers vorhanden ist, der möglicherweise verhindert, dass die Funktion den Initialisierungsvorgang abschließt.

    Diese Funktionen werden ausgeführt, es sei denn, der Core wird angehalten (z. B. während einer Gruppenbereitstellung oder eines Geräteneustarts) oder die Funktion wechselt in einen Fehlerstatus (z. B. ein Handler-Timeout, eine nicht erkannte Ausnahme oder wenn sie seine Speicherlimits überschreitet).

Weitere Informationen zur Wiederverwendung von Containern finden Sie unter Grundlegendes zur Wiederverwendung von Containern in AWS Lambda im AWS Compute Blog.

Lambda-Ausführungsdateien

Diese Funktion ist für AWS IoT Greengrass Core v1.6 und höher verfügbar.

Eine Lambda-ausführbare Datei ist eine Art von Greengrass-Lambda-Funktion, mit der Sie Binärcode in der Kernumgebung ausführen können. Damit können Sie gerätespezifische Funktionen nativ ausführen und vom geringeren Ressourcenbedarf an kompiliertem Code profitieren. Lambda-ausführbare Dateien können durch Ereignisse aufgerufen werden, andere Funktionen aufrufen und auf lokale Ressourcen zugreifen.

Lambda-ausführbare Dateien unterstützen nur den binären Kodierungstyp (nicht JSON). Andernfalls können Sie sie in Ihrer Greengrass-Gruppe verwalten und wie andere Greengrass-Lambda-Funktionen bereitstellen. Der Prozess der Erstellung von Lambda-Ausführungen unterscheidet sich jedoch vom Erstellen von Python-, Java- und Node.js-Lambda-Funktionen:

  • Sie können die AWS LambdaKonsole nicht verwenden, um eine Lambda-ausführbare Datei zu erstellen (oder zu verwalten). Sie können eine Lambda-ausführbare Datei nur mithilfe der AWS Lambda API erstellen.

  • Sie laden den Funktionscode in AWS Lambda als kompilierte ausführbare Datei hoch, die das AWS IoT Greengrass Core-SDK für C enthält.

  • Sie geben den Namen der ausführbaren Datei als Funktionshandler an.

Lambda-ausführbare Dateien müssen bestimmte Aufrufe und Programmiermuster in ihrem Funktionscode implementieren. Folgendes muss beispielsweise von der main-Methode behandelt werden:

  • Rufen Sie gg_global_init auf, um interne globale Variablen von Greengrass zu initialisieren. Diese Funktion muss aufgerufen werden, bevor Threads erstellt und andere AWS IoT Greengrass Core SDK-Funktionen aufgerufen werden.

  • Rufen Sie aufgg_runtime_start, um den Funktionshandler bei der Greengrass-Lambda-Laufzeit zu registrieren. Diese Funktion muss während der Initialisierung aufgerufen werden. Durch den Aufruf dieser Funktion wird der aktuelle Thread von der Laufzeit verwendet. Der optionale GG_RT_OPT_ASYNC-Parameter weist diese Funktion an, nicht zu blockieren, sondern ein neues Threads für die Laufzeit zu erstellen. Diese Funktion verwendet einen SIGTERM-Handler.

Der folgende Codeausschnitt ist die main Methode aus dem Codebeispiel simple_handler.c auf GitHub.

int main() { gg_error err = GGE_SUCCESS; err = gg_global_init(0); if(err) { gg_log(GG_LOG_ERROR, "gg_global_init failed %d", err); goto cleanup; } gg_runtime_start(handler, 0); cleanup: return -1; }

Weitere Informationen zu Anforderungen, Einschränkungen und anderen Implementierungsdetails finden Sie unter AWS IoT Greengrass Core SDK for C.

Erstellen einer ausführbaren Lambda-Datei

Nachdem Sie Ihren Code zusammen mit dem SDK kompiliert haben, verwenden Sie die AWS Lambda-API, um eine Lambda-Funktion zu erstellen und Ihre kompilierte ausführbare Datei hochzuladen.

Anmerkung

Ihre Funktion muss mit einem C89-kompatiblen Compiler kompiliert werden.

Im folgenden Beispiel wird der CLI-Befehl create-function verwendet, um eine Lambda-ausführbare Datei zu erstellen. Der Befehl gibt folgendes an:

  • Der Name der ausführbaren Datei für den Handler. Es muss der genaue Name Ihrer kompilierten ausführbaren Datei sein.

  • Der Pfad zur .zip-Datei mit der kompilierten ausführbaren Datei.

  • arn:aws:greengrass:::runtime/function/executable für die Laufzeit. Dies ist die Laufzeit für alle ausführbaren Lambda-Dateien.

Anmerkung

Für können roleSie den ARN einer beliebigen Lambda-AWS IoT GreengrassAusführungsrolle angeben. verwendet diese Rolle nicht, aber der Parameter ist erforderlich, um die Funktion zu erstellen. Weitere Informationen zu Lambda-Ausführungsrollen finden Sie unter -AWS LambdaBerechtigungsmodell im AWS Lambda -Entwicklerhandbuch.

aws lambda create-function \ --region aws-region \ --function-name function-name \ --handler executable-name \ --role role-arn \ --zip-file fileb://file-name.zip \ --runtime arn:aws:greengrass:::runtime/function/executable

Verwenden Sie als Nächstes die AWS Lambda-API, um eine Version zu veröffentlichen und einen Alias zu erstellen.

  • Verwenden Sie publish-version, um eine Funktionsversion zu veröffentlichen.

    aws lambda publish-version \ --function-name function-name \ --region aws-region
  • Verwenden Sie create-alias, um einen Alias zu erstellen, der auf die soeben veröffentlichte Version weist. Wir empfehlen, dass Sie Lambda-Funktionen nach Alias referenzieren, wenn Sie sie einer Greengrass-Gruppe hinzufügen.

    aws lambda create-alias \ --function-name function-name \ --name alias-name \ --function-version version-number \ --region aws-region
Anmerkung

Die AWS LambdaKonsole zeigt keine ausführbaren Lambda-Dateien an. Wenn Sie den Funktionscode aktualisieren, müssen Sie auch die AWS Lambda-API verwenden.

Fügen Sie dann die ausführbare Lambda-Datei zu einer Greengrass-Gruppe hinzu, konfigurieren Sie sie so, dass sie binäre Eingabedaten in ihren gruppenspezifischen Einstellungen akzeptiert, und stellen Sie die Gruppe bereit. Sie können dies in der AWS IoT Greengrass-Konsole oder mithilfe der AWS IoT Greengrass-API tun.