Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Anatomía de la imagen dorada
AWS IoT Greengrass Los dispositivos principales que se fabrican a escala suelen ser dispositivos Linux integrados que tienen una distribución de Linux creada con herramientas como Yocto
Estos dispositivos suelen tener su sistema de archivos organizado en varias particiones. Esta guía utiliza la imagen dorada como un término general. Es posible que su dispositivo tenga varias imágenes doradas para mostrar las distintas particiones.
La imagen dorada puede abarcar la totalidad del sistema de archivos del dispositivo o solo una parte de él. Esta guía se centra en las partes del sistema de archivos que debe tener en cuenta AWS IoT Greengrass, sin especificar cómo ensamblar las imágenes de manera más amplia.
Árbol de directorios de Greengrass
Para entender los métodos de imagen dorada descritos en esta guía, revise la estructura del árbol de directorios de Greengrass que se muestra en la siguiente tabla.
Directorio |
Descripción |
---|---|
|
Parámetros de lanzamiento y enlaces simbólicos a la versión núcleo de Greengrass que está activa actualmente. |
|
Binarios, si hay alguno instalado (por ejemplo, el binario CLI de Greengrass si ese componente está instalado). Este directorio suele estar vacío. |
|
Scratchpad para la comunicación entre procesos (IPC) CLI de Greengrass. Este directorio está vacío si no ha instalado la CLI de Greengrass. |
|
Toda la configuración de Greengrass, incluida la configuración de los componentes. |
|
Datos para gestionar el estado de las implementaciones y las reversiones. |
|
Archivos de registro del núcleo y otros componentes. |
|
Artefactos y recetas para todos los componentes. |
|
Almacenamiento para los componentes del tipo |
|
Scratchpad utilizado por Greengrass para agregar datos de telemetría listos para su publicación. |
|
Bloc de notas para componentes. |
Los work
directorios logs
telemetry
, y contienen solo datos efímeros. No es necesario incluirlos en una imagen dorada, así que omítelos si quiere minimizar el tamaño de la imagen.
La CLI de Greengrass no suele instalarse en los dispositivos de producción, por lo que los cli_ipc_info
directorios bin
y suelen estar vacíos y, por lo general, no es necesario incluirlos en una imagen dorada.
El plugins
directorio incluye datos solo si instaló manualmente un complemento (como el complemento de aprovisionamiento de flota o un complemento de aprovisionamiento personalizado) al instalar Greengrass.
Los datos del deployments
directorio se usan solo cuando hay una implementación en curso y, por lo tanto, no son necesarios en una imagen completa.
Por lo tantoalts
, los packages
directorios config
y son los de mayor interés. A veces, estos son los únicos directorios de Greengrass que hay que incluir en una imagen dorada si se quiere minimizar el tamaño de la imagen.
Contenido del directorio de paquetes
El directorio de paquetes tiene tres subdirectorios, como se muestra en la siguiente tabla.
Subdirectorio |
Descripción |
---|---|
|
Los artefactos de componentes comprimidos que Greengrass descarga durante las implementaciones. |
|
En el caso de los artefactos |
|
Los archivos de recetas de los componentes. |
artefactos
El siguiente ejemplo de lista en árbol packages/artifacts
muestra cómo se almacenan los artefactos.
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
artefactos sin archivar
El siguiente ejemplo de lista en árbol packages/artifacts-unarchived
muestra los artefactos que se extraen de los archivos. .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
Tenga en cuenta que el alts
directorio enlaza con el .jar
archivo Nucleus enpackages/artifacts-unarchived
. Por ejemplo:
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
Por lo tanto, packages/artifacts-unarchived
debe incluirse en su imagen dorada.
recipes
El siguiente ejemplo de lista en árbol packages/recipes
muestra cómo se almacenan las recetas. Como se indica en la lista, las recetas se almacenan con resúmenes para ayudar a Greengrass a determinar si ya tiene los archivos correctos cuando recibe una implementación. Este formato tan específico dificulta la composición de una imagen dorada. Por lo tanto, tomar una instantánea de un dispositivo dorado es el método recomendado para crear una imagen dorada.
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
Servicio del sistema
Si Greengrass se instala como un servicio del sistema, como suele ocurrir en los dispositivos Linux integrados, la imagen dorada también debe incluir los directorios que contienen los scripts de systemd
inicio.
Imágenes de Docker
Si su dispositivo utiliza AWS IoT Greengrass componentes que incluyen imágenes de Docker como artefactos, estos artefactos se encuentran fuera del árbol de directorios de Greengrass. Por lo tanto, debe incluir el registro de imágenes de Docker del dispositivo dorado en su imagen dorada. Este registro se suele almacenar en/var/lib/docker
.
Como alternativa, puede usar los comandos de Docker para hacer una copia de las imágenes de Docker que están almacenadas en su dispositivo principal y, a continuación, cargar esas imágenes de Docker en cada dispositivo de la línea de fabricación. En general, este método es más lento y se vuelve menos escalable a medida que aumenta el número de imágenes de Docker.
Secretos
Si sus dispositivos utilizan el componente de administrador de secretos para sincronizar los secretos AWS Secrets Manager, estos secretos se almacenan en el config/config.tlog
archivo del árbol de directorios de Greengrass de su dispositivo dorado. Por ejemplo:
{"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 } ] } "}
Estos secretos también se guardan en el archivo correspondienteconfig/effectiveConfig.yaml
:
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"
Incluso si incluyes el config
directorio en tu imagen dorada, es importante recordar que el componente gestor de secretos de Greengrass cifra el secreto con la clave privada del dispositivo dorado. Como cada dispositivo tiene una clave privada única, las claves cifradas por el dispositivo dorado no las pueden descifrar los dispositivos de producción.
Por este motivo, le recomendamos que elimine los secretos cifrados de la imagen dorada para evitar que sus dispositivos de producción descifren incorrectamente los secretos de los dispositivos dorados. Los componentes de la aplicación deberían funcionar adecuadamente, o al menos fallar correctamente, cuando los secretos no estén presentes en el disco, antes de que el dispositivo se comunique por primera vez con la nube.
Cuando los secretos son un requisito ineludible
Si su organización requiere que sus dispositivos de producción se llenen de secretos durante la fabricación, su línea de producción necesita un script o un programa que reproduzca el comportamiento del componente del administrador de secretos para rellenar los secretos de cada dispositivo de producción. No recomendamos este enfoque debido a su complejidad y a la posibilidad de que sus secretos se guarden brevemente en texto claro en su estación de programación de producción.