Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Anatomie de l'image dorée
AWS IoT Greengrass les périphériques principaux fabriqués à grande échelle sont généralement des appareils Linux intégrés dotés d'une distribution Linux construite à l'aide d'outils tels que Yocto
Ces appareils ont souvent leur système de fichiers organisé en plusieurs partitions. Ce guide utilise l'image dorée comme terme fourre-tout. Votre appareil peut avoir plusieurs images dorées, pour flasher les différentes partitions.
Votre image dorée peut englober l'intégralité du système de fichiers de l'appareil ou seulement une partie de celui-ci. Ce guide se concentre sur les éléments du système de fichiers que vous devez prendre en compte AWS IoT Greengrass, sans vous indiquer comment assembler vos images de manière plus générale.
Arborescence du répertoire Greengrass
Pour comprendre les méthodes relatives aux images dorées décrites dans ce guide, consultez la structure de l'arborescence du répertoire Greengrass présentée dans le tableau suivant.
Répertoire |
Description |
---|---|
|
Paramètres de lancement et liens symboliques vers la version du noyau de Greengrass actuellement active. |
|
Les fichiers binaires, le cas échéant, sont installés (par exemple, le binaire Greengrass CLI si ce composant est installé). Ce répertoire est souvent vide. |
|
Bloc-notes pour la communication interprocessus (IPC) Greengrass CLI. Ce répertoire est vide si vous n'avez pas installé la CLI Greengrass. |
|
Toute la configuration de Greengrass, y compris la configuration des composants. |
|
Données permettant de gérer l'état des déploiements et des annulations. |
|
Fichiers journaux pour le noyau et les autres composants. |
|
Artefacts et recettes pour tous les composants. |
|
Stockage pour les composants du type |
|
Bloc-notes utilisé par Greengrass pour agréger les données de télémétrie prêtes à être publiées. |
|
Bloc-notes pour les composants. |
Les work
répertoireslogs
,telemetry
, et ne contiennent que des données éphémères. Il n'est pas nécessaire de les inclure dans une image dorée, alors omettez-les si vous souhaitez minimiser la taille de l'image.
La CLI Greengrass n'étant généralement pas installée sur les appareils de production, les cli_ipc_info
répertoires bin
et sont souvent vides et n'ont généralement pas besoin d'être inclus dans une image dorée.
Le plugins
répertoire inclut des données uniquement si vous avez installé manuellement un plugin (tel que le plug-in de provisionnement de flotte ou un plugin de provisionnement personnalisé) lors de l'installation de Greengrass.
Les données du deployments
répertoire ne sont utilisées que lorsqu'un déploiement est en cours et ne sont donc pas nécessaires dans une image dorée.
Par conséquentalts
, les packages
annuaires, config
et présentent le plus grand intérêt. Ce sont parfois les seuls répertoires Greengrass que vous devez inclure dans une image dorée, si vous souhaitez minimiser la taille de l'image.
Contenu du répertoire des packages
Le répertoire des packages comporte trois sous-répertoires, comme indiqué dans le tableau suivant.
Sous-répertoire |
Description |
---|---|
|
Les artefacts des composants compressés que Greengrass télécharge lors des déploiements. |
|
Pour les artefacts qui sont des |
|
Les fichiers de recette des composants. |
artefacts
L'exemple de liste arborescente suivant packages/artifacts
montre comment les artefacts sont stockés.
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
artefacts non archivés
L'exemple suivant de liste arborescente packages/artifacts-unarchived
montre les artefacts extraits de .zip
fichiers.
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
Notez que le alts
répertoire est lié au .jar
fichier Nucleus danspackages/artifacts-unarchived
. Par exemple :
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
Par conséquent, packages/artifacts-unarchived
il doit être inclus dans votre image dorée.
recipes
L'exemple de liste arborescente suivant packages/recipes
montre comment les recettes sont stockées. Comme l'indique la liste, les recettes sont stockées avec des résumés pour aider Greengrass à déterminer s'il possède déjà les bons fichiers lorsqu'il reçoit un déploiement. Ce format très spécifique rend difficile la composition d'une image dorée. Par conséquent, la prise d'un instantané d'un appareil doré est la méthode recommandée pour créer une image dorée.
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
Service du système
Si Greengrass est installé en tant que service système, comme c'est généralement le cas pour les appareils Linux intégrés, l'image dorée doit également inclure les répertoires contenant les scripts de systemd
démarrage.
Images Docker
Si votre appareil utilise des AWS IoT Greengrass composants contenant des images Docker en tant qu'artefacts, ces artefacts se trouvent en dehors de l'arborescence du répertoire Greengrass. Par conséquent, vous devez inclure le registre d'images Docker du périphérique doré dans votre image dorée. Ce registre est généralement stocké dans/var/lib/docker
.
Vous pouvez également utiliser les commandes Docker pour créer une copie des images Docker stockées sur votre appareil doré, puis charger ces images Docker sur chaque appareil de votre chaîne de fabrication. En général, cette méthode est plus lente et devient moins évolutive à mesure que le nombre d'images Docker augmente.
Secrets
Si vos appareils utilisent le composant du gestionnaire de secrets pour synchroniser les secrets AWS Secrets Manager, ceux-ci sont stockés dans le config/config.tlog
fichier de l'arborescence de répertoires Greengrass de votre appareil doré. Par exemple :
{"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 } ] } "}
Ces secrets sont également enregistrés dans le config/effectiveConfig.yaml
fichier correspondant :
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"
Même si vous incluez le config
répertoire dans votre image dorée, il est important de vous rappeler que le composant du gestionnaire de secrets Greengrass chiffre le secret à l'aide de la clé privée de l'appareil doré. Comme chaque appareil possède une clé privée unique, les clés chiffrées par votre appareil doré ne peuvent pas être déchiffrées par vos appareils de production.
C'est pourquoi nous vous recommandons de supprimer les secrets chiffrés de l'image dorée afin d'éviter que vos appareils de production ne déchiffrent incorrectement les secrets des appareils dorés. Les composants de votre application doivent fonctionner correctement, ou du moins échouer correctement, lorsque des secrets ne sont pas présents sur le disque, avant qu'un appareil n'établisse sa première communication avec le cloud.
Quand les secrets sont une exigence absolue
Si votre organisation exige que vos appareils de production soient remplis de secrets lors de la fabrication, votre chaîne de production a besoin d'un script ou d'un programme qui reproduit le comportement du composant du gestionnaire de secrets, afin de renseigner les secrets sur chaque appareil de production. Nous ne recommandons pas cette approche en raison de sa complexité et de la possibilité que vos secrets soient brièvement conservés en texte clair sur votre station de programmation de production.