Ausführen von -AWS LambdaFunktionen - AWS IoT Greengrass

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 -AWS LambdaFunktionen

Anmerkung

AWS IoT Greengrass unterstützt diese Funktion derzeit nicht auf Windows-Core-Geräten.

Sie können AWS Lambda Funktionen als Komponenten importieren, die auf -AWS IoT GreengrassCore-Geräten ausgeführt werden. Sie können dies in den folgenden Fällen tun:

Lambda-Funktionen umfassen Abhängigkeiten von den folgenden Komponenten. Sie müssen diese Komponenten nicht als Abhängigkeiten definieren, wenn Sie die Funktion importieren. Wenn Sie die Lambda-Funktionskomponente bereitstellen, enthält die Bereitstellung diese Abhängigkeiten von Lambda-Komponenten.

Voraussetzungen

Ihre Core-Geräte und Lambda-Funktionen müssen die folgenden Anforderungen erfüllen, damit Sie die Funktionen auf der AWS IoT Greengrass Core-Software ausführen können:

  • Ihr Core-Gerät muss die Anforderungen für die Ausführung von Lambda-Funktionen erfüllen. Wenn Sie möchten, dass das Core-Gerät containerisierte Lambda-Funktionen ausführt, muss das Gerät die Anforderungen dafür erfüllen. Weitere Informationen finden Sie unter Anforderungen an die Lambda-Funktion.

  • Sie müssen die Programmiersprachen installieren, die die Lambda-Funktion auf Ihren -Core-Geräten verwendet.

    Tipp

    Sie können eine Komponente erstellen, die die Programmiersprache installiert, und diese Komponente dann als Abhängigkeit Ihrer Lambda-Funktionskomponente angeben. Greengrass unterstützt alle von Lambda unterstützten Versionen von Python-, Node.js- und Java-Laufzeiten. Greengrass wendet keine zusätzlichen Einschränkungen auf veraltete Lambda-Laufzeitversionen an. Sie können Lambda-Funktionen ausführen, die diese veralteten Laufzeiten auf verwendenAWS IoT Greengrass, aber Sie können sie nicht in erstellenAWS Lambda. Weitere Informationen zur AWS IoT Greengrass Unterstützung von Lambda-Laufzeiten finden Sie unter Ausführen von -AWS LambdaFunktionen.

Konfigurieren des Lebenszyklus von Lambda-Funktionen

Der Lebenszyklus der Greengrass-Lambda-Funktion bestimmt, wann eine Funktion gestartet wird und wie sie Container erstellt und verwendet. Der Lebenszyklus bestimmt auch, wie die AWS IoT Greengrass Core-Software Variablen und Vorverarbeitungslogik beibehält, die sich außerhalb des Funktionshandlers befinden.

AWS IoT Greengrass unterstützt On-Demand-Lebenszyklen (Standard) und langlebige Lebenszyklen:

  • On-Demand-Funktionen beginnen, wenn sie aufgerufen werden, und werden beendet, wenn keine Aufgaben mehr ausgeführt werden müssen. Jeder Aufruf der Funktion erstellt einen separaten Container, auch Sandbox genannt, um Aufrufe zu verarbeiten, es sei denn, ein vorhandener Container steht zur Wiederverwendung zur Verfügung. Jeder der Container kann Daten verarbeiten, die Sie an die Funktion senden.

    Mehrere Aufrufe einer On-Demand-Funktion können gleichzeitig ausgeführt werden.

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

  • Langlebige (oder angeheftete) Funktionen beginnen, wenn die AWS IoT Greengrass Core-Software gestartet wird und in einem einzigen Container ausgeführt wird. Derselbe Container verarbeitet alle Daten, die Sie an die Funktion senden.

    Mehrere Aufrufe werden in die Warteschlange gestellt, bis die AWS IoT Greengrass Core-Software frühere Aufrufe ausführt.

    Variablen und Vorverarbeitungslogik, die Sie außerhalb des Funktionshandlers definieren, werden für jeden Aufruf des Handlers beibehalten.

    Verwenden Sie langlebige Lambda-Funktionen, wenn Sie ohne anfängliche Eingabe mit der Arbeit beginnen müssen. Beispielsweise kann eine langlebige Funktion ein Machine-Learning-Modell laden und mit der Verarbeitung beginnen, damit es bereit ist, wenn die Funktion Gerätedaten empfängt.

    Anmerkung

    Langlebige Funktionen haben Timeouts, die jedem Aufruf ihres Handlers zugeordnet sind. Wenn Sie Code aufrufen möchten, der auf unbestimmte Zeit ausgeführt wird, müssen Sie ihn außerhalb des Handlers starten. Stellen Sie sicher, dass außerhalb des Handlers kein blockierender Code vorhanden ist, der die Initialisierung der Funktion verhindern könnte.

    Diese Funktionen werden ausgeführt, es sei denn, die AWS IoT Greengrass -Core-Software wird angehalten, z. B. während einer Bereitstellung oder eines Neustarts. Diese Funktionen werden nicht ausgeführt, wenn die Funktion auf eine unerkannte Ausnahme stößt, ihre Speicherlimits überschreitet oder in einen Fehlerstatus übergeht, z. B. ein Handler-Timeout.

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

Konfigurieren der Containerisierung von Lambda-Funktionen

Standardmäßig werden Lambda-Funktionen innerhalb eines -AWS IoT GreengrassContainers ausgeführt. Greengrass-Container bieten Isolation zwischen Ihren Funktionen und dem Host. Diese Isolierung erhöht die Sicherheit sowohl für den Host als auch für die Funktionen im Container.

Wir empfehlen Ihnen, Lambda-Funktionen in einem Greengrass-Container auszuführen, es sei denn, Ihr Anwendungsfall erfordert, dass sie ohne Containerisierung ausgeführt werden. Durch die Ausführung Ihrer Lambda-Funktionen in einem Greengrass-Container haben Sie mehr Kontrolle darüber, wie Sie den Zugriff auf -Ressourcen einschränken.

In den folgenden Fällen können Sie eine Lambda-Funktion ohne Containerisierung ausführen:

  • Sie möchten AWS IoT Greengrass auf einem Gerät ausführen, das den Containermodus nicht unterstützt. Ein Beispiel wäre, wenn Sie eine spezielle Linux-Distribution verwenden möchten oder eine frühere Kernelversion haben möchten, die veraltet ist.

  • Sie möchten Ihre Lambda-Funktion in einer anderen Container-Umgebung mit eigenem OverlayFS ausführen, aber es treten OverlayFS-Konflikte auf, wenn Sie in einem Greengrass-Container ausführen.

  • Sie benötigen Zugriff auf lokale Ressourcen mit Pfaden, die zum Zeitpunkt der Bereitstellung nicht bestimmt werden können oder deren Pfade sich nach der Bereitstellung ändern können. Ein Beispiel für diese Ressource wäre ein Pluggable-Gerät.

  • Sie haben eine frühere Anwendung, die als Prozess geschrieben wurde, und es treten Probleme auf, wenn Sie sie in einem Greengrass-Container ausführen.

Containerisierungsunterschiede
Containerisierung Hinweise

Greengrass-Container

  • Alle AWS IoT Greengrass Funktionen sind verfügbar, wenn Sie eine Lambda-Funktion in einem Greengrass-Container ausführen.

  • Lambda-Funktionen, die in einem Greengrass-Container ausgeführt werden, haben keinen Zugriff auf den bereitgestellten Code anderer Lambda-Funktionen, auch wenn sie mit derselben Systemgruppe ausgeführt werden. Mit anderen Worten, Ihre Lambda-Funktionen werden mit erhöhter Isolation ausgeführt.

  • Da die AWS IoT Greengrass Core-Software alle untergeordneten Prozesse im selben Container wie die Lambda-Funktion ausführt, werden die untergeordneten Prozesse beendet, wenn die Lambda-Funktion beendet wird.

Kein Container

  • Die folgenden Funktionen sind für nicht containerisierte Lambda-Funktionen nicht verfügbar:

    • Speicherlimits für Lambda-Funktionen.

    • Lokale Geräte- und Volume-Ressourcen Sie müssen auf diese Ressourcen über ihre Dateipfade auf dem Core-Gerät zugreifen und nicht als Lambda-Funktionsressourcen.

  • Wenn Ihre nicht containerisierte Lambda-Funktion auf eine Machine-Learning-Ressource zugreift, müssen Sie einen Ressourcenbesitzer identifizieren und Zugriffsberechtigungen für die Ressource festlegen, nicht für die Lambda-Funktion.

  • Nicht containerisierte Lambda-Funktionen haben schreibgeschützten Zugriff auf den bereitgestellten Code anderer Lambda-Funktionen, die mit derselben Systemgruppe ausgeführt werden.

Wenn Sie die Containerisierung für eine Lambda-Funktion bei der Bereitstellung ändern, funktioniert die Funktion möglicherweise nicht wie erwartet. Wenn die Lambda-Funktion lokale Ressourcen verwendet, die mit der neuen Containerisierungseinstellung nicht mehr verfügbar sind, schlägt die Bereitstellung fehl.

  • Wenn Sie eine Lambda-Funktion von der Ausführung in einem Greengrass-Container in die Ausführung ohne Containerisierung ändern, werden die Speicherlimits der Funktion verworfen. Sie müssen direkt auf das Dateisystem zugreifen, anstatt verknüpfte lokale Ressourcen zu verwenden. Sie müssen alle angefügten Ressourcen entfernen, bevor Sie die Lambda-Funktion bereitstellen.

  • Wenn Sie eine Lambda-Funktion von ohne Containerisierung in eine Ausführung in einem Container ändern, verliert Ihre Lambda-Funktion direkten Zugriff auf das Dateisystem. Sie müssen für jede Funktion ein Speicherlimit definieren oder das Standardspeicherlimit von 16 MB akzeptieren. Sie können diese Einstellungen für jede Lambda-Funktion konfigurieren, wenn Sie sie bereitstellen.

Um die Containerisierungseinstellungen für eine Lambda-Funktionskomponente zu ändern, legen Sie den Wert des containerMode Konfigurationsparameters bei der Bereitstellung der Komponente auf eine der folgenden Optionen fest.

  • NoContainer – Die Komponente wird nicht in einer isolierten Laufzeitumgebung ausgeführt.

  • GreengrassContainer – Die Komponente wird in einer isolierten Laufzeitumgebung innerhalb des AWS IoT Greengrass Containers ausgeführt.

Weitere Informationen zum Bereitstellen und Konfigurieren von Komponenten finden Sie unter Bereitstellen von AWS IoT Greengrass Komponenten auf Geräten und Komponentenkonfigurationen aktualisieren.