Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Anatomia dell'immagine dorata
AWS IoT Greengrass i dispositivi principali prodotti su larga scala sono generalmente dispositivi Linux integrati con una distribuzione Linux costruita utilizzando strumenti come Yocto
Tali dispositivi hanno spesso il loro file system organizzato in più partizioni. Questa guida utilizza l'immagine dorata come termine generico. Il dispositivo potrebbe avere diverse immagini dorate, per eseguire il flashing delle varie partizioni.
La tua immagine dorata potrebbe comprendere l'intero file system del dispositivo o solo una parte di esso. Questa guida si concentra sulle parti del file system da prendere in considerazione AWS IoT Greengrass, senza prescrivere come assemblare le immagini in modo più ampio.
Albero di elenchi Greengrass
Per comprendere i metodi delle immagini dorate discussi in questa guida, esaminate la struttura dell'albero di directory Greengrass mostrato nella tabella seguente.
Directory |
Descrizione |
---|---|
|
Parametri di avvio e collegamenti simbolici alla versione Greengrass nucleus attualmente attiva. |
|
I file binari, se presenti, sono installati (ad esempio, il binario della CLI di Greengrass se tale componente è installato). Questa directory è spesso vuota. |
|
Scratchpad per la comunicazione interprocesso (IPC) CLI di Greengrass. Questa directory è vuota se non è stata installata la CLI di Greengrass. |
|
Tutta la configurazione di Greengrass, inclusa la configurazione dei componenti. |
|
Dati per la gestione dello stato delle implementazioni e dei rollback. |
|
File di registro per il nucleo e altri componenti. |
|
Artefatti e ricette per tutti i componenti. |
|
Archiviazione per componenti del tipo |
|
Scratchpad utilizzato da Greengrass per aggregare dati di telemetria pronti per la pubblicazione. |
|
Scratchpad per componenti. |
Le work
cartelle logs
telemetry
, e contengono solo dati effimeri. Non è necessario includerli in un'immagine dorata, quindi omettili se vuoi ridurre al minimo le dimensioni dell'immagine.
La CLI di Greengrass di solito non è installata sui dispositivi di produzione, quindi le cli_ipc_info
directory bin
e sono spesso vuote e in genere non devono essere incluse in un'immagine dorata.
La plugins
directory include dati solo se hai installato manualmente un plug-in (come il plug-in di provisioning della flotta o un plug-in di provisioning personalizzato) quando hai installato Greengrass.
I dati nella deployments
directory vengono utilizzati solo quando è in corso una distribuzione e quindi non sono necessari in un'immagine dorata.
Di conseguenzaalts
, le packages
directory config
e sono di grande interesse. A volte queste sono le uniche directory Greengrass da includere in un'immagine dorata, se si desidera ridurre al minimo le dimensioni dell'immagine.
Contenuto della cartella dei pacchetti
La directory packages ha tre sottodirectory, come illustrato nella tabella seguente.
Sottodirectory |
Descrizione |
---|---|
|
Gli artefatti dei componenti compressi che Greengrass scarica durante le distribuzioni. |
|
Per gli artefatti che sono |
|
I file di ricette dei componenti. |
artefatti
Il seguente elenco ad albero di esempio packages/artifacts
mostra come vengono archiviati gli artefatti.
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
artefatti: non archiviati
Il seguente elenco ad albero di esempio packages/artifacts-unarchived
mostra gli artefatti estratti dai file. .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
Notate che la alts
directory si collega al file .jar
Nucleus in. packages/artifacts-unarchived
Per esempio:
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
Pertanto, packages/artifacts-unarchived
deve essere inclusa nella vostra immagine dorata.
recipes
Il seguente elenco ad albero di esempio packages/recipes
mostra come vengono memorizzate le ricette. Come indicato nell'elenco, le ricette vengono archiviate con digest per aiutare Greengrass a determinare se dispone già dei file corretti quando riceve una distribuzione. Questo formato altamente specifico rende difficile la composizione di un'immagine dorata. Di conseguenza, scattare un'istantanea di un dispositivo dorato è il metodo consigliato per creare un'immagine dorata.
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
Servizio di sistema
Se Greengrass è installato come servizio di sistema, come avviene comunemente per i dispositivi Linux integrati, l'immagine dorata deve includere anche le directory che contengono gli systemd
script di avvio.
Immagini Docker
Se il tuo dispositivo utilizza AWS IoT Greengrass componenti che presentano immagini Docker come artefatti, questi artefatti si trovano all'esterno dell'albero delle directory di Greengrass. Pertanto, è necessario includere il registro delle immagini Docker del dispositivo dorato nell'immagine dorata. Questo registro è in genere archiviato in/var/lib/docker
.
In alternativa, puoi utilizzare i comandi Docker per creare una copia delle immagini Docker archiviate sul tuo dispositivo dorato e quindi caricare tali immagini Docker su ogni dispositivo della linea di produzione. In generale, questo metodo è più lento e diventa meno scalabile all'aumentare del numero di immagini Docker.
Segreti
Se i tuoi dispositivi utilizzano il componente Secret Manager per sincronizzare i segreti AWS Secrets Manager, questi segreti vengono memorizzati nel config/config.tlog
file nell'albero delle directory Greengrass del tuo dispositivo dorato. Per esempio:
{"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 } ] } "}
Questi segreti sono inoltre memorizzati nel file corrispondenteconfig/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"
Anche se includi la config
directory nella tua immagine dorata, è importante ricordare che il componente secret manager di Greengrass crittografa il segreto con la chiave privata del dispositivo dorato. Poiché ogni dispositivo ha una chiave privata unica, le chiavi crittografate dal dispositivo golden non possono essere decrittografate dai dispositivi di produzione.
Per questo motivo, ti consigliamo di rimuovere i segreti crittografati dall'immagine dorata per evitare che i dispositivi di produzione decifrino erroneamente i segreti dei dispositivi dorati. I componenti dell'applicazione dovrebbero funzionare in modo adeguato, o almeno non funzionare correttamente, quando i segreti non sono presenti sul disco, prima che un dispositivo abbia la prima comunicazione con il cloud.
Quando i segreti sono un requisito fondamentale
Se l'organizzazione richiede che i dispositivi di produzione siano dotati di segreti durante la produzione, la linea di produzione necessita di uno script o di un programma che riproduca il comportamento del componente secret manager, per inserire i segreti su ogni dispositivo di produzione. Non consigliamo questo approccio a causa della sua complessità e della possibilità che i segreti possano essere conservati brevemente in chiaro sulla stazione di programmazione di produzione.