Anatomia dell'immagine dorata - AWS Guida prescrittiva

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. In genere, il runtime Greengrass edge è integrato nella distribuzione, come dimostrato dal progetto Meta AWS.

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

alts

Parametri di avvio e collegamenti simbolici alla versione Greengrass nucleus attualmente attiva.

bin

I file binari, se presenti, sono installati (ad esempio, il binario della CLI di Greengrass se tale componente è installato). Questa directory è spesso vuota.

cli_ipc_info

Scratchpad per la comunicazione interprocesso (IPC) CLI di Greengrass. Questa directory è vuota se non è stata installata la CLI di Greengrass.

config

Tutta la configurazione di Greengrass, inclusa la configurazione dei componenti.

deployments

Dati per la gestione dello stato delle implementazioni e dei rollback.

logs

File di registro per il nucleo e altri componenti.

packages

Artefatti e ricette per tutti i componenti.

plugins

Archiviazione per componenti del tipo aws.greengrass.plugin installato manualmente. Altrimenti, questa directory non contiene dati.

telemetry

Scratchpad utilizzato da Greengrass per aggregare dati di telemetria pronti per la pubblicazione.

work

Scratchpad per componenti.

Le work cartelle logstelemetry, 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

artifacts

Gli artefatti dei componenti compressi che Greengrass scarica durante le distribuzioni.

artifacts-unarchived

Per gli artefatti che sono .zip archivi, questa directory contiene gli stessi artefatti, ma vengono decompressi in modo che i componenti possano utilizzarne il contenuto.

recipes

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.