Ausführen AWS IoT Greengrass in einem Docker-Container mit automatischer Ressourcenbereitstellung - 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 AWS IoT Greengrass in einem Docker-Container mit automatischer Ressourcenbereitstellung

In diesem Tutorial erfahren Sie, wie Sie AWS IoT Greengrass Core-Software in einem Docker-Container mit automatisch bereitgestellten AWS Ressourcen und lokalen Entwicklungstools installieren und ausführen. Sie können diese Entwicklungsumgebung verwenden, um AWS IoT Greengrass Funktionen in einem Docker-Container zu erkunden. Die Software benötigt AWS Anmeldeinformationen, um diese Ressourcen bereitzustellen und die lokalen Entwicklungstools bereitzustellen.

Wenn Sie dem Container keine AWS Anmeldeinformationen bereitstellen können, können Sie die AWS Ressourcen bereitstellen, die das Core-Gerät für den Betrieb benötigt. Sie können die Entwicklungstools auch auf einem Core-Gerät bereitstellen, das als Entwicklungsgerät verwendet werden soll. Auf diese Weise können Sie dem Gerät weniger Berechtigungen erteilen, wenn Sie den Container ausführen. Weitere Informationen finden Sie unter Ausführen AWS IoT Greengrass in einem Docker-Container mit manueller Ressourcenbereitstellung.

Voraussetzungen

Um dieses Tutorial abzuschließen, benötigen Sie Folgendes.

  • Ein(e) AWS-Konto. Falls Sie noch keines haben, beachten Sie die Informationen unter Richten Sie eine ein AWS-Konto.

  • Ein AWS IAM-Benutzer mit Berechtigungen zum Bereitstellen der AWS IoT und IAM-Ressourcen für ein Greengrass-Core-Gerät. Das AWS IoT Greengrass-Core-Softwareinstallationsprogramm verwendet Ihre -AWSAnmeldeinformationen, um diese Ressourcen automatisch bereitzustellen. Informationen zur minimalen IAM-Richtlinie zur automatischen Bereitstellung von Ressourcen finden Sie unter Minimale IAM-Richtlinie für das Installationsprogramm zur Bereitstellung von Ressourcen.

  • Ein AWS IoT Greengrass Docker-Image. Sie können ein Image aus der AWS IoT Greengrass Dockerfile erstellen.

  • Der Host-Computer, auf dem Sie den Docker-Container ausführen, muss die folgenden Anforderungen erfüllen:

    • Ein Linux-basiertes Betriebssystem mit einer Internetverbindung.

    • Docker-Engine-Version 18.09 oder höher.

    • (Optional) Docker Compose Version 1.22 oder höher. Docker Compose ist nur erforderlich, wenn Sie die Docker Compose CLI zum Ausführen Ihrer Docker-Images verwenden möchten.

Konfigurieren Ihrer AWS-Anmeldeinformationen

In diesem Schritt erstellen Sie eine Datei mit Anmeldeinformationen auf dem Host-Computer, die Ihre AWS Sicherheitsanmeldeinformationen enthält. Wenn Sie das AWS IoT Greengrass Docker-Image ausführen, müssen Sie den Ordner, der diese Datei mit den Anmeldeinformationen enthält, /root/.aws/ in im Docker-Container mounten. Das AWS IoT Greengrass Installationsprogramm verwendet diese Anmeldeinformationen, um Ressourcen in Ihrem bereitzustellenAWS-Konto. Informationen zur minimalen IAM-Richtlinie, die das Installationsprogramm zum automatischen Bereitstellen von Ressourcen benötigt, finden Sie unter Minimale IAM-Richtlinie für das Installationsprogramm zur Bereitstellung von Ressourcen.

  1. Rufen Sie eine der folgenden Optionen ab.

  2. Erstellen Sie einen Ordner, in dem Sie Ihre Anmeldeinformationsdatei ablegen.

    mkdir ./greengrass-v2-credentials
  3. Verwenden Sie einen Texteditor, um eine Konfigurationsdatei mit dem Namen credentials im ./greengrass-v2-credentials Ordner zu erstellen.

    Sie können beispielsweise den folgenden Befehl ausführen, um GNU Nano zum Erstellen der credentials Datei zu verwenden.

    nano ./greengrass-v2-credentials/credentials
  4. Fügen Sie der credentials Datei Ihre AWS Anmeldeinformationen im folgenden Format hinzu.

    [default] aws_access_key_id = AKIAIOSFODNN7EXAMPLE aws_secret_access_key = wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY aws_session_token = AQoEXAMPLEH4aoAH0gNCAPy...truncated...zrkuWJOgQs8IZZaIv2BXIa2R4Olgk

    Nur aws_session_token für temporäre Anmeldeinformationen einschließen.

Wichtig

Entfernen Sie die Datei mit den Anmeldeinformationen vom Hostcomputer, nachdem Sie den AWS IoT Greengrass Container gestartet haben. Wenn Sie die Datei mit den Anmeldeinformationen nicht entfernen, bleiben Ihre AWS Anmeldeinformationen im Container gemountet. Weitere Informationen finden Sie unter Ausführen der AWS IoT Greengrass Core-Software in einem Container.

Erstellen einer Umgebungsdatei

In diesem Tutorial wird eine Umgebungsdatei verwendet, um die Umgebungsvariablen festzulegen, die an das AWS IoT Greengrass -Core-Softwareinstallationsprogramm im Docker-Container übergeben werden. Sie können auch das Argument -e oder in Ihrem Befehl verwenden, um Umgebungsvariablen im Docker-Container festzulegen, oder Sie können die Variablen in einem --env -Block in der -docker-compose.ymlDatei festlegen. docker run environment

  1. Verwenden Sie einen Texteditor, um eine Umgebungsdatei mit dem Namen zu erstellen.env.

    Auf einem Linux-basierten System können Sie beispielsweise den folgenden Befehl ausführen, um GNU Nano zum Erstellen des .env im aktuellen Verzeichnis zu verwenden.

    nano .env
  2. Kopieren Sie den folgenden Inhalt in die Datei .

    GGC_ROOT_PATH=/greengrass/v2 AWS_REGION=region PROVISION=true THING_NAME=MyGreengrassCore THING_GROUP_NAME=MyGreengrassCoreGroup TES_ROLE_NAME=GreengrassV2TokenExchangeRole TES_ROLE_ALIAS_NAME=GreengrassCoreTokenExchangeRoleAlias COMPONENT_DEFAULT_USER=ggc_user:ggc_group

    Ersetzen Sie dann die folgenden Werte.

    • /greengrass/v2. Der Greengrass-Stammordner, den Sie für die Installation verwenden möchten. Sie verwenden die GGC_ROOT Umgebungsvariable , um diesen Wert festzulegen.

    • Region. Die AWS-Region, in der Sie die Ressourcen erstellt haben.

    • MyGreengrassCore. Der Name des AWS IoT-Objekts. Wenn das Objekt nicht vorhanden ist, erstellt das Installationsprogramm es. Das Installationsprogramm lädt die Zertifikate herunter, um sich als das AWS IoT Objekt zu authentifizieren.

    • MyGreengrassCoreGroup. Der Name der AWS IoT Objektgruppe. Wenn die Objektgruppe nicht vorhanden ist, erstellt das Installationsprogramm sie und fügt ihr das Objekt hinzu. Wenn die Objektgruppe vorhanden ist und über eine aktive Bereitstellung verfügt, lädt das Core-Gerät die von der Bereitstellung angegebene Software herunter und führt sie aus.

    • GreengrassV2TokenExchangeRole. Ersetzen Sie durch den Namen der IAM-Token-Austauschrolle, die es dem Greengrass-Core-Gerät ermöglicht, temporäre AWS Anmeldeinformationen zu erhalten. Wenn die Rolle nicht vorhanden ist, erstellt das Installationsprogramm sie und erstellt und fügt eine Richtlinie mit dem Namen GreengrassV2TokenExchangeRoleAccess an. Weitere Informationen finden Sie unter Autorisieren Sie Kerngeräte für die Interaktion mit Diensten AWS.

    • GreengrassCoreTokenExchangeRoleAlias. Der Token-Exchange-Rollenalias. Wenn der Rollenalias nicht vorhanden ist, erstellt das Installationsprogramm ihn und verweist ihn auf die von Ihnen angegebene IAM-Token-Austauschrolle. Weitere Informationen finden Sie unter

    Anmerkung

    Sie können die DEPLOY_DEV_TOOLS Umgebungsvariable auf setzen, true um die Greengrass-CLI-Komponente bereitzustellen, mit der Sie benutzerdefinierte Komponenten innerhalb des Docker-Containers entwickeln können. Wir empfehlen, diese Komponente nur in Entwicklungsumgebungen und nicht in Produktionsumgebungen zu verwenden. Diese Komponente bietet Zugriff auf Informationen und Vorgänge, die Sie normalerweise in einer Produktionsumgebung nicht benötigen. Folgen Sie dem Prinzip der geringsten Berechtigung, indem Sie diese Komponente nur auf Core-Geräten bereitstellen, auf denen Sie sie benötigen.

Ausführen der AWS IoT Greengrass Core-Software in einem Container

In diesem Tutorial erfahren Sie, wie Sie das Docker-Image starten, das Sie in einen Docker-Container integriert haben. Sie können die Docker CLI oder die Docker Compose CLI verwenden, um das AWS IoT Greengrass Core-Software-Image in einem Docker-Container auszuführen.

Docker
  1. Führen Sie den folgenden Befehl aus, um den Docker-Container zu starten.

    docker run --rm --init -it --name docker-image \ -v path/to/greengrass-v2-credentials:/root/.aws/:ro \ --env-file .env \ -p 8883 \ your-container-image:version

    Dieser Beispielbefehl verwendet die folgenden Argumente für die Docker-Ausführung :

    • --rm. Bereinigt den Container, wenn er beendet wird.

    • --init. Verwendet einen Init-Prozess im Container.

      Anmerkung

      Das --init Argument ist erforderlich, um die AWS IoT Greengrass Core-Software herunterzufahren, wenn Sie den Docker-Container stoppen.

    • -it. (Optional) Führt den Docker-Container im Vordergrund als interaktiven Prozess aus. Sie können dies durch das -d Argument ersetzen, um den Docker-Container stattdessen im getrennten Modus auszuführen. Weitere Informationen finden Sie unter Trennen im Vergleich zum Vordergrund in der Docker-Dokumentation.

    • --name. Führt einen Container mit dem Namen aus aws-iot-greengrass

    • -v. Mountet ein Volume im Docker-Container, um die Konfigurationsdatei und die Zertifikatsdateien für die AWS IoT Greengrass Ausführung im Container verfügbar zu machen.

    • --env-file. (Optional) Gibt die Umgebungsdatei an, um die Umgebungsvariablen festzulegen, die an das AWS IoT Greengrass Core-Softwareinstallationsprogramm im Docker-Container übergeben werden. Dieses Argument ist nur erforderlich, wenn Sie eine Umgebungsdatei zum Festlegen von Umgebungsvariablen erstellt haben. Wenn Sie keine Umgebungsdatei erstellt haben, können Sie --env Argumente verwenden, um Umgebungsvariablen direkt in Ihrem Docker-Ausführungsbefehl festzulegen.

    • -p. (Optional) Veröffentlicht den 8883-Container-Port auf dem Host-Computer. Dieses Argument ist erforderlich, wenn Sie eine Verbindung herstellen und über MQTT kommunizieren möchten, da Port 8883 für MQTT-Datenverkehr AWS IoT Greengrass verwendet. Um andere Ports zu öffnen, verwenden Sie zusätzliche -p Argumente.

    Anmerkung

    Um Ihren Docker-Container mit erhöhter Sicherheit auszuführen, können Sie die Argumente --cap-drop und verwenden, um die Linux--cap-add-Funktionen für Ihren Container selektiv zu aktivieren. Weitere Informationen finden Sie unter Laufzeitberechtigungen und Linux-Funktionen in der Docker-Dokumentation.

  2. Entfernen Sie die Anmeldeinformationen von ./greengrass-v2-credentials auf dem Host-Gerät.

    rm -rf ./greengrass-v2-credentials
    Wichtig

    Sie entfernen diese Anmeldeinformationen, da sie umfassende Berechtigungen bieten, die das Core-Gerät nur während der Einrichtung benötigt. Wenn Sie diese Anmeldeinformationen nicht entfernen, können Greengrass-Komponenten und andere Prozesse, die im Container ausgeführt werden, darauf zugreifen. Wenn Sie AWS Anmeldeinformationen für eine Greengrass-Komponente bereitstellen müssen, verwenden Sie den Token-Exchange-Service. Weitere Informationen finden Sie unter Interagieren mit -AWSServices.

Docker Compose
  1. Verwenden Sie einen Texteditor, um eine Docker-Compose-Datei mit dem Namen zu erstellendocker-compose.yml.

    Auf einem Linux-basierten System können Sie beispielsweise den folgenden Befehl ausführen, um GNU Nano zum Erstellen des docker-compose.yml im aktuellen Verzeichnis zu verwenden.

    nano docker-compose.yml
    Anmerkung

    Sie können auch die neueste Version der von bereitgestellten ComposeAWS-Datei von herunterladen und verwendenGitHub.

  2. Fügen Sie der Compose-Datei den folgenden Inhalt hinzu. Die Datei sollte ähnlich wie im folgenden Beispiel aussehen. Ersetzen Sie docker-image durch den Namen Ihres Docker-Images.

    version: '3.7' services: greengrass: init: true container_name: aws-iot-greengrass image: docker-image volumes: - ./greengrass-v2-credentials:/root/.aws/:ro env_file: .env ports: - "8883:8883"

    Die folgenden Parameter in diesem Beispiel für die Compose-Datei sind optional:

    • ports– Veröffentlicht die 8883-Container-Ports auf dem Host-Computer. Dieser Parameter ist erforderlich, wenn Sie eine Verbindung herstellen und über MQTT kommunizieren möchten, da Port 8883 für MQTT-Datenverkehr AWS IoT Greengrass verwendet.

    • env_file– Gibt die Umgebungsdatei an, um die Umgebungsvariablen festzulegen, die an das AWS IoT Greengrass Core-Softwareinstallationsprogramm im Docker-Container übergeben werden. Dieser Parameter ist nur erforderlich, wenn Sie eine Umgebungsdatei zum Festlegen von Umgebungsvariablen erstellt haben. Wenn Sie keine Umgebungsdatei erstellt haben, können Sie den Umgebungsparameter verwenden, um die Variablen direkt in Ihrer Compose-Datei festzulegen.

    Anmerkung

    Um Ihren Docker-Container mit erhöhter Sicherheit auszuführen, können Sie cap_drop und cap_add in Ihrer Compose-Datei verwenden, um die Linux-Funktionen für Ihren Container selektiv zu aktivieren. Weitere Informationen finden Sie unter Laufzeitberechtigungen und Linux-Funktionen in der Docker-Dokumentation.

  3. Führen Sie den folgenden Befehl aus, um den Docker-Container zu starten.

    docker-compose -f docker-compose.yml up
  4. Entfernen Sie die Anmeldeinformationen von ./greengrass-v2-credentials auf dem Host-Gerät.

    rm -rf ./greengrass-v2-credentials
    Wichtig

    Sie entfernen diese Anmeldeinformationen, da sie umfassende Berechtigungen bieten, die das Core-Gerät nur während der Einrichtung benötigt. Wenn Sie diese Anmeldeinformationen nicht entfernen, können Greengrass-Komponenten und andere Prozesse, die im Container ausgeführt werden, darauf zugreifen. Wenn Sie AWS Anmeldeinformationen für eine Greengrass-Komponente bereitstellen müssen, verwenden Sie den Token-Exchange-Service. Weitere Informationen finden Sie unter Interagieren mit -AWSServices.

Nächste Schritte

AWS IoT Greengrass Die -Core-Software wird jetzt in einem Docker-Container ausgeführt. Führen Sie den folgenden Befehl aus, um die Container-ID für den aktuell ausgeführten Container abzurufen.

docker ps

Anschließend können Sie den folgenden Befehl ausführen, um auf den Container zuzugreifen und AWS IoT Greengrass Core-Software zu erkunden, die im Container ausgeführt wird.

docker exec -it container-id /bin/bash

Informationen zum Erstellen einer einfachen Komponente finden Sie unter Schritt 4: Entwickeln und Testen einer Komponente auf Ihrem Gerät in Tutorial: Erste Schritte mit AWS IoT Greengrass V2

Anmerkung

Wenn Sie verwenden, docker exec um Befehle im Docker-Container auszuführen, werden diese Befehle nicht in den Docker-Protokollen protokolliert. Um Ihre Befehle in den Docker-Protokollen zu protokollieren, fügen Sie eine interaktive Shell an den Docker-Container an. Weitere Informationen finden Sie unter Anfügen einer interaktiven Shell an den Docker-Container.

Die AWS IoT Greengrass Core-Protokolldatei heißt greengrass.log und befindet sich in /greengrass/v2/logs. Komponentenprotokolldateien befinden sich ebenfalls im selben Verzeichnis. Um Greengrass-Protokolle in ein temporäres Verzeichnis auf dem Host zu kopieren, führen Sie den folgenden Befehl aus:

docker cp container-id:/greengrass/v2/logs /tmp/logs

Wenn Sie Protokolle nach dem Beenden oder Entfernen eines Containers beibehalten möchten, empfehlen wir, nur das /greengrass/v2/logs Verzeichnis an das temporäre Protokollverzeichnis auf dem Host zu binden, anstatt das gesamte Greengrass-Verzeichnis zu mounten. Weitere Informationen finden Sie unter Greengrass-Protokolle außerhalb des Docker-Containers beibehalten.

Um einen laufenden AWS IoT Greengrass Docker-Container zu stoppen, führen Sie docker stop oder ausdocker-compose -f docker-compose.yml stop. Diese Aktion sendet SIGTERM an den Greengrass-Prozess und fährt alle zugehörigen Prozesse herunter, die im Container gestartet wurden. Der Docker-Container wird mit der docker-init ausführbaren Datei als Prozess-PID 1 initialisiert, was beim Entfernen aller verbleibenden Zombie-Prozesse hilft. Weitere Informationen finden Sie unter Specify an init process in der Docker-Dokumentation.

Informationen zur Behebung von Problemen mit der Ausführung AWS IoT Greengrass in einem Docker-Container finden Sie unter Fehlerbehebung bei AWS IoT Greengrass in einem Docker-Container.