

Hinweis zum Ende des Supports: Am 7. Oktober 2026 AWS wird der Support für eingestellt. AWS IoT Greengrass Version 1 Nach dem 7. Oktober 2026 können Sie nicht mehr auf die Ressourcen zugreifen. AWS IoT Greengrass V1 Weitere Informationen finden Sie unter [Migrieren von AWS IoT Greengrass Version 1](https://docs.aws.amazon.com/greengrass/v2/developerguide/migrate-from-v1.html).

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.

# Führen Sie Lambda-Funktionen auf dem Kern aus AWS IoT Greengrass
<a name="lambda-functions"></a>

AWS IoT Greengrass bietet eine containerisierte Lambda-Laufzeitumgebung für benutzerdefinierten Code, in dem Sie schreiben. AWS Lambda Lambda-Funktionen, die für einen AWS IoT Greengrass Kern bereitgestellt werden, werden in der lokalen Lambda-Laufzeit des Kerns ausgeführt. Lokale Lambda-Funktionen können durch lokale Ereignisse, Nachrichten aus der Cloud und andere Quellen ausgelöst werden, wodurch lokale Rechenfunktionen auf Client-Geräten verfügbar sind. Sie können beispielsweise die Funktionen von Greengrass Lambda verwenden, um Gerätedaten zu filtern, bevor Sie die Daten in die Cloud übertragen.

Um eine Lambda-Funktion für einen Core bereitzustellen, fügen Sie die Funktion einer Greengrass-Gruppe hinzu (indem Sie auf die vorhandene Lambda-Funktion verweisen), gruppenspezifische Einstellungen für die Funktion konfigurieren und dann die Gruppe bereitstellen. Wenn die Funktion auf AWS Dienste zugreift, müssen Sie der [Greengrass-Gruppenrolle](group-role.md) auch alle erforderlichen Berechtigungen hinzufügen.

Sie können Parameter konfigurieren, die bestimmen, wie die Lambda-Funktionen ausgeführt werden, einschließlich Berechtigungen, Isolierung, Speicherbeschränkungen und mehr. Weitere Informationen finden Sie unter [Steuerung der Ausführung von Greengrass Lambda-Funktionen mithilfe einer gruppenspezifischen Konfiguration](lambda-group-config.md).

**Anmerkung**  
Diese Einstellungen ermöglichen auch die Ausführung AWS IoT Greengrass in einem Docker-Container. Weitere Informationen finden Sie unter [Wird AWS IoT Greengrass in einem Docker-Container ausgeführt](run-gg-in-docker-container.md).

In der folgenden Tabelle sind die unterstützten [AWS Lambda Laufzeiten](https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html) und die Versionen der AWS IoT Greengrass Core-Software aufgeführt, auf denen sie ausgeführt werden können.


****  

| Sprache oder Plattform | GGC-Version | 
| --- | --- | 
| Python 3.8 | 1.11 | 
| Python 3.7 | 1.9 oder höher | 
| Python 2.7 \$1 | 1.0 oder später | 
| Java 8 | 1.1 oder später | 
| Node.js 12.x \$1 | 1.10 oder später | 
| Node.js 8.10\$1 | 1.9 oder später | 
| Node.js 6.10\$1 | 1.1 oder später | 
| C, C\$1\$1 | 1.6 oder später | 

\$1 Sie können Lambda-Funktionen, die diese Laufzeiten verwenden, auf unterstützten Versionen von ausführen AWS IoT Greengrass, aber Sie können sie nicht darin erstellen. AWS Lambda Wenn sich die Laufzeit auf Ihrem Gerät von der für diese Funktion angegebenen AWS Lambda-Laufzeit unterscheidet, können Sie mithilfe von `FunctionRuntimeOverride` in `FunctionDefintionVersion` Ihre eigene Laufzeit wählen. Weitere Informationen finden Sie unter [CreateFunctionDefinition](https://docs.aws.amazon.com/greengrass/v1/apireference/createfunctiondefinition-post.html). Weitere Informationen zu unterstützten Laufzeiten finden Sie unter [Runtime-Supportrichtlinie](https://docs.aws.amazon.com/lambda/latest/dg/runtime-support-policy.html) im *AWS Lambda Entwicklerhandbuch*.

## SDKs für Greengrass Lambda-Funktionen
<a name="lambda-sdks"></a>

AWS stellt drei bereit SDKs , die von Greengrass Lambda-Funktionen verwendet werden können, die auf einem AWS IoT Greengrass Kern ausgeführt werden. Diese SDKs sind in verschiedenen Paketen enthalten, sodass Funktionen sie gleichzeitig verwenden können. Um ein SDK in einer Greengrass-Lambda-Funktion zu verwenden, nehmen Sie es in das Lambda-Funktions-Bereitstellungspaket auf, in das Sie hochladen. AWS Lambda

**AWS IoT Greengrass Kern-SDK**  <a name="lambda-sdks-core"></a>
Ermöglicht es lokalen Lambda-Funktionen, mit dem Kern zu interagieren, um:  <a name="gg-core-sdk-functionality"></a>
+ Tauschen Sie MQTT-Nachrichten aus mit. AWS IoT Core
+ Tauschen Sie MQTT-Nachrichten mit Konnektoren, 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](secrets.md).
+ Interagieren Sie mit dem [Stream-Manager](stream-manager.md).
AWS IoT Greengrass stellt das AWS IoT Greengrass Core SDK in den folgenden Sprachen und Plattformen zur Verfügung. GitHub  <a name="gg-core-sdk-download-list"></a>
+ [AWS IoT Greengrass Kern-SDK SDK for Java](https://github.com/aws/aws-greengrass-core-sdk-java/)
+ [AWS IoT Greengrass Kern-SDK für Node.js](https://github.com/aws/aws-greengrass-core-sdk-js/)
+ [AWS IoT Greengrass Kern-SDK für Python](https://github.com/aws/aws-greengrass-core-sdk-python/)
+ [AWS IoT Greengrass Kern-SDK für C](https://github.com/aws/aws-greengrass-core-sdk-c/)
Um die AWS IoT Greengrass Core-SDK-Abhängigkeit in das Lambda-Funktionsbereitstellungspaket aufzunehmen:  

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

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

1. Nehmen Sie es `greengrasssdk` in das Lambda-Funktionsbereitstellungspaket auf, das Ihren Funktionscode enthält. Dies ist das Paket, in das Sie hochladen, AWS Lambda wenn Sie die Lambda-Funktion erstellen.
   
 **StreamManagerClient**  
Nur der folgende AWS IoT Greengrass Core SDKs kann für [Stream Manager-Operationen](stream-manager.md) verwendet werden:  <a name="streammanagerclient-sdk-versions"></a>
+ 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, die in Ihre Python-Lambda-Funktionspakete aufgenommen werden sollen:  <a name="python-sdk-dependencies-stream-manager"></a>

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

1. 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 Sie das AWS IoT Greengrass Core SDK für Python auf dem Core-Gerät**  
Wenn Sie Python-Lambda-Funktionen ausführen, können Sie es auch verwenden, [https://pypi.org/project/pip/](https://pypi.org/project/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 Lambda-Funktionsbereitstellungspaket aufzunehmen. Weitere Informationen finden Sie unter [greengrasssdk](https://pypi.org/project/greengrasssdk/).  
Diese Unterstützung ist für Cores mit Größenbeschränkungen vorgesehen. Wir empfehlen, dass Sie das SDK nach Möglichkeit in Ihre Lambda-Funktions-Deployment-Pakete aufnehmen.  
 

**AWS IoT Greengrass SDK für Machine Learning**  <a name="lambda-sdks-ml"></a>
Ermöglicht es lokalen Lambda-Funktionen, Modelle für maschinelles Lernen (ML) zu nutzen, die als ML-Ressourcen auf dem Greengrass-Kern bereitgestellt werden. Lambda-Funktionen können das SDK verwenden, um einen lokalen Inferenzdienst aufzurufen und mit ihm zu interagieren, der als Konnektor im Core 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](image-classification-connector.md), [Anschluss zur ML-Objekterkennung](obj-detection-connector.md) und [ML Feedback-Anschluss](ml-feedback-connector.md).  
In der folgenden Tabelle sind 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.    
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/greengrass/v1/developerguide/lambda-functions.html)
Informationen zum Download finden Sie unter [AWS IoT Greengrass ML SDK-Software](what-is-gg.md#gg-ml-sdk-download).

**AWS SDKs**  <a name="lambda-sdks-aws"></a>
Ermöglicht lokalen Lambda-Funktionen direkte Aufrufe von AWS Diensten wie Amazon S3, DynamoDB und AWS IoT. AWS 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. Die Funktionen von Greengrass Lambda können nicht mit Cloud-Diensten kommunizieren, wenn der Kern offline ist.  
Laden Sie das AWS SDKs aus dem [Getting Started Resource Center](https://aws.amazon.com/getting-started/tools-sdks/) herunter.

Weitere Informationen zum Erstellen eines Bereitstellungspakets finden Sie [Eine Lambda-Funktion erstellen und verpacken](create-lambda.md) im Tutorial Erste Schritte oder unter [Erstellen eines Bereitstellungspakets](https://docs.aws.amazon.com/lambda/latest/dg/deployment-package-v2.html) im *AWS Lambda Entwicklerhandbuch*.

### Migration von Cloud-basierten Lambda-Funktionen
<a name="lambda-migrate-sdks"></a>

Das AWS IoT Greengrass Core SDK folgt dem AWS SDK-Programmiermodell, das es einfach macht, Lambda-Funktionen, die für die Cloud entwickelt wurden, auf Lambda-Funktionen zu portieren, die auf einem AWS IoT Greengrass Core ausgeführt werden.

Die folgende Python-Lambda-Funktion verwendet beispielsweise die AWS SDK für 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 Greengrass Kern zu portieren, ändern Sie in der `import` Anweisung und der `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](gg-core.md#message-quality-of-service).

Die Ähnlichkeit zwischen den Programmiermodellen ermöglicht es Ihnen auch, Ihre Lambda-Funktionen in der Cloud zu entwickeln und sie dann AWS IoT Greengrass mit minimalem Aufwand dorthin zu migrieren. [Ausführbare Lambda-Dateien](#lambda-executables) 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.

## Lambda-Funktionen nach Alias oder Version referenzieren
<a name="lambda-versions-aliases"></a>

Greengrass-Gruppen können eine Lambda-Funktion nach Alias (empfohlen) oder nach 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 einfach mit dem Alias auf die neue Funktionsversion. Aliase werden bei der Gruppenbereitstellung zu 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 **\$1LATEST-Versionen**. **\$1LATEST-Versionen** sind nicht an unveränderliche, veröffentlichte Funktionsversionen gebunden und können jederzeit geändert werden, was dem Prinzip der AWS IoT Greengrass Versionsunveränderlichkeit widerspricht.

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

# Steuerung der Ausführung von Greengrass Lambda-Funktionen mithilfe einer gruppenspezifischen Konfiguration
<a name="lambda-group-config"></a>

AWS IoT Greengrass bietet Cloud-basiertes Management von Greengrass Lambda-Funktionen. Obwohl der Code und die Abhängigkeiten einer Lambda-Funktion mithilfe verwaltet werden, können Sie konfigurieren AWS Lambda, wie sich die Lambda-Funktion verhält, wenn sie in einer Greengrass-Gruppe ausgeführt wird.

## Gruppenspezifische Konfigurationseinstellungen
<a name="lambda-group-config-properties"></a>

AWS IoT Greengrass bietet die folgenden gruppenspezifischen Konfigurationseinstellungen für Greengrass Lambda-Funktionen.

**Systembenutzer und Gruppe**  <a name="lambda-access-identity"></a>
Die Zugriffsidentität, die zum Ausführen einer Lambda-Funktion verwendet wird. Standardmäßig werden Lambda-Funktionen als [Standardzugriffsidentität](#lambda-access-identity-groupsettings) der Gruppe ausgeführt. In der Regel ist dies das standardmäßige AWS IoT Greengrass -Systemkonto (ggc\$1user und ggc\$1group). Sie können die Einstellung ändern und die Benutzer-ID und Gruppen-ID auswählen, die über die für die Ausführung der Lambda-Funktion erforderlichen Berechtigungen verfügen. Sie können sowohl die UID als auch die GID oder durch Leerlassen eines der Felder nur eine davon überschreiben. Diese Einstellung bietet Ihnen eine genauere Kontrolle über den Zugriff auf Geräte-Ressourcen. Wir empfehlen Ihnen, Ihre Greengrass-Hardware mit entsprechenden Ressourcenlimits, Dateiberechtigungen und Festplattenkontingenten für die Benutzer und Gruppen zu konfigurieren, deren Berechtigungen zur Ausführung von Lambda-Funktionen verwendet werden.  
Diese Funktion ist für AWS IoT Greengrass Core v1.7 und höher verfügbar.  
Wir empfehlen, Lambda-Funktionen nicht als Root auszuführen, sofern dies nicht unbedingt erforderlich ist. Die Ausführung als Root erhöht die folgenden Risiken:  
+ Das Risiko unbeabsichtigter Änderungen, wie z. B. das versehentliche Löschen einer wichtigen Datei.
+ Das Risiko für Ihre Daten und Ihr Gerät durch böswillige Personen.
+ Das Risiko von Containern entgeht, wenn Docker-Container mit `--net=host` und ausgeführt werden. `UID=EUID=0`
Wenn Sie die Ausführung als Root ausführen müssen, müssen Sie die AWS IoT Greengrass Konfiguration aktualisieren, um sie zu aktivieren. Weitere Informationen finden Sie unter [Eine Lambda-Funktion als Root ausführen](#lambda-running-as-root).  
**Systembenutzer-ID (Nummer)**  
Die Benutzer-ID für den Benutzer, der über die erforderlichen Berechtigungen verfügt, um die Lambda-Funktion auszuführen. Diese Einstellung ist nur verfügbar, wenn Sie die Ausführung mit **einer anderen Benutzer-ID/Gruppen-ID** auswählen. Sie können den **getent passwd** Befehl auf Ihrem AWS IoT Greengrass Core-Gerät verwenden, um die Benutzer-ID nachzuschlagen, die Sie zum Ausführen der Lambda-Funktion verwenden möchten.  
Wenn Sie dieselbe UID verwenden, um Prozesse und die Lambda-Funktion auf einem Greengrass-Core-Gerät auszuführen, kann Ihre Greengrass-Gruppenrolle den Prozessen temporäre Anmeldeinformationen gewähren. Die Prozesse können die temporären Anmeldeinformationen in allen Greengrass-Kernbereitstellungen verwenden.  
**Systemgruppen-ID (Nummer)**  
Die Gruppen-ID für die Gruppe, die über die erforderlichen Berechtigungen verfügt, um die Lambda-Funktion auszuführen. Diese Einstellung ist nur verfügbar, wenn Sie die Ausführung mit **einer anderen ID/group Benutzer-ID** auswählen. Sie können den **getent group** Befehl auf Ihrem AWS IoT Greengrass Core-Gerät verwenden, um die Gruppen-ID nachzuschlagen, die Sie zum Ausführen der Lambda-Funktion verwenden möchten.

**Containerisierung der Lambda-Funktion**  <a name="lambda-function-containerization"></a>
Wählen Sie aus, ob die Lambda-Funktion mit der Standardcontainerisierung für die Gruppe ausgeführt wird, oder geben Sie die Containerisierung an, die immer für diese Lambda-Funktion verwendet werden soll.  
Der Containerisierungsmodus einer Lambda-Funktion bestimmt ihren Isolationsgrad.  
+ Containerisierte Lambda-Funktionen werden im **Greengrass-Container-Modus** ausgeführt. Die Lambda-Funktion wird in einer isolierten Laufzeitumgebung (oder einem Namespace) innerhalb des AWS IoT Greengrass Containers ausgeführt.
+ **Nicht containerisierte Lambda-Funktionen werden im Modus Kein Container ausgeführt.** Die Lambda-Funktionen laufen als regulärer Linux-Prozess ohne jegliche Isolierung.
Diese Funktion ist für AWS IoT Greengrass Core v1.7 und höher verfügbar.  
Wir empfehlen, dass Sie Lambda-Funktionen in einem Greengrass-Container ausführen, es sei denn, Ihr Anwendungsfall erfordert, dass sie ohne Containerisierung ausgeführt werden. Wenn Ihre Lambda-Funktionen in einem Greengrass-Container ausgeführt werden, können Sie angehängte lokale Ressourcen und Geräteressourcen nutzen und von den Vorteilen der Isolierung und erhöhten Sicherheit profitieren. Bevor Sie die Containerisierung ändern, schlagen Sie unter [Überlegungen bei der Wahl der Containerisierung von Lambda-Funktionen](#lambda-containerization-considerations) nach.  
Damit Sie ohne Aktivierung Ihres Gerätekernel-Namespace und Ihrer Cgroup ausgeführt werden können, müssen alle Ihre Lambda-Funktionen ohne Containerisierung ausgeführt werden. Sie können dies leicht erreichen, indem Sie für die Gruppe die Standardeinstellung der Containerisierung festlegen. Weitere Informationen finden Sie unter [Standardcontainerisierung für Lambda-Funktionen in einer Gruppe festlegen](#lambda-containerization-groupsettings).

**Speicherlimit**  
Die Speicherzuweisung für die Funktion. Der Standardwert ist 16 MB.  
Die Einstellung für das Speicherlimit ist nicht mehr verfügbar, wenn Sie die Lambda-Funktion so ändern, dass sie ohne Containerisierung ausgeführt wird. Lambda-Funktionen, die ohne Containerisierung ausgeführt werden, haben kein Speicherlimit. Die Einstellung für das Speicherlimit wird verworfen, wenn Sie die Standardeinstellung für die Containerisierung der Lambda-Funktion oder Gruppe so ändern, dass sie ohne Containerisierung ausgeführt wird.

**Timeout (Zeitüberschreitung)**  
Die Dauer vor Beendigung der Funktion oder Anforderung. Der Standardwert ist 3 Sekunden.

**Angeheftet**  
Ein Lambda-Funktionslebenszyklus kann *bedarfsgerecht* oder *langlebig* sein. Die Standardeinstellung ist „On-Demand“.  
Eine On-Demand-Lambda-Funktion startet in einem neuen oder wiederverwendeten Container, wenn sie aufgerufen wird. Anforderungen an die Funktion werden möglicherweise von allen verfügbaren Containern verarbeitet. Eine langlebige — oder *fixierte* — Lambda-Funktion wird nach dem Start automatisch AWS IoT Greengrass gestartet und läuft weiterhin in ihrem eigenen Container (oder Sandbox). Alle Anforderungen an die Funktion werden vom gleichen Container verarbeitet. Weitere Informationen finden Sie unter [Lebenszykluskonfiguration für Greengrass Lambda-Funktionen](lambda-functions.md#lambda-lifecycle).

**Lesezugriff auf das /sys-Verzeichnis**  
Ob die Funktion auf den /sys-Ordner des Hosts zugreifen kann. Verwenden Sie diese Einstellung, wenn die Funktion Geräteinformationen aus /sys lesen muss. Der Standardwert lautet „false“.  
Diese Einstellung ist nicht verfügbar, wenn Sie eine Lambda-Funktion ohne Containerisierung ausführen. Der Wert dieser Einstellung wird verworfen, wenn Sie die Lambda-Funktion so ändern, dass sie ohne Containerisierung ausgeführt wird.

**Art der Kodierung**  
Der erwartete Kodierungstyp der Eingabenutzlast für die Funktion: JSON oder Binär. Der Standardwert ist JSON.  
Support für den binären Kodierungstyp ist ab AWS IoT Greengrass Core Software v1.5.0 und AWS IoT Greengrass Core SDK v1.1.0 verfügbar. Bei Funktionen die bei der Gerätedaten interagieren, kann es nützlich sein, binäre Eingabedaten zu akzeptieren, da es die eingeschränkten Hardware-Funktionen von Geräten oft schwierig oder gar unmöglich machen, einen JSON-Datentyp zu erstellen.  
[Ausführbare Lambda-Dateien](lambda-functions.md#lambda-executables) unterstützen nur den binären Kodierungstyp, nicht JSON.

**Prozessargumente**  
Die Befehlszeilenargumente werden an die Lambda-Funktion übergeben, wenn sie ausgeführt wird.

**Umgebungsvariablen**  
Schlüssel-Wert-Paare, die Einstellungen dynamisch an Funktionscode und -bibliotheken übergeben. Lokale Umgebungsvariablen funktionieren auf die gleiche Weise wie [AWS Lambda -Funktionsumgebungsvariablen](https://docs.aws.amazon.com/lambda/latest/dg/env_variables.html), sind aber in der Core-Umgebung verfügbar.

**Resource access policies** (Richtlinien für Ressourcenzugriff)  
Eine Liste mit bis zu 10 [lokalen Ressourcen](access-local-resources.md), [geheimen Ressourcen und Ressourcen](secrets.md) für [maschinelles Lernen](ml-inference.md), auf die die Lambda-Funktion zugreifen darf, sowie der entsprechenden `read-only` `read-write` OR-Berechtigung. In der Konsole werden diese *verbundenen* Ressourcen auf der Gruppenkonfigurationsseite auf der Registerkarte **Ressourcen** aufgeführt.  
Der [Containerisierungsmodus](#lambda-function-containerization) beeinflusst, wie Lambda-Funktionen auf lokale Geräte- und Volume-Ressourcen sowie auf Ressourcen für maschinelles Lernen zugreifen können.  
+ Lambda-Funktionen, die nicht containerisiert sind, müssen direkt über das Dateisystem auf dem Kerngerät auf lokale Geräte- und Volume-Ressourcen zugreifen.
+ Um nicht containerisierten Lambda-Funktionen den Zugriff auf maschinelle Lernressourcen in der Greengrass-Gruppe zu ermöglichen, müssen Sie die Eigenschaften Ressourcenbesitzer und Zugriffsberechtigungen für die maschinelle Lernressource festlegen. Weitere Informationen finden Sie unter [Greifen Sie über Lambda-Funktionen auf Ressourcen für maschinelles Lernen zu](access-ml-resources.md).

*Informationen zur Verwendung der AWS IoT Greengrass API zum Festlegen gruppenspezifischer Konfigurationseinstellungen für benutzerdefinierte Lambda-Funktionen finden Sie [CreateFunctionDefinition](https://docs.aws.amazon.com/greengrass/v1/apireference/createfunctiondefinition-post.html)in der *AWS IoT Greengrass Version 1 API-Referenz oder [create-function-definition](https://docs.aws.amazon.com/cli/latest/reference/greengrass/create-function-definition.html)in der Befehlsreferenz.*AWS CLI * Um Lambda-Funktionen auf einem Greengrass-Kern bereitzustellen, erstellen Sie eine Funktionsdefinitionsversion, die Ihre Funktionen enthält, erstellen Sie eine Gruppenversion, die auf die Funktionsdefinitionsversion und andere Gruppenkomponenten verweist, und [stellen Sie dann die](deployments.md) Gruppe bereit.

## Eine Lambda-Funktion als Root ausführen
<a name="lambda-running-as-root"></a>

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

Bevor Sie eine oder mehrere Lambda-Funktionen als Root ausführen können, müssen Sie zuerst die AWS IoT Greengrass Konfiguration aktualisieren, um die Unterstützung zu aktivieren. Die Support für die Ausführung von Lambda-Funktionen als Root ist standardmäßig deaktiviert. Die Bereitstellung schlägt fehl, wenn Sie versuchen, eine Lambda-Funktion bereitzustellen und sie als Root (UID und GID von 0) auszuführen, und Sie die Konfiguration nicht aktualisiert haben. AWS IoT Greengrass Im Laufzeitprotokoll (*greengrass\$1root*/ggc/var/log/system/runtime.log) wird ein Fehler wie der folgende angezeigt:

```
lambda(s)
[list of function arns] are configured to run as root while Greengrass is not configured to run lambdas with root permissions
```

**Wichtig**  
Wir empfehlen, Lambda-Funktionen nicht als Root auszuführen, sofern dies nicht unbedingt erforderlich ist. Die Ausführung als Root erhöht die folgenden Risiken:  
Das Risiko unbeabsichtigter Änderungen, wie z. B. das versehentliche Löschen einer wichtigen Datei.
Das Risiko für Ihre Daten und Ihr Gerät durch böswillige Personen.
Das Risiko von Containern entgeht, wenn Docker-Container mit `--net=host` und ausgeführt werden. `UID=EUID=0`

**Um zu ermöglichen, dass Lambda-Funktionen als Root ausgeführt werden**

1. Navigieren Sie auf Ihrem AWS IoT Greengrass Gerät zum Ordner *greengrass-root* /config.
**Anmerkung**  
Standardmäßig *greengrass-root* ist dies das Verzeichnis /greengrass.

1. Bearbeiten Sie die Datei config.json, indem Sie `"allowFunctionsToRunAsRoot" : "yes"` zum Feld `runtime` hinzufügen. Beispiel:

   ```
   {
     "coreThing" : {
       ...
     },
     "runtime" : {
       ...
       "allowFunctionsToRunAsRoot" : "yes"
     },
     ...
   }
   ```

1. Verwenden Sie die folgenden Befehle, um neu zu starten: AWS IoT Greengrass

   ```
   cd /greengrass/ggc/core
   sudo ./greengrassd restart
   ```

   Jetzt können Sie die Benutzer-ID und Gruppen-ID (UID/GID) von Lambda-Funktionen auf 0 setzen, um diese Lambda-Funktion als Root auszuführen.

Sie können den Wert von `"allowFunctionsToRunAsRoot"` to ändern `"no"` und neu starten, AWS IoT Greengrass wenn Sie verhindern möchten, dass Lambda-Funktionen als Root ausgeführt werden.

## Überlegungen bei der Wahl der Containerisierung von Lambda-Funktionen
<a name="lambda-containerization-considerations"></a>

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

Standardmäßig werden Lambda-Funktionen in einem AWS IoT Greengrass Container ausgeführt. Dieser Container schafft eine Isolierung zwischen Ihren Funktionen und dem Host und bietet zusätzliche Sicherheit sowohl für den Host als auch für die Funktionen im Container.

Wir empfehlen, dass Sie Lambda-Funktionen in einem Greengrass-Container ausführen, es sei denn, Ihr Anwendungsfall erfordert, dass sie ohne Containerisierung ausgeführt werden. Wenn Sie Ihre Lambda-Funktionen in einem Greengrass-Container ausführen, haben Sie mehr Kontrolle über die Beschränkung des Zugriffs auf Ressourcen.

Es folgen einige Beispiel-Anwendungsfälle für die Ausführung ohne Containerisierung:
+ Sie möchten AWS IoT Greengrass auf einem Gerät laufen, das den Container-Modus nicht unterstützt (z. B. weil Sie eine spezielle Linux-Distribution verwenden oder eine zu alte Kernelversion haben).
+ Sie möchten Ihre Lambda-Funktion in einer anderen Containerumgebung mit eigenem OverlayFS ausführen, stoßen aber bei der Ausführung in einem Greengrass-Container auf OverlayFS-Konflikte.
+ Sie benötigen Zugriff auf lokale Ressourcen, deren Pfade zum Zeitpunkt der Bereitstellung nicht bestimmt werden oder sich nach der Bereitstellung ändern können, wie z. B. Plug-In-Geräte.
+ Sie haben eine Legacy-Anwendung, die als Prozess geschrieben wurde, und bei der Ausführung als containerisierte Lambda-Funktion sind Probleme aufgetreten.


**Containerisierungsunterschiede**  

| Containerisierung | Hinweise | 
| --- | --- | 
| Greengrass-Container | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/greengrass/v1/developerguide/lambda-group-config.html) | 
| Kein Container | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/greengrass/v1/developerguide/lambda-group-config.html) | 

**Anmerkung**  
Die Standardeinstellung für Containerisierung für die Greengrass-Gruppe gilt nicht für [Konnektoren](connectors.md).

Das Ändern der Containerisierung für eine Lambda-Funktion kann zu Problemen bei der Bereitstellung führen. Wenn Sie Ihrer Lambda-Funktion lokale Ressourcen zugewiesen haben, die mit Ihren neuen Containerisierungseinstellungen nicht mehr verfügbar sind, schlägt die Bereitstellung fehl.
+ Wenn Sie ändern, dass eine Lambda-Funktion nicht mehr in einem Greengrass-Container ausgeführt wird, sondern ohne Containerisierung ausgeführt wird, werden die Speicherlimits für die Funktion verworfen. Sie müssen direkt auf das Dateisystem zugreifen, anstatt verknüpfte lokale Ressourcen zu verwenden. Vor der Bereitstellung müssen Sie alle verknüpften Ressourcen entfernen.
+ Wenn Sie eine Lambda-Funktion von der Ausführung ohne Containerisierung auf die Ausführung in einem Container ändern, verliert Ihre Lambda-Funktion den direkten Zugriff auf das Dateisystem. Sie müssen für jede Funktion ein Speicherlimit definieren oder den Standard 16 MB übernehmen. Sie können diese Einstellungen für jede Lambda-Funktion vor der Bereitstellung konfigurieren.<a name="change-containerization-lambda"></a>

**So ändern Sie die Containerisierungseinstellungen für eine Lambda-Funktion**

1. <a name="console-gg-groups"></a>Erweitern Sie im Navigationsbereich der AWS IoT Konsole unter **Verwalten** die Option **Greengrass-Geräte** und wählen Sie dann **Gruppen (V1)** aus.

1. <a name="lambda-choose-group"></a>Wählen Sie die Gruppe aus, die die Lambda-Funktion enthält, deren Einstellungen Sie ändern möchten.

1. <a name="lambda-choose-lambdas"></a>Wählen Sie die Registerkarte **Lambda-Funktionen**.

1. <a name="lambda-edit-lambda"></a>Wählen Sie in der Lambda-Funktion, die Sie ändern möchten, die Ellipse (**...**) und dann Konfiguration **bearbeiten** aus.

1. Ändern Sie die Containerisierungseinstellungen. Wenn Sie die Lambda-Funktion für die Ausführung in einem Greengrass-Container konfigurieren, müssen Sie auch das **Speicherlimit** und den **Lesezugriff auf das Verzeichnis /sys** festlegen.

1. <a name="lambda-save-changes"></a>Wählen Sie **Speichern** und dann **Bestätigen**, um die Änderungen an Ihrer Lambda-Funktion zu speichern.

Die Änderungen werden wirksam, wenn die Gruppe bereitgestellt wird.

Sie können auch das [CreateFunctionDefinition](https://docs.aws.amazon.com/greengrass/v1/apireference/createfunctiondefinition-post.html)und [CreateFunctionDefinitionVersion](https://docs.aws.amazon.com/greengrass/v1/apireference/createfunctiondefinitionversion-post.html)in der *AWS IoT Greengrass API-Referenz* verwenden. Wenn Sie die Containerisierungseinstellung ändern, müssen Sie auch die anderen Parameter aktualisieren. Wenn Sie beispielsweise von der Ausführung einer Lambda-Funktion in einem Greengrass-Container zur Ausführung ohne Containerisierung wechseln, müssen Sie den Parameter löschen. `MemorySize`

### Bestimmen der von Ihrem Greengrass-Gerät unterstützten Isolierungsmodi
<a name="dependency-checker-tests-isolation"></a>

Sie können die AWS IoT Greengrass Abhängigkeitsprüfung verwenden, um festzustellen, welche Isolationsmodi ( container/no Greengrass-Container) von Ihrem Greengrass-Gerät unterstützt werden.

**Um die Abhängigkeitsprüfung auszuführen AWS IoT Greengrass**

1. [Laden Sie den AWS IoT Greengrass Abhängigkeitsprüfer aus dem Repository herunter und führen Sie ihn aus. GitHub](https://github.com/aws-samples/aws-greengrass-samples)

   ```
   wget https://github.com/aws-samples/aws-greengrass-samples/raw/master/greengrass-dependency-checker-GGCv1.11.x.zip
   unzip greengrass-dependency-checker-GGCv1.11.x.zip
   cd greengrass-dependency-checker-GGCv1.11.x
   sudo modprobe configs
   sudo ./check_ggc_dependencies | more
   ```

1. Wenn `more` erscheint, drücken Sie die Spacebar-Taste, um eine weitere Textseite anzuzeigen.

Weitere Information zum Befehl **modprobe** erhalten Sie, wenn Sie **man modprobe** im Terminal ausführen. 

## Einstellung der Standardzugriffsidentität für Lambda-Funktionen in einer Gruppe
<a name="lambda-access-identity-groupsettings"></a>

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

Für mehr Kontrolle über den Zugriff auf Geräteressourcen können Sie die Standardzugriffsidentität konfigurieren, die für die Ausführung von Lambda-Funktionen in der Gruppe verwendet wird. Diese Einstellung bestimmt die Standardberechtigungen, die Ihren Lambda-Funktionen erteilt werden, wenn sie auf dem Kerngerät ausgeführt werden. Um die Einstellung für einzelne Funktionen in der Gruppe zu überschreiben, können Sie die **Run as (Ausführen als)**-Eigenschaft der Gruppe verwenden. Weitere Informationen hierzu finden Sie unter [Run as (Ausführen als)](#lambda-access-identity).

Diese Einstellung auf Gruppenebene wird auch für die Ausführung der zugrunde liegenden AWS IoT Greengrass Core-Software verwendet. Dies besteht aus Lambda-Systemfunktionen, die Vorgänge wie Nachrichtenweiterleitung, lokale Schattensynchronisierung und automatische IP-Adresserkennung verwalten.

Die Standardzugriffsidentität kann so konfiguriert werden, dass sie als AWS IoT Greengrass Standardsystemkonten (ggc\$1user und ggc\$1group) ausgeführt wird oder die Berechtigungen eines anderen Benutzers oder einer anderen Gruppe verwendet. Wir empfehlen Ihnen, Ihre Greengrass-Hardware mit entsprechenden Ressourcenlimits, Dateiberechtigungen und Festplattenkontingenten für alle Benutzer und Gruppen zu konfigurieren, deren Berechtigungen zur Ausführung von benutzerdefinierten Lambda-Funktionen oder System-Lambda-Funktionen verwendet werden.

**Um die Standardzugriffsidentität für Ihre Gruppe zu ändern AWS IoT Greengrass**

1. <a name="console-gg-groups"></a>Erweitern Sie im Navigationsbereich der AWS IoT Konsole unter **Verwalten** die Option **Greengrass-Geräte** und wählen Sie dann **Gruppen (V1)** aus.

1. <a name="group-choose-group"></a>Wählen Sie die Gruppe aus, deren Einstellungen Sie ändern möchten.

1. **Wählen Sie die Registerkarte **Lambda-Funktionen** und wählen Sie im Abschnitt **Standardlaufzeitumgebung für Lambda-Funktionen** die Option Bearbeiten aus.**

1. Wählen Sie auf der Seite **Standard-Laufzeitumgebung für Lambda-Funktionen bearbeiten** unter **Standardsystembenutzer und -gruppe die Option **Andere Benutzer-ID/Gruppen-ID**** aus.

   Wenn Sie diese Option wählen, werden die Felder **Systembenutzer-ID (Nummer)** und **Systemgruppen-ID (Nummer) angezeigt.**

1. Geben Sie eine Benutzer-ID, eine Gruppen-ID oder beides ein. Wenn Sie ein Feld leer lassen, wird das entsprechende Greengrass-Systemkonto (ggc\$1user oder ggc\$1group) verwendet.
   + Geben Sie unter **Systembenutzer-ID (Nummer)** die Benutzer-ID für den Benutzer ein, der über die Berechtigungen verfügt, die Sie standardmäßig zum Ausführen von Lambda-Funktionen in der Gruppe verwenden möchten. Mit dem Befehl **getent passwd** auf Ihrem AWS IoT Greengrass -Gerät können Sie die Benutzer-ID abrufen.
   + Geben Sie unter **Systemgruppen-ID (Nummer)** die Gruppen-ID für die Gruppe ein, die über die Berechtigungen verfügt, die Sie standardmäßig zum Ausführen von Lambda-Funktionen in der Gruppe verwenden möchten. Mit dem Befehl **getent group** auf Ihrem AWS IoT Greengrass -Gerät können Sie die Gruppen-ID abrufen.
**Wichtig**  
Die Ausführung als Root-Benutzer erhöht die Risiken für Ihre Daten und Geräte. Nicht als Root-Benutzer (UID/GID = 0) ausführen, sofern es Ihr Business Case nicht erfordert. Weitere Informationen finden Sie unter [Eine Lambda-Funktion als Root ausführen](#lambda-running-as-root).

Die Änderungen werden wirksam, wenn die Gruppe bereitgestellt wird.

## Standardcontainerisierung für Lambda-Funktionen in einer Gruppe festlegen
<a name="lambda-containerization-groupsettings"></a>

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

Die Containerisierungseinstellung für eine Greengrass-Gruppe bestimmt die Standardcontainerisierung für die Lambda-Funktionen in der Gruppe.
+ Im **Greengrass-Container-Modus** werden Lambda-Funktionen standardmäßig in einer isolierten Laufzeitumgebung innerhalb des AWS IoT Greengrass Containers ausgeführt.
+ Im Modus **Kein Container** werden Lambda-Funktionen standardmäßig als reguläre Linux-Prozesse ausgeführt.

Sie können Gruppeneinstellungen ändern, um die Standardcontainerisierung für Lambda-Funktionen in der Gruppe anzugeben. Sie können diese Einstellung für eine oder mehrere Lambda-Funktionen in der Gruppe überschreiben, wenn Sie möchten, dass die Lambda-Funktionen mit einer anderen Containerisierung als der Gruppenstandardeinstellung ausgeführt werden. Bevor Sie die Containerisierungseinstellungen ändern, schlagen Sie unter [Überlegungen bei der Wahl der Containerisierung von Lambda-Funktionen](#lambda-containerization-considerations) nach.

**Wichtig**  
Wenn Sie die Standardcontainerisierung für die Gruppe ändern möchten, aber über eine oder mehrere Funktionen verfügen, die eine andere Containerisierung verwenden, ändern Sie die Einstellungen für die Lambda-Funktionen, bevor Sie die Gruppeneinstellung ändern. Wenn Sie zuerst die Containerisierungseinstellung der Gruppe ändern, werden die Werte für die Einstellungen **Speicherlimit** und **Lesezugriff auf das /sys-Verzeichnis** verworfen.

**Um die Containerisierungseinstellungen für Ihre Gruppe zu ändern AWS IoT Greengrass**

1. <a name="console-gg-groups"></a>Erweitern Sie im Navigationsbereich der AWS IoT Konsole unter **Verwalten** die Option **Greengrass-Geräte** und wählen Sie dann **Gruppen (V1)** aus.

1. <a name="group-choose-group"></a>Wählen Sie die Gruppe aus, deren Einstellungen Sie ändern möchten.

1. Wählen Sie die Registerkarte **Lambda-Funktionen**.

1. Wählen Sie unter **Standard-Laufzeitumgebung für Lambda-Funktionen** die Option **Bearbeiten** aus.

1. Ändern Sie auf der Seite **Standard-Lambda-Funktions-Laufzeitumgebung bearbeiten** unter **Standardcontainerisierung von Lambda-Funktionen die Einstellung für die Containerisierung**.

1. Wählen Sie **Speichern**.

Die Änderungen werden wirksam, wenn die Gruppe bereitgestellt wird.

## Kommunikationsflüsse für Greengrass Lambda-Funktionen
<a name="lambda-communication"></a>

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

### Kommunikation über MQTT-Nachrichten
<a name="lambda-messages"></a>

Lambda-Funktionen können MQTT-Nachrichten mithilfe eines Publish-Subscribe-Musters senden und empfangen, das durch Abonnements gesteuert wird.

Dieser Kommunikationsfluss 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](gg-sec.md#gg-msg-workflow).

**Anmerkung**  
Wenn der Core offline ist, können die Funktionen von Greengrass Lambda Nachrichten mit Client-Geräten, Konnektoren, anderen Funktionen und lokalen Shadows austauschen, aber Nachrichten an AWS IoT werden in die Warteschlange gestellt. Weitere Informationen finden Sie unter [MQTT-Nachrichtenwarteschlange für Cloud-Ziele](gg-core.md#mqtt-message-queue).

### Andere Kommunikationsströme
<a name="lambda-other-communication"></a>
+ Um mit lokalen Geräte- und Volumenressourcen sowie Modellen für maschinelles Lernen auf einem Kerngerät zu interagieren, verwenden die Funktionen von Greengrass Lambda plattformspezifische Betriebssystemschnittstellen. Beispielsweise können Sie die `open`-Methode im [os](https://docs.python.org/2/library/os.html)-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 und. [Greifen Sie mit Lambda-Funktionen und Konnektoren auf lokale Ressourcen zu](access-local-resources.md) [Zugreifen auf Ressourcen für maschinelles Lernen über den Lambda-Funktionscode](access-ml-resources.md#access-resource-function-code)
**Anmerkung**  
Wenn Sie Ihre Lambda-Funktion ohne Containerisierung ausführen, können Sie keine angeschlossenen 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 AWS Diensten zu kommunizieren. Weitere Informationen finden Sie unter [AWS SDK](#aws-sdk).
+ Lambda-Funktionen können Schnittstellen von Drittanbietern verwenden, um mit externen Cloud-Diensten zu kommunizieren, ähnlich wie cloudbasierte Lambda-Funktionen.

**Anmerkung**  
Die Funktionen von Greengrass Lambda können nicht mit AWS oder anderen Cloud-Diensten kommunizieren, wenn der Kern offline ist.

## Abrufen des Eingabe-MQTT-Themas (oder -Betreffs)
<a name="lambda-get-mqtt-topic"></a>

AWS IoT Greengrass verwendet Abonnements, um den Austausch von MQTT-Nachrichten zwischen Client-Geräten, Lambda-Funktionen und Konnektoren in einer Gruppe und mit AWS IoT oder dem lokalen Shadow-Service 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](#lambda-messages).

Das folgende Beispiel zeigt, wie eine Lambda-Funktion das Eingabethema aus dem abrufen kann`context`, das an den Handler übergeben wurde. 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](https://docs.aws.amazon.com/greengrass/v1/apireference/definitions-subscription.html) durch die `subject` Eigenschaft repräsentiert.

```
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. Detaillierte Anweisungen finden Sie unter [Modul 3 (Teil 1): Lambda-Funktionen auf AWS IoT Greengrass](module3-I.md).


****  

| Quelle | Target | Themenfilter | 
| --- | --- | --- | 
| IoT Cloud | Diese Funktion | test/input\$1message | 
| Diese Funktion | IoT Cloud | test/topic\$1results | 

Nach Abschluss der Bereitstellung rufen Sie die Funktion auf.

1. Öffnen Sie in der AWS IoT Konsole die **MQTT-Testclient-Seite**.

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

1. 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
<a name="lambda-lifecycle"></a>

Der Greengrass Lambda-Funktionslebenszyklus 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 On-Demand-Lebenszyklen (Standard) oder langlebige Lebenszyklen:
+ **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 *fixierte*) 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 Eingaben 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 stoppt (z. B. während einer Gruppenbereitstellung oder eines Geräteneustarts) oder die Funktion wechselt in einen Fehlerstatus (z. B. ein Handler-Timeout, eine nicht abgefangene Ausnahme oder wenn sie ihre Speichergrenzen überschreitet).

Weitere Informationen zur Wiederverwendung von Containern finden Sie unter [Grundlegendes zur Wiederverwendung von Containern AWS Lambda im](https://aws.amazon.com/blogs/compute/container-reuse-in-lambda/) AWS Compute-Blog.

## Ausführbare Lambda-Dateien
<a name="lambda-executables"></a>

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

Eine ausführbare Lambda-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 Platzbedarf des kompilierten Codes profitieren. Ausführbare Lambda-Dateien können durch Ereignisse aufgerufen werden, andere Funktionen aufrufen und auf lokale Ressourcen zugreifen.

Ausführbare Lambda-Dateien unterstützen nur den binären Kodierungstyp (nicht JSON), aber ansonsten können Sie sie in Ihrer Greengrass-Gruppe verwalten und wie andere Greengrass-Lambda-Funktionen bereitstellen. Der Prozess der Erstellung von ausführbaren Lambda-Dateien unterscheidet sich jedoch von der Erstellung von Python-, Java- und Node.js Lambda-Funktionen:
+ Sie können die AWS Lambda Konsole nicht verwenden, um eine Lambda-Programmdatei zu erstellen (oder zu verwalten). Sie können eine Lambda-Programmdatei nur mithilfe der AWS Lambda API erstellen.
+ Sie laden den Funktionscode AWS Lambda als kompilierte ausführbare Datei hoch, die das [AWS IoT Greengrass Core-SDK für C](https://github.com/aws/aws-greengrass-core-sdk-c) enthält.
+ Sie geben den Namen der ausführbaren Datei als Funktionshandler an.

Ausführbare Lambda-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 vor dem Erstellen von Threads und vor dem Aufrufen anderer AWS IoT Greengrass Core-SDK-Funktionen aufgerufen werden.
+ Rufen Sie `gg_runtime_start` auf, 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 Ausschnitt ist die `main` Methode aus dem Codebeispiel [simple\$1handler.c](https://github.com/aws/aws-greengrass-core-sdk-c/blob/master/aws-greengrass-core-sdk-c-example/simple_handler.c). 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 Core SDK for C.AWS IoT Greengrass](https://github.com/aws/aws-greengrass-core-sdk-c)

### Eine ausführbare Lambda-Datei erstellen
<a name="create-lambda-executable"></a>

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](https://docs.aws.amazon.com/cli/latest/reference/lambda/create-function.html) verwendet, um eine ausführbare Lambda-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**  
Denn `role` Sie können den ARN einer beliebigen Lambda-Ausführungsrolle angeben. AWS IoT Greengrass verwendet diese Rolle nicht, aber der Parameter ist erforderlich, um die Funktion zu erstellen. Weitere Informationen zu Lambda-Ausführungsrollen finden Sie unter [AWS Lambda Permissions Model](https://docs.aws.amazon.com/lambda/latest/dg/intro-permission-model.html) im *AWS Lambda Developer Guide*.

```
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](https://docs.aws.amazon.com/cli/latest/reference/lambda/publish-version.html), um eine Funktionsversion zu veröffentlichen.

  ```
  aws lambda publish-version \
  --function-name function-name \
  --region aws-region
  ```
+ Verwenden Sie [create-alias](https://docs.aws.amazon.com/cli/latest/reference/lambda/create-alias.html), um einen Alias zu erstellen, der auf die soeben veröffentlichte Version weist. Wir empfehlen, dass Sie Lambda-Funktionen per 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 Lambda Konsole zeigt keine ausführbaren Lambda-Dateien an. Um den Funktionscode zu aktualisieren, müssen Sie die API verwenden. AWS Lambda 

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 API tun. AWS IoT Greengrass 

# Wird AWS IoT Greengrass in einem Docker-Container ausgeführt
<a name="run-gg-in-docker-container"></a>

AWS IoT Greengrass [kann für die Ausführung in einem Docker-Container konfiguriert werden.](https://www.docker.com/)

Sie können ein Dockerfile [über Amazon](what-is-gg.md#gg-docker-download) herunterladen, auf dem CloudFront die AWS IoT Greengrass Core-Software und die zugehörigen Abhängigkeiten installiert sind. Informationen dazu, wie Sie das Docker-Image zur Ausführung auf verschiedenen Plattformarchitekturen modifizieren oder die Größe des Docker-Images verringern, finden Sie in der `README`-Datei im Docker-Paketdownload.

Um Ihnen den Einstieg in das Experimentieren zu erleichtern AWS IoT Greengrass, bietet es AWS auch vorgefertigte Docker-Images, auf denen die AWS IoT Greengrass Core-Software und die zugehörigen Abhängigkeiten installiert sind. Sie können ein Image von [Docker Hub](https://hub.docker.com/r/amazon/aws-iot-greengrass) oder [Amazon Elastic Container Registry](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) (Amazon ECR) herunterladen. Diese vorgefertigten Images verwenden Amazon Linux 2 (x86\$164) und Alpine Linux (x86\$164, ARMv7L oder) Basis-Images. AArch64

**Wichtig**  
<a name="docker-images-end-of-maintenance"></a>Am 30. Juni 2022 AWS IoT Greengrass wurde die Wartung für Docker-Images der AWS IoT Greengrass Core-Software v1.x eingestellt, die in Amazon Elastic Container Registry (Amazon ECR) und Docker Hub veröffentlicht wurden. Sie können diese Docker-Images weiterhin bis zum 30. Juni 2023, also 1 Jahr nach Ende der Wartung, von Amazon ECR und Docker Hub herunterladen. Nach dem Ende der Wartung am 30. Juni 2022 erhalten die Docker-Images der AWS IoT Greengrass Core-Software v1.x jedoch keine Sicherheitspatches oder Bugfixes mehr. Wenn Sie einen Produktions-Workload ausführen, der von diesen Docker-Images abhängt, empfehlen wir Ihnen, Ihre eigenen Docker-Images mithilfe der bereitgestellten Dockerfiles zu erstellen. AWS IoT Greengrass  Weitere Informationen finden Sie unter [AWS IoT Greengrass Docker-Software](what-is-gg.md#gg-docker-download).

In diesem Thema wird beschrieben, wie Sie das AWS IoT Greengrass Docker-Image von Amazon ECR herunterladen und auf einer Windows-, macOS- oder Linux-Plattform (x86\$164) ausführen. Das Thema umfasst die folgenden Schritte:

1. [Holen Sie sich das AWS IoT Greengrass Container-Image von Amazon ECR](#docker-pull-image)

1. [Erstellen und Konfigurieren von Greengrass-Gruppe und Core](#docker-config-gg)

1. [ AWS IoT Greengrass Lokal ausführen](#docker-run-gg)

1. [Konfigurieren der "Kein Container"-Containerisierung für die Gruppe](#docker-no-container)

1. [Stellen Sie Lambda-Funktionen im Docker-Container bereit](#docker-add-lambdas)

1. [(Optional) Stellen Sie Client-Geräte, die mit Greengrass interagieren, im Docker-Container bereit](#docker-add-devices)

Die folgenden Funktionen werden nicht unterstützt, wenn Sie sie in einem Docker-Container ausführen AWS IoT Greengrass :<a name="docker-image-unsupported-features"></a>
+ [Konnektoren](connectors.md), die im **Greengrass-Container**-Modus ausgeführt werden. Um einen Konnektor in einem Docker-Container auszuführen, muss der Konnektor im Modus **No container (Kein Container)** ausgeführt werden. Informationen zum Suchen von Konnektoren, die den **No Container (Kein Container)**-Modus unterstützen, finden Sie unter [AWS-mitgelieferte Greengrass-Anschlüsse](connectors-list.md). Einige dieser Konnektoren weisen einen Isolationsmodus-Parameter auf, den Sie auf **No container (Kein Container)** festlegen müssen.
+ [Lokale Geräte- und Volume-Ressourcen](access-local-resources.md) Ihre benutzerdefinierten Lambda-Funktionen, die im Docker-Container ausgeführt werden, müssen direkt auf Geräte und Volumes auf dem Core zugreifen.

Diese Funktionen werden nicht unterstützt, wenn die Lambda-Laufzeitumgebung für die Greengrass-Gruppe auf [Kein Container](lambda-group-config.md#no-container-mode) gesetzt ist, was für die Ausführung AWS IoT Greengrass in einem Docker-Container erforderlich ist.

## Voraussetzungen
<a name="docker-image-prerequisites"></a>

Bevor Sie mit diesem Tutorial beginnen, müssen Sie Folgendes tun.<a name="docker-image-prereq-list"></a>
+ Sie müssen die folgende Software und Versionen auf Ihrem Hostcomputer installieren, basierend auf der von Ihnen ausgewählten Version AWS Command Line Interface (AWS CLI).

------
#### [ AWS CLI version 2 ]
  + [Docker-Version](https://docs.docker.com/install/) 18.09 oder höher. Frühere Versionen funktionieren möglicherweise auch, wir empfehlen jedoch 18.09 oder höher.
  + AWS CLI Version 2.0.0 oder höher.
    + Informationen zur Installation der AWS CLI Version 2 finden Sie unter [AWS CLI Version 2 installieren](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html).
    + Informationen zur AWS CLI Konfiguration [von finden Sie unter Konfiguration von AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html).
**Anmerkung**  
Um auf einem Windows-Computer auf eine neuere AWS CLI Version 2 zu aktualisieren, müssen Sie den [MSI-Installationsvorgang](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2-windows.html) wiederholen.

------
#### [ AWS CLI version 1 ]
  + [Docker-Version](https://docs.docker.com/install/) 18.09 oder höher. Frühere Versionen funktionieren möglicherweise auch, wir empfehlen jedoch 18.09 oder höher.
  + [Python-Version](https://www.python.org/downloads/) 3.6 oder höher.
  + [pip](https://pip.pypa.io/en/stable/installing), Version 18.1 oder höher.
  + AWS CLI Version 1.17.10 oder höher
    + Informationen zur Installation der AWS CLI Version 1 finden Sie unter [AWS CLI Version 1 installieren](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv1.html).
    + Informationen zur AWS CLI Konfiguration [von finden Sie unter Konfiguration von AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html).
    + Führen Sie den folgenden Befehl aus, um auf die neueste AWS CLI Version von Version 1 zu aktualisieren.

      ```
      pip install awscli --upgrade --user
      ```
**Anmerkung**  
Wenn Sie die [MSI-Installation](https://docs.aws.amazon.com/cli/latest/userguide/install-windows.html#msi-on-windows) der AWS CLI Version 1 unter Windows verwenden, beachten Sie Folgendes:  
Wenn bei der Installation AWS CLI von Version 1 Botocore nicht installiert werden kann, versuchen Sie es mit der [Python- und Pip-Installation](https://docs.aws.amazon.com/cli/latest/userguide/awscli-install-windows.html#awscli-install-windows-pip).
Um auf eine neuere AWS CLI Version 1 zu aktualisieren, müssen Sie den MSI-Installationsvorgang wiederholen.

------
+ Um auf Ressourcen von Amazon Elastic Container Registry (Amazon ECR) zugreifen zu können, müssen Sie die folgende Berechtigung erteilen. 
  + Amazon ECR verlangt von Benutzern, die `ecr:GetAuthorizationToken` Erlaubnis über eine AWS Identity and Access Management (IAM-) Richtlinie zu erteilen, bevor sie sich bei einer Registrierung authentifizieren und Bilder aus einem Amazon ECR-Repository per Push oder Pull abrufen können. Weitere Informationen finden Sie unter [Amazon ECR Repository-Richtlinienbeispiele](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-policy-examples.html) und [Zugriff auf ein Amazon ECR-Repository](https://docs.aws.amazon.com/AmazonECR/latest/userguide/security_iam_id-based-policy-examples.html#security_iam_id-based-policy-examples-access-one-bucket) im *Amazon Elastic Container Registry-Benutzerhandbuch*.

## Schritt 1: Holen Sie sich das AWS IoT Greengrass Container-Image von Amazon ECR
<a name="docker-pull-image"></a>

AWS stellt Docker-Images bereit, auf denen die AWS IoT Greengrass Core-Software installiert ist.

**Warnung**  <a name="docker-images-python-2.7-removal"></a>
Ab Version 1.11.6 der AWS IoT Greengrass Core-Software enthalten die Greengrass Docker-Images Python 2.7 nicht mehr, da Python 2.7 end-of-life im Jahr 2020 erreicht wurde und keine Sicherheitsupdates mehr erhält. Wenn Sie sich für ein Update auf diese Docker-Images entscheiden, empfehlen wir Ihnen, zu überprüfen, ob Ihre Anwendungen mit den neuen Docker-Images funktionieren, bevor Sie die Updates auf Produktionsgeräten bereitstellen. Wenn Sie Python 2.7 für Ihre Anwendung benötigen, die ein Greengrass Docker-Image verwendet, können Sie das Greengrass Dockerfile so ändern, dass es Python 2.7 für Ihre Anwendung enthält.

Wählen Sie für die Schritte, die zeigen, wie Sie das `latest` Bild aus Amazon ECR abrufen können, Ihr Betriebssystem aus:

### Abrufen des Container-Abbilds (Linux)
<a name="docker-pull-image-linux"></a>

Führen Sie die folgenden Befehle auf Ihrem Computer-Terminal aus.

1. <a name="docker-get-login"></a>Melden Sie sich bei der AWS IoT Greengrass Registrierung in Amazon ECR an.

   ```
   aws ecr get-login-password --region  us-west-2 | docker login --username AWS --password-stdin https://216483018798.dkr.ecr.us-west-2.amazonaws.com
   ```

   Bei erfolgreicher Ausführung wird als Ausgabe `Login Succeeded` gedruckt.

1. <a name="docker-docker-pull"></a>Rufen Sie das AWS IoT Greengrass Container-Image ab.

   ```
   docker pull 216483018798.dkr.ecr.us-west-2.amazonaws.com/aws-iot-greengrass:latest
   ```
**Anmerkung**  
Das `latest` Image enthält die neueste stabile Version der AWS IoT Greengrass Core-Software, die auf einem Amazon Linux 2-Basis-Image installiert ist. Sie können auch andere Images per Pull aus dem Repository abrufen. Um alle verfügbaren Bilder zu finden, überprüfen Sie die Seite **Tags** im [Docker Hub](https://hub.docker.com/r/amazon/aws-iot-greengrass) oder verwenden Sie den **aws ecr list-images**-Befehl. Beispiel:  

   ```
   aws ecr list-images --region us-west-2 --registry-id 216483018798 --repository-name aws-iot-greengrass
   ```

1. Aktivieren Sie den symlink- und hardlink-Schutz. Wenn Sie mit der Ausführung AWS IoT Greengrass in einem Container experimentieren, können Sie die Einstellungen nur für den aktuellen Start aktivieren.
**Anmerkung**  
Sie müssen diese Befehle möglicherweise mit **sudo** ausführen.
   + Um die Einstellungen nur für den aktuellen Systemstart zu aktivieren:

     ```
     echo 1 > /proc/sys/fs/protected_hardlinks
     echo 1 > /proc/sys/fs/protected_symlinks
     ```
   + So aktivieren Sie die Einstellungen, damit sie über Neustarts hinweg beibehalten werden:

     ```
     echo '# AWS IoT Greengrass' >> /etc/sysctl.conf 
     echo 'fs.protected_hardlinks = 1' >> /etc/sysctl.conf 
     echo 'fs.protected_symlinks = 1' >> /etc/sysctl.conf
     
     sysctl -p
     ```

1. <a name="docker-linux-enable-ipv4"></a>Aktivieren Sie die IPv4 Netzwerkweiterleitung, die für die AWS IoT Greengrass Cloud-Bereitstellung und die MQTT-Kommunikation unter Linux erforderlich ist. Legen Sie in der Datei `/etc/sysctl.conf` für `net.ipv4.ip_forward` "1" fest und laden Sie dann `sysctls` neu.

   ```
   sudo nano /etc/sysctl.conf
   # set this net.ipv4.ip_forward = 1
   sudo sysctl -p
   ```
**Anmerkung**  
Sie können anstelle von nano einen Editor Ihrer Wahl verwenden.

### Abrufen des Container-Abbilds (macOS)
<a name="docker-pull-image-mac"></a>

Führen Sie die folgenden Befehle auf Ihrem Computer-Terminal aus.

1. <a name="docker-get-login"></a>Melden Sie sich bei der AWS IoT Greengrass Registrierung in Amazon ECR an.

   ```
   aws ecr get-login-password --region  us-west-2 | docker login --username AWS --password-stdin https://216483018798.dkr.ecr.us-west-2.amazonaws.com
   ```

   Bei erfolgreicher Ausführung wird als Ausgabe `Login Succeeded` gedruckt.

1. <a name="docker-docker-pull"></a>Rufen Sie das AWS IoT Greengrass Container-Image ab.

   ```
   docker pull 216483018798.dkr.ecr.us-west-2.amazonaws.com/aws-iot-greengrass:latest
   ```
**Anmerkung**  
Das `latest` Image enthält die neueste stabile Version der AWS IoT Greengrass Core-Software, die auf einem Amazon Linux 2-Basis-Image installiert ist. Sie können auch andere Images per Pull aus dem Repository abrufen. Um alle verfügbaren Bilder zu finden, überprüfen Sie die Seite **Tags** im [Docker Hub](https://hub.docker.com/r/amazon/aws-iot-greengrass) oder verwenden Sie den **aws ecr list-images**-Befehl. Beispiel:  

   ```
   aws ecr list-images --region us-west-2 --registry-id 216483018798 --repository-name aws-iot-greengrass
   ```

### Abrufen des Container-Abbilds (Windows)
<a name="docker-pull-image-windows"></a>

Führen Sie in einem Eingabeaufforderungsfenster die folgenden Befehle aus. Um Docker-Befehle auf Windows verwenden zu können, muss der Docker-Desktop ausgeführt werden.

1. <a name="docker-get-login"></a>Melden Sie sich bei der AWS IoT Greengrass Registrierung in Amazon ECR an.

   ```
   aws ecr get-login-password --region  us-west-2 | docker login --username AWS --password-stdin https://216483018798.dkr.ecr.us-west-2.amazonaws.com
   ```

   Bei erfolgreicher Ausführung wird als Ausgabe `Login Succeeded` gedruckt.

1. <a name="docker-docker-pull"></a>Rufen Sie das AWS IoT Greengrass Container-Image ab.

   ```
   docker pull 216483018798.dkr.ecr.us-west-2.amazonaws.com/aws-iot-greengrass:latest
   ```
**Anmerkung**  
Das `latest` Image enthält die neueste stabile Version der AWS IoT Greengrass Core-Software, die auf einem Amazon Linux 2-Basis-Image installiert ist. Sie können auch andere Images per Pull aus dem Repository abrufen. Um alle verfügbaren Bilder zu finden, überprüfen Sie die Seite **Tags** im [Docker Hub](https://hub.docker.com/r/amazon/aws-iot-greengrass) oder verwenden Sie den **aws ecr list-images**-Befehl. Beispiel:  

   ```
   aws ecr list-images --region us-west-2 --registry-id 216483018798 --repository-name aws-iot-greengrass
   ```

## Schritt 2: Erstellen und Konfigurieren von Greengrass-Gruppe und Core
<a name="docker-config-gg"></a>

Auf dem Docker-Image ist die AWS IoT Greengrass Core-Software installiert, aber Sie müssen eine Greengrass-Gruppe und einen Kern erstellen. Dazu gehören das Herunterladen von Zertifikaten und von der Core-Konfigurationsdatei.
+ Führen Sie die Schritte unter [Modul 2: Installation der AWS IoT Greengrass Core-Software](module2.md) aus. Überspringen Sie die Schritte, in denen Sie die AWS IoT Greengrass Core-Software herunterladen und ausführen. Die Software und ihre Laufzeitabhängigkeiten sind im Docker-Image bereits eingerichtet.

## Schritt 3: AWS IoT Greengrass Lokal ausführen
<a name="docker-run-gg"></a>

Nachdem Ihre Gruppe konfiguriert wurde, können Sie den Core konfigurieren und starten. Schrittweise Anleitungen hierzu erhalten Sie bei Auswahl Ihres Betriebssystems:

### Lokales Ausführen von Greengrass (Linux)
<a name="docker-run-gg-linux"></a>

Führen Sie die folgenden Befehle auf Ihrem Computer-Terminal aus.

1. <a name="docker-create-certs-folder"></a>Erstellen Sie einen Ordner für die Sicherheitsressourcen des Geräts und verschieben Sie das Zertifikat und die Schlüssel in diesen Ordner. Führen Sie die folgenden Befehle aus. *path-to-security-files*Ersetzen Sie es durch den Pfad zu den Sicherheitsressourcen und *certificateId* durch die Zertifikat-ID in den Dateinamen.

   ```
   mkdir /tmp/certs
   mv path-to-security-files/certificateId-certificate.pem.crt /tmp/certs
   mv path-to-security-files/certificateId-public.pem.key /tmp/certs
   mv path-to-security-files/certificateId-private.pem.key /tmp/certs
   mv path-to-security-files/AmazonRootCA1.pem /tmp/certs
   ```

1. <a name="docker-create-config-folder"></a>Erstellen Sie einen Ordner für die Konfiguration des Geräts und verschieben Sie die AWS IoT Greengrass Core-Konfigurationsdatei in diesen Ordner. Führen Sie die folgenden Befehle aus. *path-to-config-file*Ersetzen Sie durch den Pfad zur Konfigurationsdatei.

   ```
   mkdir /tmp/config
   mv path-to-config-file/config.json /tmp/config
   ```

1. <a name="docker-docker-run"></a>Starten Sie die Zertifikate AWS IoT Greengrass und die Konfigurationsdatei und binden Sie sie im Docker-Container ein.

   Ersetzen Sie `/tmp` durch den Pfad, in den Sie Ihre Zertifikate und Konfigurationsdatei dekomprimiert haben.

   ```
   docker run --rm --init -it --name aws-iot-greengrass \
   --entrypoint /greengrass-entrypoint.sh \
   -v /tmp/certs:/greengrass/certs \
   -v /tmp/config:/greengrass/config \
   -p 8883:8883 \
   216483018798.dkr.ecr.us-west-2.amazonaws.com/aws-iot-greengrass:latest
   ```

   Die Ausgabe sollte in etwa wie folgt aussehen:

   ```
   Setting up greengrass daemon
   Validating hardlink/softlink protection
   Waiting for up to 30s for Daemon to start
   
   Greengrass successfully started with PID: 10
   ```

### Lokales Ausführen von Greengrass (macOS)
<a name="docker-run-gg-mac"></a>

Führen Sie die folgenden Befehle auf Ihrem Computer-Terminal aus.

1. <a name="docker-create-certs-folder"></a>Erstellen Sie einen Ordner für die Sicherheitsressourcen des Geräts und verschieben Sie das Zertifikat und die Schlüssel in diesen Ordner. Führen Sie die folgenden Befehle aus. *path-to-security-files*Ersetzen Sie es durch den Pfad zu den Sicherheitsressourcen und *certificateId* durch die Zertifikat-ID in den Dateinamen.

   ```
   mkdir /tmp/certs
   mv path-to-security-files/certificateId-certificate.pem.crt /tmp/certs
   mv path-to-security-files/certificateId-public.pem.key /tmp/certs
   mv path-to-security-files/certificateId-private.pem.key /tmp/certs
   mv path-to-security-files/AmazonRootCA1.pem /tmp/certs
   ```

1. <a name="docker-create-config-folder"></a>Erstellen Sie einen Ordner für die Konfiguration des Geräts und verschieben Sie die AWS IoT Greengrass Core-Konfigurationsdatei in diesen Ordner. Führen Sie die folgenden Befehle aus. *path-to-config-file*Ersetzen Sie durch den Pfad zur Konfigurationsdatei.

   ```
   mkdir /tmp/config
   mv path-to-config-file/config.json /tmp/config
   ```

1. <a name="docker-docker-run"></a>Starten Sie die Zertifikate AWS IoT Greengrass und die Konfigurationsdatei und binden Sie sie im Docker-Container ein.

   Ersetzen Sie `/tmp` durch den Pfad, in den Sie Ihre Zertifikate und Konfigurationsdatei dekomprimiert haben.

   ```
   docker run --rm --init -it --name aws-iot-greengrass \
   --entrypoint /greengrass-entrypoint.sh \
   -v /tmp/certs:/greengrass/certs \
   -v /tmp/config:/greengrass/config \
   -p 8883:8883 \
   216483018798.dkr.ecr.us-west-2.amazonaws.com/aws-iot-greengrass:latest
   ```

   Die Ausgabe sollte in etwa wie folgt aussehen:

   ```
   Setting up greengrass daemon
   Validating hardlink/softlink protection
   Waiting for up to 30s for Daemon to start
   
   Greengrass successfully started with PID: 10
   ```

### Lokales Ausführen von Greengrass (Windows)
<a name="docker-run-gg-windows"></a>

1. Erstellen Sie einen Ordner für die Sicherheitsressourcen des Geräts und verschieben Sie das Zertifikat und die Schlüssel in diesen Ordner. Führen Sie in einem Eingabeaufforderungsfenster die folgenden Befehle aus. *path-to-security-files*Ersetzen Sie es durch den Pfad zu den Sicherheitsressourcen und *certificateId* durch die Zertifikat-ID in den Dateinamen.

   ```
   mkdir C:\Users\%USERNAME%\Downloads\certs
   move path-to-security-files\certificateId-certificate.pem.crt C:\Users\%USERNAME%\Downloads\certs
   move path-to-security-files\certificateId-public.pem.key C:\Users\%USERNAME%\Downloads\certs
   move path-to-security-files\certificateId-private.pem.key C:\Users\%USERNAME%\Downloads\certs
   move path-to-security-files\AmazonRootCA1.pem C:\Users\%USERNAME%\Downloads\certs
   ```

1. Erstellen Sie einen Ordner für die Konfiguration des Geräts und verschieben Sie die AWS IoT Greengrass Core-Konfigurationsdatei in diesen Ordner. Führen Sie in einem Eingabeaufforderungsfenster die folgenden Befehle aus. *path-to-config-file*Ersetzen Sie durch den Pfad zur Konfigurationsdatei.

   ```
   mkdir C:\Users\%USERNAME%\Downloads\config
   move path-to-config-file\config.json C:\Users\%USERNAME%\Downloads\config
   ```

1. Starten Sie die Zertifikate AWS IoT Greengrass und die Konfigurationsdatei und binden Sie sie im Docker-Container ein. Führen Sie in einem Eingabeaufforderungsfenster die folgenden Befehle aus.

   ```
   docker run --rm --init -it --name aws-iot-greengrass --entrypoint /greengrass-entrypoint.sh -v c:/Users/%USERNAME%/Downloads/certs:/greengrass/certs -v c:/Users/%USERNAME%/Downloads/config:/greengrass/config -p 8883:8883 216483018798.dkr.ecr.us-west-2.amazonaws.com/aws-iot-greengrass:latest
   ```

   Geben Sie bei einer entsprechenden Docker-Eingabeaufforderung Ihr `C:\`-Laufwerk für den Docker-Daemon frei, sodass er das Verzeichnis `C:\` innerhalb des Docker-Containers mit einem Bind-Mount bereitstellen kann. Weitere Informationen finden Sie in der Docker-Dokumentation unter [Freigegebene Laufwerke](https://docs.docker.com/docker-for-windows/#shared-drives). 

   Die Ausgabe sollte in etwa wie folgt aussehen:

   ```
   Setting up greengrass daemon
   Validating hardlink/softlink protection
   Waiting for up to 30s for Daemon to start
   
   Greengrass successfully started with PID: 10
   ```

**Anmerkung**  
Wenn der Container die Shell nicht öffnet und sofort beendet, können Sie das Problem debuggen, indem Sie ein Bind-Mount der Greengrass Runtime-Protokolle beim Start des Abbilds erstellen. Weitere Informationen finden Sie unter [Erhalten der Greengrass-Laufzeitprotokolle außerhalb des Docker-Containers](#debugging-docker-persist-logs).

## Schritt 4: Konfigurieren der "Kein Container"-Containerisierung für die Greengrass-Gruppe
<a name="docker-no-container"></a>

Wenn Sie AWS IoT Greengrass in einem Docker-Container ausführen, müssen alle Lambda-Funktionen ohne Containerisierung ausgeführt werden. In diesem Schritt legen Sie als Standard-Containerisierung für die Gruppe **No container (Kein Container)** fest. Dies muss vor der erstmaligen Bereitstellung der Gruppe geschehen.

1. <a name="console-gg-groups"></a>Erweitern Sie im Navigationsbereich der AWS IoT Konsole unter **Verwalten** die Option **Greengrass-Geräte** und wählen Sie dann **Gruppen (V1)** aus.

1. <a name="group-choose-group"></a>Wählen Sie die Gruppe aus, deren Einstellungen Sie ändern möchten.

1. Wählen Sie die Registerkarte **Lambda-Funktionen**.

1. Wählen Sie unter **Standard-Laufzeitumgebung für Lambda-Funktionen** die Option **Bearbeiten** aus.

1. Ändern Sie in der **Laufzeitumgebung Standard-Lambda-Funktion bearbeiten** unter **Standardcontainerisierung für Lambda-Funktionen die Containerisierungseinstellungen**.

1. Wählen Sie **Speichern**.

Die Änderungen werden wirksam, wenn die Gruppe bereitgestellt wird.

Weitere Informationen finden Sie unter [Standardcontainerisierung für Lambda-Funktionen in einer Gruppe festlegen](lambda-group-config.md#lambda-containerization-groupsettings).

**Anmerkung**  
Standardmäßig verwenden Lambda-Funktionen die Gruppencontainerisierungseinstellung. Wenn Sie die Einstellung **Kein Container** für irgendwelche Lambda-Funktionen überschreiben, wenn sie AWS IoT Greengrass in einem Docker-Container ausgeführt werden, schlägt die Bereitstellung fehl.

## Schritt 5: Lambda-Funktionen im AWS IoT Greengrass Docker-Container bereitstellen
<a name="docker-add-lambdas"></a>

Sie können langlebige Lambda-Funktionen im Greengrass Docker-Container bereitstellen.
+ Folgen Sie den Schritten unter[Modul 3 (Teil 1): Lambda-Funktionen auf AWS IoT Greengrass](module3-I.md), um eine langlebige Hello World Lambda-Funktion für den Container bereitzustellen.

## Schritt 6: (Optional) Stellen Sie Client-Geräte bereit, die mit Greengrass interagieren, das im Docker-Container ausgeführt wird
<a name="docker-add-devices"></a>

Sie können auch Client-Geräte bereitstellen, die mit der Ausführung interagieren, AWS IoT Greengrass wenn es in einem Docker-Container ausgeführt wird.
+ Folgen Sie den Schritten unter[Modul 4: Interaktion mit Client-Geräten in einer AWS IoT Greengrass Gruppe](module4.md), um Client-Geräte bereitzustellen, die eine Verbindung zum Core herstellen und MQTT-Nachrichten senden.

## Den AWS IoT Greengrass Docker-Container stoppen
<a name="docker-stop"></a>

Um den AWS IoT Greengrass Docker-Container zu stoppen, drücken Sie Strg\$1C in Ihrem Terminal oder in der Befehlszeile. Diese Aktion wird `SIGTERM` an den Greengrass-Daemon-Prozess gesendet, um den Greengrass-Daemon-Prozess und alle Lambda-Prozesse, die vom Daemon-Prozess gestartet wurden, herunterzufahren. Der Docker-Container wird mit dem Prozess `/dev/init` als PID 1 initialisiert, wodurch alle verbliebenen Zombieprozesse entfernen werden. Weitere Informationen finden Sie in der [Referenz zu docker run](https://docs.docker.com/engine/reference/commandline/run/#options).

## Problembehandlung in einem Docker-Container AWS IoT Greengrass
<a name="troubleshooting-docker-gg"></a>

Verwenden Sie die folgenden Informationen, um Probleme bei der Ausführung AWS IoT Greengrass in einem Docker-Container zu beheben.

### Fehler: Eine interaktive Anmeldung kann nicht von einem Gerät aus durchgeführt werden, das kein TTY-Gerät ist.
<a name="docker-troubleshootin-ecr-get-login-password"></a>

**Lösung:** Dieser Fehler kann auftreten, wenn Sie den Befehl `aws ecr get-login-password` ausführen. Stellen Sie sicher, dass Sie die neueste AWS CLI Version 2 oder Version 1 installiert haben. Wir empfehlen Ihnen, die AWS CLI Version 2 zu verwenden. Weitere Informationen finden Sie unter [Installieren der AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html) im *AWS Command Line Interface -Benutzerhandbuch*.

### Fehler: Unbekannte Optionen: -no-include-email.
<a name="docker-troubleshooting-cli-version"></a>

**Lösung:** Dieser Fehler kann auftreten, wenn Sie den Befehl `aws ecr get-login` ausführen. Vergewissern Sie sich, dass Sie die neueste AWS CLI Version installiert haben (zum Beispiel run:`pip install awscli --upgrade --user`). Wenn Sie Windows verwenden und die CLI mit dem MSI-Installationsprogramm installiert haben, müssen Sie den Installationsvorgang wiederholen. Weitere Informationen finden Sie im *AWS Command Line Interface Benutzerhandbuch AWS Command Line Interface * [unter Installation von unter Microsoft Windows](https://docs.aws.amazon.com/cli/latest/userguide/awscli-install-windows.html).

### Warnung: IPv4 ist deaktiviert. Das Netzwerk wird nicht funktionieren.
<a name="docker-troubleshooting-ipv4-disabled"></a>

**Lösung:** Möglicherweise erhalten Sie diese oder eine ähnliche Meldung, wenn Sie AWS IoT Greengrass auf einem Linux-Computer arbeiten. Aktivieren Sie die IPv4 Netzwerkweiterleitung wie in diesem [Schritt](#docker-linux-enable-ipv4) beschrieben. AWS IoT Greengrass Cloud-Bereitstellung und MQTT-Kommunikation funktionieren nicht, wenn die IPv4 Weiterleitung nicht aktiviert ist. Weitere Informationen finden Sie unter [Configure namespaced kernel parameters (sysctls) at runtime](https://docs.docker.com/engine/reference/commandline/run/#configure-namespaced-kernel-parameters-sysctls-at-runtime) in der Docker-Dokumentation.

### Fehler: Eine Firewall blockiert die Freigabe von Dateien zwischen Fenstern und den Containern.
<a name="docker-troubleshooting-firewall"></a>

**Lösung:** Sie können diese Fehlermeldung oder eine `Firewall Detected`-Nachricht erhalten, wenn Sie Docker auf einem Windows-Computer ausführen. Dies kann auch auftreten, wenn Sie an einem Virtual Private Network (VPN) angemeldet sind und Ihre Netzwerkeinstellungen die Bereitstellung des freigegebenen Laufwerks verhindern. Deaktivieren Sie in diesem Fall das VPN und führen Sie den Docker-Container erneut aus.

### Fehler: Beim Aufrufen der GetAuthorizationToken Operation ist ein Fehler aufgetreten (AccessDeniedException): User: arn:aws:iam: :user/ <account-id>ist <user-name>nicht berechtigt,: ecr: on resource: \$1 auszuführen GetAuthorizationToken
<a name="docker-troubleshooting-ecr-perms"></a>

Möglicherweise erhalten Sie diesen Fehler, wenn Sie den `aws ecr get-login-password` Befehl ausführen, wenn Sie nicht über ausreichende Berechtigungen für den Zugriff auf ein Amazon ECR-Repository verfügen. Weitere Informationen finden Sie unter [Beispiele für Amazon ECR Repository-Richtlinien](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-policy-examples.html) und [Zugriff auf ein Amazon ECR-Repository](https://docs.aws.amazon.com/AmazonECR/latest/userguide/security_iam_id-based-policy-examples.html) im *Amazon ECR-Benutzerhandbuch*.

Allgemeine Hilfe AWS IoT Greengrass zur Fehlerbehebung finden Sie unter. [Problembehebung AWS IoT Greengrass](gg-troubleshooting.md)

### Debuggen AWS IoT Greengrass in einem Docker-Container
<a name="debugging-docker-gg"></a>

Zum Debuggen von Problemen mit einem Docker-Container können Sie die Greengrass-Laufzeitprotokolle erhalten oder eine interaktive Shell an den Docker-Container anfügen.

#### Erhalten der Greengrass-Laufzeitprotokolle außerhalb des Docker-Containers
<a name="debugging-docker-persist-logs"></a>

Sie können den AWS IoT Greengrass Docker-Container ausführen, nachdem Sie das Verzeichnis per Bind-Mounten bereitgestellt haben. `/greengrass/ggc/var/log` Die Protokolle bleiben auch dann erhalten, wenn der Container beendet oder entfernt wird.

**Unter Linux oder macOS**  
[Beenden Sie alle Greengrass-Docker-Container](#docker-stop), die auf dem Host ausgeführt werden, und führen Sie dann den folgenden Befehl in einem Terminal aus. Auf diese Weise wird ein Bind-Mount des Greengrass `log`-Verzeichnisses erstellt und das Docker-Image gestartet.   
Ersetzen Sie `/tmp` durch den Pfad, in den Sie Ihre Zertifikate und Konfigurationsdatei dekomprimiert haben.  

```
docker run --rm --init -it --name aws-iot-greengrass \
      --entrypoint /greengrass-entrypoint.sh \
      -v /tmp/certs:/greengrass/certs \
      -v /tmp/config:/greengrass/config \
      -v /tmp/log:/greengrass/ggc/var/log \
      -p 8883:8883 \
      216483018798.dkr.ecr.us-west-2.amazonaws.com/aws-iot-greengrass:latest
```
Anschließend können Sie Ihre Protokolle auf Ihrem Host unter `/tmp/log` überprüfen, um zu sehen, welche Entwicklungen in Greengrass während der Ausführung des Docker-Containers eingetreten sind.

**Unter Windows**  
[Beenden Sie alle Greengrass-Docker-Container](#docker-stop), die auf dem Host ausgeführt werden, und führen Sie dann den folgenden Befehl in einem Befehlszeilenfenster aus. Auf diese Weise wird ein Bind-Mount des Greengrass `log`-Verzeichnisses erstellt und das Docker-Image gestartet.  

```
cd C:\Users\%USERNAME%\Downloads
mkdir log
docker run --rm --init -it --name aws-iot-greengrass --entrypoint /greengrass-entrypoint.sh -v c:/Users/%USERNAME%/Downloads/certs:/greengrass/certs -v c:/Users/%USERNAME%/Downloads/config:/greengrass/config -v c:/Users/%USERNAME%/Downloads/log:/greengrass/ggc/var/log -p 8883:8883 216483018798.dkr.ecr.us-west-2.amazonaws.com/aws-iot-greengrass:latest
```
Anschließend können Sie Ihre Protokolle auf Ihrem Host unter `C:/Users/%USERNAME%/Downloads/log` überprüfen, um zu sehen, welche Entwicklungen in Greengrass während der Ausführung des Docker-Containers eingetreten sind.

#### Anfügen einer interaktiven Shell an den Docker-Container
<a name="debugging-docker-attach-shell"></a>

Sie können eine interaktive Shell an einen laufenden AWS IoT Greengrass Docker-Container anhängen. Auf diese Weise können Sie den Status des Greengrass Docker-Containers untersuchen.

**Unter Linux oder macOS**  
Führen Sie den folgenden Befehl in einem separaten Terminal aus, während der Greengrass-Docker-Container ausgeführt wird.  

```
docker exec -it $(docker ps -a -q -f "name=aws-iot-greengrass") /bin/bash
```

**Unter Windows**  
Führen Sie die folgenden Befehle in einem separaten Befehlszeilenfenster aus, während der Greengrass-Docker-Container ausgeführt wird.  

```
docker ps -a -q -f "name=aws-iot-greengrass"
```
*gg-container-id*Ersetzen Sie es durch das `container_id` Ergebnis des vorherigen Befehls.  

```
docker exec -it gg-container-id /bin/bash
```