As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Anatomia da imagem dourada
AWS IoT Greengrass os dispositivos principais fabricados em grande escala geralmente são dispositivos Linux incorporados que têm uma distribuição Linux construída usando ferramentas como o Yocto
Esses dispositivos geralmente têm seu sistema de arquivos organizado em várias partições. Este guia usa imagem dourada como um termo abrangente. Seu dispositivo pode ter várias imagens douradas para exibir as várias partições.
Sua imagem dourada pode abranger todo o sistema de arquivos do dispositivo ou apenas parte dele. Este guia se concentra nas partes do sistema de arquivos que você precisa considerar AWS IoT Greengrass, sem prescrever como montar suas imagens de forma mais ampla.
Árvore de diretórios do Greengrass
Para entender os métodos de imagem dourada discutidos neste guia, revise a estrutura da árvore de diretórios do Greengrass mostrada na tabela a seguir.
Diretório |
Descrição |
---|---|
|
Parâmetros de inicialização e links simbólicos para a versão do núcleo do Greengrass que está atualmente ativa. |
|
Binários, se houver, estão instalados (por exemplo, o binário da CLI do Greengrass se esse componente estiver instalado). Esse diretório geralmente está vazio. |
|
Scratchpad para comunicação entre processos (IPC) do Greengrass CLI. Esse diretório estará vazio se você não tiver instalado a CLI do Greengrass. |
|
Toda a configuração do Greengrass, incluindo a configuração de componentes. |
|
Dados para gerenciar o estado das implantações e reversões. |
|
Arquivos de log para o núcleo e outros componentes. |
|
Artefatos e receitas para todos os componentes. |
|
Armazenamento para componentes do tipo |
|
Scratchpad usado pelo Greengrass para agregar dados de telemetria prontos para publicação. |
|
Bloco de anotações para componentes. |
Os work
diretórios logs
telemetry
, e contêm somente dados efêmeros. Eles não precisam ser incluídos em uma imagem dourada, então omita-os se quiser minimizar o tamanho da imagem.
A CLI do Greengrass geralmente não é instalada em dispositivos de produção, então os cli_ipc_info
diretórios bin
e geralmente estão vazios e normalmente não precisam ser incluídos em uma imagem dourada.
O plugins
diretório inclui dados somente se você instalou manualmente um plug-in (como o plug-in de provisionamento de frota ou um plug-in de provisionamento personalizado) ao instalar o Greengrass.
Os dados no deployments
diretório são usados somente quando uma implantação está em andamento e, portanto, não são necessários em uma imagem dourada.
Consequentementealts
, os packages
diretórios, config
e são de grande interesse. Às vezes, esses são os únicos diretórios do Greengrass que você precisa incluir em uma imagem dourada, se quiser minimizar o tamanho da imagem.
Conteúdo do diretório de pacotes
O diretório de pacotes tem três subdiretórios, conforme mostrado na tabela a seguir.
Subdiretório |
Descrição |
---|---|
|
Os artefatos do componente compactado que o Greengrass baixa durante as implantações. |
|
Para artefatos que são |
|
Os arquivos de receita do componente. |
artefatos
O exemplo de listagem em árvore a seguir packages/artifacts
mostra como os artefatos são armazenados.
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
artefatos não arquivados
O exemplo de listagem em árvore a seguir packages/artifacts-unarchived
mostra artefatos que são .zip
extraídos dos arquivos.
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
Observe que o alts
diretório está vinculado ao .jar
arquivo Nucleus empackages/artifacts-unarchived
. Por exemplo:
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
Portanto, packages/artifacts-unarchived
deve ser incluído na sua imagem dourada.
recipes
O exemplo de listagem em árvore a seguir packages/recipes
mostra como as receitas são armazenadas. Como indica a lista, as receitas são armazenadas com resumos para ajudar o Greengrass a determinar se ele já tem os arquivos corretos quando recebe uma implantação. Esse formato altamente específico dificulta a composição de uma imagem dourada. Consequentemente, tirar uma foto de um dispositivo dourado é o método recomendado para criar uma imagem dourada.
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
Serviço de sistema
Se o Greengrass for instalado como um serviço do sistema, como é comum em dispositivos Linux embarcados, a imagem dourada também deve incluir os diretórios que contêm os systemd
scripts de inicialização.
Imagens de Docker
Se seu dispositivo usa AWS IoT Greengrass componentes que apresentam imagens do Docker como artefatos, esses artefatos ficam fora da árvore de diretórios do Greengrass. Portanto, você precisa incluir o registro de imagem Docker do dispositivo dourado em sua imagem dourada. Esse registro geralmente é armazenado em/var/lib/docker
.
Como alternativa, você pode usar os comandos do Docker para fazer uma cópia das imagens do Docker que estão armazenadas em seu dispositivo dourado e, em seguida, carregar essas imagens do Docker em cada dispositivo em sua linha de fabricação. Em geral, esse método é mais lento e se torna menos escalável à medida que o número de imagens do Docker aumenta.
Segredos
Se seus dispositivos usam o componente gerenciador de segredos para sincronizar segredos AWS Secrets Manager, esses segredos são armazenados no config/config.tlog
arquivo na árvore de diretórios do Greengrass do seu dispositivo dourado. Por exemplo:
{"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 } ] } "}
Esses segredos também são armazenados no config/effectiveConfig.yaml
arquivo correspondente:
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"
Mesmo que você inclua o config
diretório em sua imagem dourada, é importante lembrar que o componente gerenciador de segredos do Greengrass criptografa o segredo com a chave privada do dispositivo dourado. Como cada dispositivo tem uma chave privada exclusiva, as chaves que foram criptografadas por seu dispositivo dourado não podem ser descriptografadas por seus dispositivos de produção.
Por esse motivo, recomendamos que você remova os segredos criptografados da imagem dourada para evitar que seus dispositivos de produção descriptografem incorretamente os segredos dourados do dispositivo. Os componentes do seu aplicativo devem funcionar adequadamente, ou pelo menos falhar normalmente, quando os segredos não estão presentes no disco, antes que um dispositivo tenha sua primeira comunicação com a nuvem.
Quando segredos são um requisito difícil
Se sua organização exige que seus dispositivos de produção sejam preenchidos com segredos durante a fabricação, sua linha de produção precisa de um script ou programa que replique o comportamento do componente gerenciador secreto para preencher segredos em cada dispositivo de produção. Não recomendamos essa abordagem devido à sua complexidade e à possibilidade de que seus segredos possam ser mantidos brevemente em texto não criptografado em sua estação de programação de produção.