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.
Anatomie des goldenen Bildes
AWS IoT Greengrass Bei Kerngeräten, die in großem Maßstab hergestellt werden, handelt es sich in der Regel um eingebettete Linux-Geräte mit einer Linux-Distribution, die mithilfe von Tools wie Yocto
Das Dateisystem solcher Geräte ist häufig in mehreren Partitionen organisiert. In diesem Leitfaden wird Golden Image als Sammelbegriff verwendet. Ihr Gerät verfügt möglicherweise über mehrere Golden Images, um die verschiedenen Partitionen zu flashen.
Ihr goldenes Image kann das gesamte Dateisystem des Geräts oder nur einen Teil davon umfassen. Dieses Handbuch konzentriert sich auf die Teile des Dateisystems, die Sie berücksichtigen müssen AWS IoT Greengrass, ohne vorzuschreiben, wie Sie Ihre Images umfassender zusammenstellen müssen.
Greengrass-Verzeichnisbaum
Um die in diesem Handbuch beschriebenen Golden Image-Methoden zu verstehen, sehen Sie sich die Struktur des Greengrass-Verzeichnisbaums in der folgenden Tabelle an.
Verzeichnis |
Beschreibung |
---|---|
|
Startparameter und symbolische Links zur Greengrass Nucleus-Version, die derzeit aktiv ist. |
|
Binärdateien, falls vorhanden, installiert sind (z. B. die Greengrass-CLI-Binärdatei, falls diese Komponente installiert ist). Dieses Verzeichnis ist oft leer. |
|
Scratchpad für Greengrass CLI Interprocess Communication (IPC). Dieses Verzeichnis ist leer, wenn Sie die Greengrass-CLI nicht installiert haben. |
|
Die gesamte Greengrass-Konfiguration, einschließlich der Komponentenkonfiguration. |
|
Daten zur Verwaltung des Status von Bereitstellungen und Rollbacks. |
|
Protokolldateien für den Nucleus und andere Komponenten. |
|
Artefakte und Rezepte für alle Komponenten. |
|
Speicher für Komponenten des Typs |
|
Scratchpad wird von Greengrass verwendet, um Telemetriedaten zusammenzufassen, die zur Veröffentlichung bereit sind. |
|
Scratchpad für Komponenten. |
Die work
Verzeichnisse logs
telemetry
, und enthalten nur kurzlebige Daten. Sie müssen nicht in einem goldenen Bild enthalten sein. Lassen Sie sie also weg, wenn Sie die Größe des Bildes minimieren möchten.
Die Greengrass-CLI wird normalerweise nicht auf Produktionsgeräten installiert, daher sind die cli_ipc_info
Verzeichnisse bin
und oft leer und müssen normalerweise nicht in einem Golden Image enthalten sein.
Das plugins
Verzeichnis enthält nur Daten, wenn Sie bei der Installation von Greengrass ein Plugin (z. B. das Fleet Provisioning Plugin oder ein benutzerdefiniertes Provisioning-Plugin) manuell installiert haben.
Die Daten im deployments
Verzeichnis werden nur verwendet, wenn eine Bereitstellung im Gange ist, und werden daher in einem Golden Image nicht benötigt.
Daher sind die packages
Verzeichnissealts
, config
und von größtem Interesse. Manchmal sind dies die einzigen Greengrass-Verzeichnisse, die Sie in ein goldenes Bild aufnehmen müssen, wenn Sie die Bildgröße minimieren möchten.
Inhalt des Paketverzeichnisses
Das Paketverzeichnis hat drei Unterverzeichnisse, wie in der folgenden Tabelle dargestellt.
Unterverzeichnis |
Beschreibung |
---|---|
|
Die komprimierten Komponentenartefakte, die Greengrass während der Bereitstellung herunterlädt. |
|
Bei Artefakten, bei denen es sich um |
|
Die Rezeptdateien der Komponenten. |
Artefakte
Die folgende Beispielbaumliste von packages/artifacts
zeigt, wie Artefakte gespeichert werden.
user@machine:~$ sudo tree /greengrass/v2/packages/artifacts /greengrass/v2/packages/artifacts ├── aws.greengrass.DockerApplicationManager ├── aws.greengrass.LogManager │ └── 2.3.7 │ └── aws.greengrass.LogManager.jar ├── aws.greengrass.Nucleus │ └── 2.12.6 │ └── aws.greengrass.nucleus.zip ├── aws.greengrass.SecretManager │ └── 2.1.8 │ └── aws.greengrass.SecretManager.jar ├── aws.greengrass.SecureTunneling │ └── 1.0.19 │ └── GreengrassV2SecureTunnelingComponent-1.0-all.jar ├── aws.greengrass.labs.CertificateRotator │ └── 1.1.0 │ └── certificate-rotator.zip ├── aws.greengrass.labs.HomeAssistant │ └── 1.0.0 │ └── home-assistant.zip └── aws.greengrass.telemetry.NucleusEmitter └── 1.0.8 └── aws.greengrass.telemetry.NucleusEmitter.jar 15 directories, 7 files
Artefakte — nicht archiviert
Die folgende Beispiel-Baumliste von packages/artifacts-unarchived
zeigt Artefakte, die aus Dateien extrahiert wurden. .zip
user@machine:~$ sudo tree /greengrass/v2/packages/artifacts-unarchived /greengrass/v2/packages/artifacts-unarchived ├── aws.greengrass.Nucleus │ └── 2.12.6 │ └── aws.greengrass.nucleus │ ├── LICENSE │ ├── NOTICE │ ├── README.md │ ├── THIRD-PARTY-LICENSES │ ├── bin │ │ ├── greengrass.exe │ │ ├── greengrass.service │ │ ├── greengrass.service.procd.template │ │ ├── greengrass.service.template │ │ ├── greengrass.xml.template │ │ ├── loader │ │ └── loader.cmd │ ├── conf │ │ └── recipe.yaml │ └── lib │ └── Greengrass.jar ├── aws.greengrass.SecureTunneling │ └── 1.0.19 ├── aws.greengrass.labs.CertificateRotator │ └── 1.1.0 │ └── certificate-rotator │ ├── __pycache__ │ │ ├── config.cpython-310.pyc │ │ ├── config.cpython-311.pyc │ │ ├── effective_config.cpython-310.pyc │ │ ├── effective_config.cpython-311.pyc │ │ ├── main.cpython-311.pyc │ │ ├── pki.cpython-310.pyc │ │ ├── pki.cpython-311.pyc │ │ ├── pki_file.cpython-310.pyc │ │ ├── pki_file.cpython-311.pyc │ │ ├── pki_hsm.cpython-310.pyc │ │ ├── pki_hsm.cpython-311.pyc │ │ ├── pubsub.cpython-310.pyc │ │ ├── pubsub.cpython-311.pyc │ │ ├── state.cpython-310.pyc │ │ ├── state.cpython-311.pyc │ │ ├── state_committing_certificate.cpython-310.pyc │ │ ├── state_committing_certificate.cpython-311.pyc │ │ ├── state_creating_certificate.cpython-310.pyc │ │ ├── state_creating_certificate.cpython-311.pyc │ │ ├── state_getting_job.cpython-310.pyc │ │ ├── state_getting_job.cpython-311.pyc │ │ ├── state_idle.cpython-310.pyc │ │ ├── state_idle.cpython-311.pyc │ │ ├── state_machine.cpython-310.pyc │ │ ├── state_machine.cpython-311.pyc │ │ ├── state_updating_job.cpython-310.pyc │ │ ├── state_updating_job.cpython-311.pyc │ │ ├── topic_base.cpython-310.pyc │ │ └── topic_base.cpython-311.pyc │ ├── config.py │ ├── effective_config.py │ ├── main.py │ ├── pki.py │ ├── pki_file.py │ ├── pki_hsm.py │ ├── pubsub.py │ ├── requirements.txt │ ├── scripts │ │ └── run.cmd │ ├── state.py │ ├── state_committing_certificate.py │ ├── state_creating_certificate.py │ ├── state_getting_job.py │ ├── state_idle.py │ ├── state_machine.py │ ├── state_updating_job.py │ └── topic_base.py └── aws.greengrass.labs.HomeAssistant └── 1.0.0 └── home-assistant ├── config │ ├── automations.yaml │ ├── configuration.yaml │ ├── groups.yaml │ ├── scenes.yaml │ └── scripts.yaml ├── docker-compose.yml ├── install.py └── secret.py 17 directories, 67 files
Beachten Sie, dass das alts
Verzeichnis auf die .jar
Nucleus-Datei in verweistpackages/artifacts-unarchived
. Zum Beispiel:
user@machine:~$ sudo ls -l /greengrass/v2/alts/init total 8 lrwxrwxrwx 1 root root 97 Jun 27 08:12 distro -> /greengrass/v2/packages/artifacts-unarchived/aws.greengrass.Nucleus/2.12.6/aws.greengrass.nucleus -rw-r--r-- 1 root root 16 Jun 27 07:07 launch.params
Daher packages/artifacts-unarchived
muss es in Ihrem goldenen Bild enthalten sein.
recipes
Die folgende Beispielbaumliste von packages/recipes
zeigt, wie Rezepte gespeichert werden. Wie aus der Liste hervorgeht, werden Rezepte zusammen mit Digests gespeichert, damit Greengrass feststellen kann, ob es bereits über die richtigen Dateien verfügt, wenn es eine Bereitstellung erhält. Dieses hochspezifische Format macht es schwierig, ein perfektes Bild zu erstellen. Daher ist die Erstellung eines Schnappschusses eines goldenen Geräts die empfohlene Methode zur Erstellung eines goldenen Images.
user@machine:~$ sudo tree /greengrass/v2/packages/recipes /greengrass/v2/packages/recipes ├── 0ya1warrMfzlq5PUTvOgfHOununru_xCLUFACECM_R0@2.3.7.metadata.json ├── 0ya1warrMfzlq5PUTvOgfHOununru_xCLUFACECM_R0@2.3.7.recipe.yaml ├── 89r1-ak7xPauDt4O7EG03sSXVUO8ysdHTk-YdF0NAAc@2.12.6.metadata.json ├── 89r1-ak7xPauDt4O7EG03sSXVUO8ysdHTk-YdF0NAAc@2.12.6.recipe.yaml ├── VAZ-Grqe5g43yO7UtasQOR5jcQGILgPeRZQhVikLd9o@1.0.0.metadata.json ├── VAZ-Grqe5g43yO7UtasQOR5jcQGILgPeRZQhVikLd9o@1.0.0.recipe.yaml ├── ViMYPYs99-AzSt1gL2L2YD5P7sIN-yEhy23wWJK_JN8@1.0.8.metadata.json ├── ViMYPYs99-AzSt1gL2L2YD5P7sIN-yEhy23wWJK_JN8@1.0.8.recipe.yaml ├── _1hT2A6X0ZYtB_CfI_ZUOEMDV96DfQVkSmZh2bbGYXg@1.0.19.metadata.json ├── _1hT2A6X0ZYtB_CfI_ZUOEMDV96DfQVkSmZh2bbGYXg@1.0.19.recipe.yaml ├── gQWwM7MSL2kOsBADU9bOQJ1QqO8ZI3hqpbKT5Bv4Ijk@1.1.0.metadata.json ├── gQWwM7MSL2kOsBADU9bOQJ1QqO8ZI3hqpbKT5Bv4Ijk@1.1.0.recipe.yaml ├── j_j5Seyy01FOcIh95nBFy4HYf8P1kT-jW_nmV18ldbk@2.1.8.metadata.json └── j_j5Seyy01FOcIh95nBFy4HYf8P1kT-jW_nmV18ldbk@2.1.8.recipe.yaml 0 directories, 14 files
Systemdienst
Wenn Greengrass als Systemdienst installiert wird, wie es üblicherweise für eingebettete Linux-Geräte der Fall ist, muss das Goldene Image auch die Verzeichnisse enthalten, die die systemd
Startskripts enthalten.
Docker-Images
Wenn Ihr Gerät AWS IoT Greengrass Komponenten verwendet, die Docker-Images als Artefakte enthalten, befinden sich diese Artefakte außerhalb des Greengrass-Verzeichnisbaums. Daher müssen Sie die Docker-Image-Registrierung des goldenen Geräts in Ihr goldenes Image aufnehmen. Diese Registrierung wird normalerweise in /var/lib/docker
gespeichert.
Alternativ können Sie Docker-Befehle verwenden, um eine Kopie der Docker-Images zu erstellen, die auf Ihrem Golden Device gespeichert sind, und diese Docker-Images dann auf jedes Gerät in Ihrer Fertigungslinie laden. Im Allgemeinen ist diese Methode langsamer und wird mit zunehmender Anzahl von Docker-Images weniger skalierbar.
Secrets
Wenn Ihre Geräte die Secret Manager-Komponente zum Synchronisieren von Geheimnissen verwenden AWS Secrets Manager, werden diese Geheimnisse in der config/config.tlog
Datei im Greengrass-Verzeichnisbaum Ihres goldenen Geräts gespeichert. Zum Beispiel:
{"TS":1718878001465, "TP":["services","aws.greengrass.SecretManager","runtime","secretResponse"], "W":"changed", "V":"{\"secrets\":[ { \"arn\":\"arn:aws:secretsmanager:us-east-1:111122223333:secret:greengrass-home-assistant-KIzJfZ\", \"name\":\"greengrass-home-assistant\", \"versionId\":\"8e481177-9250-4458-9f1f-3690d28e4ae9\", \"encryptedSecretString\":\"AgV4j+We ... A7QjdE1w==\", \"versionStages\":[\"AWSCURRENT\"], \"createdDate\":1660648425915 } ] } "}
Diese Geheimnisse werden auch in der entsprechenden config/effectiveConfig.yaml
Datei gespeichert:
aws.greengrass.SecretManager: componentType: "PLUGIN" configuration: cloudSecrets: - arn: "arn:aws:secretsmanager:us-east-1:111122223333:secret:greengrass-home-assistant-KIzJfZ" dependencies: - "aws.greengrass.Nucleus:SOFT" lifecycle: {} runtime: secretResponse: "{\"secrets\":[{\"arn\":\"arn:aws:secretsmanager:us-east-1:111122223333:secret:greengrass-home-assistant-KIzJfZ\"\ ,\"name\":\"greengrass-home-assistant\",\"versionId\":\"8e481177-9250-4458-9f1f-3690d28e4ae9\"\ ,\"encryptedSecretString\":\"AgV4Rpc9 ... MYeVALYQ==\"\ ,\"versionStages\":[\"AWSCURRENT\"],\"createdDate\":1660648425915}]}" version: "2.1.8"
Auch wenn Sie das config
Verzeichnis in Ihr Golden Image aufnehmen, ist es wichtig, sich daran zu erinnern, dass die Greengrass Secret Manager-Komponente das Geheimnis mit dem privaten Schlüssel des goldenen Geräts verschlüsselt. Da jedes Gerät über einen eigenen privaten Schlüssel verfügt, können Schlüssel, die mit Ihrem goldenen Gerät verschlüsselt wurden, nicht von Ihren Produktionsgeräten entschlüsselt werden.
Aus diesem Grund empfehlen wir Ihnen, verschlüsselte Geheimnisse aus dem goldenen Bild zu entfernen, um zu verhindern, dass Ihre Produktionsgeräte goldene Gerätegeheimnisse fälschlicherweise entschlüsseln. Ihre Anwendungskomponenten sollten ordnungsgemäß funktionieren oder zumindest fehlerfrei ausfallen, wenn Geheimnisse nicht auf der Festplatte vorhanden sind, bevor ein Gerät zum ersten Mal mit der Cloud kommuniziert.
Wenn Geheimnisse eine dringende Anforderung sind
Wenn Ihre Organisation verlangt, dass Ihre Produktionsgeräte während der Herstellung mit Geheimnissen gefüllt werden, benötigt Ihre Produktionslinie ein Skript oder Programm, das das Verhalten der Secret Manager-Komponente repliziert, um Geheimnisse auf jedem Produktionsgerät zu speichern. Wir empfehlen diesen Ansatz nicht, da er komplex ist und die Möglichkeit besteht, dass Ihre Geheimnisse kurzzeitig im Klartext auf Ihrer Produktionsprogrammierstation gespeichert werden.