Procedura Golden Image - 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à.

Procedura Golden Image

Le sezioni seguenti descrivono la procedura per creare un'immagine dorata e scriverla su ogni dispositivo della linea di produzione.

Crea il tuo dispositivo dorato

Fase 1: Installazione e fornitura di Greengrass.

Installa il runtime Greengrass edge sul tuo dispositivo golden come faresti normalmente e esegui il provisioning utilizzando il tuo metodo di provisioning preferito.

Fase 2: Implementa i componenti.

Dal cloud, distribuisci i componenti e la configurazione dell'applicazione sul tuo dispositivo preferito, come faresti normalmente.

Leggi l'immagine dorata dal tuo dispositivo dorato

Ora puoi scattare un'istantanea del tuo dispositivo dorato per creare un'immagine dorata.

Passaggio 1: chiudere Greengrass.

Disattiva il servizio Greengrass sul tuo dispositivo dorato. Per esempio:

sudo systemctl stop greengrass.service

Passaggio 2: crea un'istantanea dell'albero dei file Greengrass.

A seconda del metodo preferito, scatta un'istantanea completa o parziale dell'albero dei file Greengrass e includila nell'immagine dorata.

Passaggio 3: Copia le tue immagini Docker.

Se i tuoi componenti utilizzano immagini Docker come artefatti, scatta un'istantanea del registro delle immagini Docker e includila nell'immagine dorata.

In alternativa, puoi usare docker save per creare un archivio di ogni immagine Docker e copiarla dal dispositivo dorato. Per esempio:

user@machine:~/environment $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE homeassistant/home-assistant 2024.6 2b4c9de733f1 9 days ago 1.6GB user@machine:~/environment $ docker save homeassistant/home-assistant | gzip > home-assistant.tar.gz

In generale, questo approccio è più lento rispetto all'aggiunta del registro delle immagini Docker all'immagine dorata.

Scrivi l'immagine dorata sui tuoi dispositivi di produzione

Ora dovete scrivere l'immagine dorata su ciascuno dei dispositivi di produzione che compongono la linea di produzione. I passaggi seguenti vengono in genere automatizzati utilizzando script.

Passaggio 1: scrivere l'immagine.

Scrivi la tua immagine dorata sul dispositivo di produzione. Assicurati che includa l'istantanea completa o parziale dell'albero di directory Greengrass e del registro delle immagini Docker, a seconda dei casi.

Passaggio 2: carica le immagini Docker.

Se hai scelto di utilizzare docker save per copiare gli artefatti delle immagini Docker dal tuo dispositivo dorato, utilizza docker load per caricare queste immagini sul tuo dispositivo di produzione. Per esempio:

user@machine:~/environment $ docker load < home-assistant.tar.gz user@machine:~/environment $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE homeassistant/home-assistant 2024.6 2b4c9de733f1 9 days ago 1.6GB

In generale, questo approccio è più lento rispetto all'aggiunta del registro delle immagini Docker all'immagine dorata.

Fase 3: Aggiungere le credenziali.

Se il dispositivo non utilizza il provisioning del parco veicoli, installa il certificato X.509 univoco e la chiave privata per il dispositivo di produzione, sostituendo le credenziali dorate del dispositivo. Il metodo esatto per raggiungere questo obiettivo dipende dal fatto che si utilizzi un modulo di sicurezza hardware (HSM) e una particolare infrastruttura a chiave pubblica (PKI).

Configura i tuoi dispositivi di produzione

Dopo aver scritto l'immagine dorata, devi configurare ogni dispositivo di produzione. Questa configurazione dipende dall'utilizzo del metodo snapshot Greengrass completo o parziale. I passaggi devono essere automatizzati.

Metodo snapshot Greengrass completo

Importante

Segui questi passaggi solo se utilizzi il metodo snapshot Greengrass completo.

Passaggio 1: modifica la configurazione.

Modificare il file config/effectiveConfig.yaml. Per esempio:

sudo nano /greengrass/v2/config/effectiveConfig.yaml

Fase 2: Impostare il nome dell'oggetto.

Le azioni necessarie per impostare il nome dell'oggetto del nuovo dispositivo di produzione dipendono dal fatto che si stia utilizzando il provisioning del parco veicoli. Apporta le modifiche corrette per il tuo caso d'uso.

Se non utilizzate il fleet provisioning, potete impostare il nome dell'oggetto del dispositivo di produzione modificando la thingName proprietà in modo da sostituire il golden device thing name con il nome dell'oggetto del dispositivo di produzione. Per esempio:

system: certificateFilePath: "/greengrass/v2/thingCert.crt" privateKeyPath: "/greengrass/v2/privKey.key" rootCaPath: "/greengrass/v2/rootCA.pem" rootpath: "/greengrass/v2" thingName: "ProductionDeviceThingName1"

Se utilizzate il fleet provisioning, dovete prima cancellare parte della configurazione del golden device per assicurarvi che il plug-in fleet provisioning venga eseguito sul dispositivo di produzione. È possibile farlo sostituendo il golden device thing name nella thingName proprietà con una stringa vuota. Per esempio:

system: certificateFilePath: "/greengrass/v2/thingCert.crt" privateKeyPath: "/greengrass/v2/privKey.key" rootCaPath: "/greengrass/v2/rootCA.pem" rootpath: "/greengrass/v2" thingName: ""

Inoltre, è necessario aggiungere la configurazione del plug-in fleet provisioning alla services proprietà e passare il nome dell'oggetto del dispositivo di produzione come proprietà all'interno della templateParameters proprietà. L'esempio seguente presuppone che il modello di fleet provisioning abbia un parametro denominato ThingName e che pertanto esista una ThingName proprietà all'interno della configurazione templateParameters del plug-in:

system: certificateFilePath: "/greengrass/v2/thingCert.crt" privateKeyPath: "/greengrass/v2/privKey.key" rootCaPath: "/greengrass/v2/rootCA.pem" rootpath: "/greengrass/v2" thingName: "" services: aws.greengrass.FleetProvisioningByClaim: configuration: rootPath: "/greengrass/v2" awsRegion: "us-east-1" iotDataEndpoint: "<prefix>-ats.iot.us-east-1.amazonaws.com" iotCredentialEndpoint: "<prefix>.credentials.iot.us-east-1.amazonaws.com" iotRoleAlias: "GreengrassCoreTokenExchangeRoleAlias" provisioningTemplate: "GreengrassFleetProvisioningTemplate" claimCertificatePath: "/greengrass/v2/claim-certs/claim.pem.crt" claimCertificatePrivateKeyPath: "/greengrass/v2/claim-certs/claim.private.pem.key" rootCaPath: "/greengrass/v2/rootCA.pem" templateParameters: ThingName: "ProductionDeviceThingName1"

Il tuo caso d'uso potrebbe richiedere alcuni parametri di configurazione del plug-in Fleet Provisioning diversi da quelli mostrati qui. Per ulteriori informazioni, consulta Configurare il plug-in AWS IoT Fleet Provisioning nella AWS IoT Greengrass documentazione.

Fase 3: Aggiornare i nomi degli oggetti interpolati.

Se avete dei componenti che utilizzano la variabile iot:thingName recipe per interpolare il nome dell'oggetto, probabilmente avrete istruzioni di controllo degli accessi in cui è stato interpolato il golden device thing name. Ad esempio, nel caso del componente della community Certificate Rotator:

services: aws.greengrass.labs.CertificateRotator: componentType: "GENERIC" configuration: accessControl: aws.greengrass.ipc.mqttproxy: aws.greengrass.labs.CertificateRotator:mqttproxy:1: operations: - "aws.greengrass#PublishToIoTCore" policyDescription: "Allows access to publish to relevant topics" resources: - "$aws/things/GoldenDeviceThingName/jobs/+/get" - "$aws/things/GoldenDeviceThingName/jobs/+/update" - "awslabs/things/GoldenDeviceThingName/certificate/create" - "awslabs/things/GoldenDeviceThingName/certificate/commit" aws.greengrass.labs.CertificateRotator:mqttproxy:2: operations: - "aws.greengrass#SubscribeToIoTCore" policyDescription: "Allows access to subscribe to relevant topics" resources: - "$aws/things/GoldenDeviceThingName/jobs/notify-next" - "$aws/things/GoldenDeviceThingName/jobs/+/get/accepted" - "$aws/things/GoldenDeviceThingName/jobs/+/get/rejected" - "$aws/things/GoldenDeviceThingName/jobs/+/update/accepted" - "$aws/things/GoldenDeviceThingName/jobs/+/update/rejected" - "awslabs/things/GoldenDeviceThingName/certificate/create/accepted" - "awslabs/things/GoldenDeviceThingName/certificate/create/rejected" - "awslabs/things/GoldenDeviceThingName/certificate/commit/accepted" - "awslabs/things/GoldenDeviceThingName/certificate/commit/rejected" keyAlgorithm: "RSA-2048" signingAlgorithm: "SHA256WITHRSA"

In tutti questi casi, è necessario sostituire tutte le istanze del golden device thing name con il nome dell'oggetto del dispositivo di produzione.

Passaggio 4: Rimuovi i segreti del dispositivo dorato.

effectiveConfig.yamlCerca eventuali segreti crittografati archiviati dal tuo dispositivo dorato. Questi verranno archiviati nella configurazione del componente Secret Manager. Per esempio:

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"

È necessario eliminare questo segreto per assicurarsi che il dispositivo di produzione non tenti di decrittografare un segreto che è stato crittografato dal dispositivo dorato. Eliminare la proprietà. secretResponse Per esempio:

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: version: "2.1.8"

Passaggio 5: applicare la configurazione modificata.

Applica la configurazione modificata, per aggiornarla. config/config.tlog Per esempio:

sudo java -Droot="/greengrass/v2" \ -jar /greengrass/v2/alts/current/distro/lib/Greengrass.jar \ --start false \ --init-config /greengrass/v2/config/effectiveConfig.yaml

Metodo snapshot Greengrass parziale

La configurazione dei dispositivi di produzione è semplice se si utilizza il metodo snapshot Greengrass parziale. La procedura è identica alla normale procedura di configurazione parziale di bootstrap quando si installa Greengrass, tranne per il fatto che la configurazione iniziale viene passata al runtime di Greengrass che è già installato.

Importante

Segui questi passaggi solo se utilizzi il metodo snapshot Greengrass parziale.

Fase 1: Creare la configurazione.

La configurazione parziale richiesta dipende dal fatto che tu stia utilizzando il provisioning della flotta. Assicurati di apportare le modifiche corrette per il tuo caso d'uso.

Se non utilizzi il provisioning della flotta, puoi creare un file di configurazione parziale che non includa alcuna configurazione per il plug-in di provisioning della flotta. Imposta la thingName proprietà sul nome dell'oggetto del dispositivo di produzione. Per esempio:

system: certificateFilePath: "/greengrass/v2/device.pem.crt" privateKeyPath: "/greengrass/v2/private.pem.key" rootCaPath: "/greengrass/v2/AmazonRootCA1.pem" rootpath: "/greengrass/v2" thingName: "ProductionDeviceThingName1" services: aws.greengrass.Nucleus: componentType: "NUCLEUS" version: "2.12.6" configuration: awsRegion: "us-east-1" iotRoleAlias: "GreengrassCoreTokenExchangeRoleAlias" iotDataEndpoint: "<prefix>-ats.iot.us-east-1.amazonaws.com" iotCredEndpoint: "<prefix>.credentials.iot.us-east-1.amazonaws.com"

Se si utilizza il provisioning della flotta, la configurazione parziale dovrebbe includere la configurazione per il plug-in di provisioning della flotta. Questa configurazione dovrebbe passare il nome dell'oggetto del dispositivo di produzione come proprietà all'interno della templateParameters proprietà. L'esempio seguente presuppone che il modello di fleet provisioning abbia un parametro denominato ThingName e che pertanto esista una ThingName proprietà all'interno della configurazione templateParameters del plug-in:

services: aws.greengrass.Nucleus: version: "2.12.6" aws.greengrass.FleetProvisioningByClaim: configuration: rootPath: "/greengrass/v2" awsRegion: "us-east-1" iotDataEndpoint: "<prefix>-ats.iot.us-east-1.amazonaws.com" iotCredentialEndpoint: "<prefix>.credentials.iot.us-east-1.amazonaws.com" iotRoleAlias: "GreengrassCoreTokenExchangeRoleAlias" provisioningTemplate: "GreengrassFleetProvisioningTemplate" claimCertificatePath: "/greengrass/v2/claim-certs/claim.pem.crt" claimCertificatePrivateKeyPath: "/greengrass/v2/claim-certs/claim.private.pem.key" rootCaPath: "/greengrass/v2/AmazonRootCA1.pem" templateParameters: ThingName: "ProductionDeviceThingName1"

Il tuo caso d'uso potrebbe richiedere parametri di configurazione del plug-in Fleet Provisioning diversi da quelli mostrati qui. Per ulteriori informazioni, consulta Configurare il plug-in AWS IoT Fleet Provisioning nella AWS IoT Greengrass documentazione.

Passaggio 2: applicare la configurazione.

Applica la configurazione da creareconfig/config.tlog. Per esempio:

sudo java -Droot="/greengrass/v2" \ -jar /greengrass/v2/alts/current/distro/lib/Greengrass.jar \ --start false \ --init-config config.yaml