Anatomie des goldenen Bildes - AWS Präskriptive Leitlinien

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 erstellt wurde. In der Regel ist die Greengrass Edge-Laufzeit in die Distribution integriert, wie das Meta AWS-Projekt gezeigt hat.

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

alts

Startparameter und symbolische Links zur Greengrass Nucleus-Version, die derzeit aktiv ist.

bin

Binärdateien, falls vorhanden, installiert sind (z. B. die Greengrass-CLI-Binärdatei, falls diese Komponente installiert ist). Dieses Verzeichnis ist oft leer.

cli_ipc_info

Scratchpad für Greengrass CLI Interprocess Communication (IPC). Dieses Verzeichnis ist leer, wenn Sie die Greengrass-CLI nicht installiert haben.

config

Die gesamte Greengrass-Konfiguration, einschließlich der Komponentenkonfiguration.

deployments

Daten zur Verwaltung des Status von Bereitstellungen und Rollbacks.

logs

Protokolldateien für den Nucleus und andere Komponenten.

packages

Artefakte und Rezepte für alle Komponenten.

plugins

Speicher für Komponenten des Typsaws.greengrass.plugin, den Sie manuell installiert haben. Andernfalls enthält dieses Verzeichnis keine Daten.

telemetry

Scratchpad wird von Greengrass verwendet, um Telemetriedaten zusammenzufassen, die zur Veröffentlichung bereit sind.

work

Scratchpad für Komponenten.

Die work Verzeichnisse logstelemetry, 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

artifacts

Die komprimierten Komponentenartefakte, die Greengrass während der Bereitstellung herunterlädt.

artifacts-unarchived

Bei Artefakten, bei denen es sich um .zip Archive handelt, enthält dieses Verzeichnis dieselben Artefakte, sie sind jedoch entpackt, sodass Komponenten den Artefaktinhalt verwenden können.

recipes

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.