Aggiornamenti OTA del software AWS IoT Greengrass Core - AWS IoT Greengrass

AWS IoT Greengrass Version 1 è entrato nella fase di estensione della vita utile il 30 giugno 2023. Per ulteriori informazioni, consulta la politica AWS IoT Greengrass V1 di manutenzione. Dopo questa data, AWS IoT Greengrass V1 non rilascerà aggiornamenti che forniscano funzionalità, miglioramenti, correzioni di bug o patch di sicurezza. I dispositivi che funzionano AWS IoT Greengrass V1 non subiranno interruzioni e continueranno a funzionare e a connettersi al cloud. Ti consigliamo vivamente di eseguire la migrazione a AWS IoT Greengrass Version 2, che aggiunge nuove importanti funzionalità e supporto per piattaforme aggiuntive.

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à.

Aggiornamenti OTA del software AWS IoT Greengrass Core

Il pacchetto software AWS IoT Greengrass Core include un agente di aggiornamento in grado di eseguire aggiornamenti over-the-air (OTA) del AWS IoT Greengrass software. È possibile utilizzare gli aggiornamenti OTA per installare la versione più recente del software AWS IoT Greengrass Core o del software dell'agente di aggiornamento OTA su uno o più core. Con gli aggiornamenti OTA, i dispositivi core non devono essere fisicamente presenti.

Si consiglia di utilizzare gli aggiornamenti OTA quando possibile. Forniscono un meccanismo che è possibile utilizzare per tenere traccia dello stato degli aggiornamenti e della relativa cronologia. Se si verifica un aggiornamento non riuscito, l'agente di aggiornamento OTA ripristina la versione precedente del software.

Nota

Gli aggiornamenti OTA non sono supportati quando si utilizza apt per installare il software AWS IoT Greengrass Core. Per queste installazioni, si consiglia di utilizzare apt per aggiornare il software. Per ulteriori informazioni, consulta Installazione del software di AWS IoT Greengrass Core da un repository APT.

Gli aggiornamenti OTA rendono più efficiente:

  • la correzione delle vulnerabilità in termini di sicurezza;

  • la risoluzione dei problemi di stabilità del software;

  • la distribuzione delle funzionalità nuove o migliorate.

Questa funzionalità si integra con i processi AWS IoT.

Requisiti

I seguenti requisiti si applicano agli aggiornamenti OTA del software AWS IoT Greengrass.

  • Il core Greengrass deve disporre di almeno 400 MB di spazio su disco disponibile nella memoria locale. L'agente di aggiornamento OTA richiede circa tre volte il requisito di utilizzo del runtime del software AWS IoT Greengrass Core. Per ulteriori informazioni, consulta Quote di servizio per il core di Greengrass in Riferimenti generali di Amazon Web Services.

  • Il nucleo Greengrass deve avere una connessione con. Cloud AWS

  • Il core di Greengrass deve essere configurato e fornito correttamente con certificati e chiavi per l'autenticazione con AWS IoT Core e AWS IoT Greengrass. Per ulteriori informazioni, consulta Certificati X.509.

  • Il core di Greengrass non può essere configurato per utilizzare un proxy di rete.

    Nota

    A partire da AWS IoT Greengrass v1.9.3, gli aggiornamenti OTA sono supportati sui core che configurano il traffico MQTT per utilizzare la porta 443 anziché la porta predefinita 8883. Tuttavia, l'agente di aggiornamento OTA non supporta gli aggiornamenti tramite un proxy di rete. Per ulteriori informazioni, consulta Connessione alla porta 443 o tramite un proxy di rete.

  • L'avvio attendibile non può essere abilitato nella partizione che contiene il software AWS IoT Greengrass Core.

    Nota

    È possibile installare ed eseguire il software AWS IoT Greengrass Core in una partizione che ha attivato l'avvio attendibile, ma gli aggiornamenti OTA non sono supportati.

  • AWS IoT Greengrass deve disporre delle autorizzazioni di lettura/scrittura sulla partizione che contiene il software AWS IoT Greengrass Core.

  • Se si utilizza un sistema init per gestire il core di Greengrass, è necessario configurare gli aggiornamenti OTA per l'integrazione con il sistema init. Per ulteriori informazioni, consulta Integrazione con i sistemi di inizializzazione.

  • Devi creare un ruolo da utilizzare per preassegnare gli URL di Amazon S3 agli artefatti degli aggiornamenti AWS IoT Greengrass software. Questo ruolo di firmatario consente di accedere AWS IoT Core agli artefatti degli aggiornamenti software archiviati in Amazon S3 per tuo conto. Per ulteriori informazioni, consulta Autorizzazioni IAM per gli aggiornamenti OTA.

Autorizzazioni IAM per gli aggiornamenti OTA

Quando AWS IoT Greengrass rilascia una nuova versione del software AWS IoT Greengrass Core, AWS IoT Greengrass aggiorna gli elementi software archiviati in Amazon S3 utilizzati per l'aggiornamento OTA.

Account AWSDevi includere un ruolo di firmatario URL di Amazon S3 che può essere utilizzato per accedere a questi artefatti. Il ruolo deve avere una politica di autorizzazioni che consenta l's3:GetObjectazione sui bucket nei target Regione AWS s. Il ruolo deve inoltre disporre di una policy di attendibilità che consenta a iot.amazonaws.com di assumere il ruolo come entità attendibile.

Policy delle autorizzazioni

Per le autorizzazioni dei ruoli, è possibile utilizzare la policy gestita AWS o creare una policy personalizzata.

  • Utilizzare la policy gestita AWS

    La politica UpdateArtifactAccess gestita da GreenGrassota è fornita da. AWS IoT Greengrass Utilizza questa politica se desideri consentire l'accesso in tutte le regioni Amazon Web Services supportateAWS IoT Greengrass, attuali e future.

  • Creare una policy personalizzata

    È necessario creare una politica personalizzata se si desidera specificare in modo esplicito le regioni di Amazon Web Services in cui vengono distribuiti i core. L'esempio seguente di policy consente l'accesso agli aggiornamenti del software AWS IoT Greengrass in sei regioni:

    { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowAccessToGreengrassOTAUpdateArtifacts", "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::us-east-1-greengrass-updates/*", "arn:aws:s3:::us-west-2-greengrass-updates/*", "arn:aws:s3:::ap-northeast-1-greengrass-updates/*", "arn:aws:s3:::ap-southeast-2-greengrass-updates/*", "arn:aws:s3:::eu-central-1-greengrass-updates/*", "arn:aws:s3:::eu-west-1-greengrass-updates/*" ] } ] }
Policy di trust

La policy di attendibilità associata al ruolo deve consentire l'operazione sts:AssumeRole e definire iot.amazonaws.com come principale. Ciò consente a AWS IoT Core di assumere il ruolo come entità attendibile. Ecco un esempio di documento di policy:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowIotToAssumeRole", "Action": "sts:AssumeRole", "Principal": { "Service": "iot.amazonaws.com" }, "Effect": "Allow" } ] }

Inoltre, l'utente che avvia un aggiornamento OTA deve disporre delle autorizzazioni per utilizzare greengrass:CreateSoftwareUpdateJob e iot:CreateJob, nonché utilizzare iam:PassRole per passare le autorizzazioni del ruolo firmatario. Ecco un esempio di policy IAM:

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "greengrass:CreateSoftwareUpdateJob" ], "Effect": "Allow", "Resource": "*" }, { "Effect": "Allow", "Action": [ "iot:CreateJob" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": "arn-of-s3-url-signer-role" } ] }

Considerazioni

Prima di avviare un aggiornamento OTA del software Greengrass Core, è necessario conoscere l'impatto sui dispositivi del gruppo Greengrass, sia sul dispositivo core che sui dispositivi client collegati localmente al core:

  • Il core si arresta durante l'aggiornamento.

  • Le funzioni Lambda in esecuzione nel core saranno terminate. Se queste funzioni scrivono su risorse locali, potrebbero lasciare tali risorse in uno stato errato, a meno che non vengano interrotte correttamente.

  • Durante il periodo di inattività del core, tutte le connessioni con il core Cloud AWS vengono perse. I messaggi instradati attraverso il core dai dispositivi client vengono persi.

  • Le cache delle credenziali vengono perse.

  • Le code che contengono processi in sospeso per le funzioni Lambda vengono perse.

  • Le funzioni Lambda di lunga durata perdono le informazioni sullo stato dinamico e tutto il lavoro in sospeso viene eliminato.

Le seguenti informazioni di stato vengono conservate durante un aggiornamento OTA:

  • Configurazione Core

  • Configurazione gruppo Greengrass

  • Shadow locali

  • Log Greengrass

  • Registri degli agenti di aggiornamento OTA

Agente di aggiornamento OTA di Greengrass

L'agente di aggiornamento OTA di Greengrass è il componente software del dispositivo che gestisce i processi di aggiornamento creati e distribuiti nel cloud. L'agente di aggiornamento OTA è distribuito nello stesso pacchetto software del software AWS IoT Greengrass Core. L'agente si trova in /greengrass-root/ota/ota_agent/ggc-ota. Scrive i registri in /var/log/greengrass/ota/ggc_ota.txt.

Nota

greengrass-root rappresenta il percorso dove è installato il software AWS IoT Greengrass Core sul dispositivo. In genere, questa è la directory /greengrass.

È possibile avviare l'agente di aggiornamento OTA eseguendo il file binario manualmente o integrandolo come parte di uno script di init, ad esempio un file di servizio systemd. Se esegui il file binario manualmente, dovrebbe essere eseguito come root. All'avvio, l'agente di aggiornamento OTA ascolta i processi di aggiornamento AWS IoT Greengrass del software AWS IoT Core e li esegue in sequenza. L'agente di aggiornamento OTA ignora tutti gli altri tipi di AWS IoT lavoro.

Il seguente estratto mostra un esempio di un file di servizio systemd per avviare, arrestare e riavviare l'agente di aggiornamento OTA:

[Unit] Description=Greengrass OTA Daemon [Service] Type=forking Restart=on-failure ExecStart=/greengrass/ota/ota_agent/ggc-ota [Install] WantedBy=multi-user.target

Un core oggetto di un aggiornamento non deve eseguire due istanze dell'agente di aggiornamento OTA. In questo modo, i due agenti elaborano gli stessi processi creando conflitti.

Integrazione con i sistemi di inizializzazione

Durante un aggiornamento OTA, l'agente di aggiornamento OTA riavvia i file binari sul dispositivo principale. Se i file binari sono in esecuzione, ciò potrebbe causare conflitti quando un sistema init sta monitorando lo stato del software AWS IoT Greengrass Core o dell'agente durante l'aggiornamento. Per aiutarti a integrare il meccanismo di aggiornamento OTA con le tue strategie di monitoraggio init, puoi scrivere script di shell eseguibili prima e dopo un aggiornamento. Ad esempio, è possibile utilizzare ggc_pre_update.sh lo script per eseguire il backup dei dati o interrompere i processi prima che il dispositivo si spenga.

Per dire all'agente di aggiornamento OTA di eseguire questi script, devi includere il "managedRespawn" : true flag nel file config.json. Questa impostazione è mostrata nel seguente estratto:

{ "coreThing": { … }, "runtime": { … }, "managedRespawn": true … }

Rigenerazione gestita con aggiornamenti OTA

I seguenti requisiti si applicano agli aggiornamenti OTA managedRespawn impostati sutrue:

  • Nella directory devono essere presenti i seguenti script di /greengrass-root/usr/scripts shell:

    • ggc_pre_update.sh

    • ggc_post_update.sh

    • ota_pre_update.sh

    • ota_post_update.sh

  • Gli script devono restituire un codice valido.

  • Gli script devono essere di proprietà del root e devono poter essere eseguiti solo da root.

  • Lo ggc_pre_update.sh script deve fermare il demone Greengrass.

  • Lo ggc_post_update.sh script deve avviare il demone Greengrass.

Nota

Poiché l'agente di aggiornamento OTA gestisce il proprio processo, non è necessario che ota_post_update.sh gli script ota_pre_update.sh e avviino il servizio OTA.

L'agente di aggiornamento OTA esegue gli script da. /greengrass-root/usr/scripts La struttura di directory deve essere simile alla seguente:

<greengrass_root> |-- certs |-- config | |-- config.json |-- ggc |-- usr/scripts | |-- ggc_pre_update.sh | |-- ggc_post_update.sh | |-- ota_pre_update.sh | |-- ota_post_update.sh |-- ota

Quando managedRespawn è impostato sutrue, l'agente di aggiornamento OTA controlla la /greengrass-root/usr/scripts directory di questi script prima e dopo l'aggiornamento del software. Se gli script non esistono, l'aggiornamento non riesce. AWS IoT Greengrassnon convalida il contenuto di questi script. Come best practice, verifica che gli script funzionino correttamente e inserisci i codici di uscita appropriati per gli errori.

Per gli aggiornamenti OTA del software AWS IoT Greengrass Core:
  • Prima di avviare l'aggiornamento, l'agente esegue lo script ggc_pre_update.sh. Usa questo script per i comandi che devono essere eseguiti prima che l'agente di aggiornamento OTA avvii l'aggiornamento del software AWS IoT Greengrass Core, ad esempio per eseguire il backup dei dati o interrompere qualsiasi processo in esecuzione. L'esempio seguente mostra un semplice script per fermare il demone Greengrass.

    #!/bin/bash set -euo pipefail systemctl stop greengrass
  • Dopo aver completato l'aggiornamento, l'agente esegue lo script ggc_post_update.sh. Usa questo script per i comandi che devono essere eseguiti dopo che l'agente di aggiornamento OTA ha avviato l'aggiornamento del software AWS IoT Greengrass Core, ad esempio per riavviare i processi. L'esempio seguente mostra un semplice script per avviare il demone Greengrass.

    #!/bin/bash set -euo pipefail systemctl start greengrass
Per gli aggiornamenti OTA dell'agente di aggiornamento OTA:
  • Prima di avviare l'aggiornamento, l'agente esegue lo script ota_pre_update.sh. Usa questo script per i comandi che devono essere eseguiti prima che l'agente di aggiornamento OTA si aggiorni da solo, ad esempio per eseguire il backup dei dati o interrompere qualsiasi processo in esecuzione.

  • Dopo aver completato l'aggiornamento, l'agente esegue lo script ota_post_update.sh. Usa questo script per i comandi che devono essere eseguiti dopo che l'agente di aggiornamento OTA si è aggiornato, ad esempio per riavviare i processi.

Nota

Se managedRespawn è impostato sufalse, l'agente di aggiornamento OTA non esegue gli script.

Creare un aggiornamento OTA.

Attenersi alla seguente procedura per eseguire un aggiornamento OTA del software AWS IoT Greengrass su uno o più core:

  1. Assicurarsi che i core soddisfino i requisiti per gli aggiornamenti OTA.

    Nota

    Se hai configurato un sistema di avvio per gestire il software AWS IoT Greengrass Core o l'agente di aggiornamento OTA, verifica quanto segue sui tuoi core:

    • Il file config.json specifica "managedRespawn" : true.

    • La directory/greengrass-root /usr/scripts contiene i seguenti script:

      • ggc_pre_update.sh

      • ggc_post_update.sh

      • ota_pre_update.sh

      • ota_post_update.sh

    Per ulteriori informazioni, consulta Integrazione con i sistemi di inizializzazione.

  2. In un terminale del dispositivo principale, avvia l'agente di aggiornamento OTA.

    cd /greengrass-root/ota/ota_agent sudo ./ggc-ota
    Nota

    greengrass-root rappresenta il percorso dove è installato il software AWS IoT Greengrass Core sul dispositivo. In genere, questa è la directory /greengrass.

    Non avviare più istanze dell'agente di aggiornamento OTA su un core perché potrebbero causare conflitti.

  3. Usa l'AWS IoT GreengrassAPI per creare un processo di aggiornamento software.

    1. Chiamata dell'API CreateSoftwareUpdateJob. In questa procedura di esempio, utilizziamo i comandi AWS CLI.

      Il comando seguente crea un processo che aggiorna il software AWS IoT Greengrass Core su un core. Sostituire i valori di esempio e quindi eseguire il comando.

      Linux or macOS terminal
      aws greengrass create-software-update-job \ --update-targets-architecture x86_64 \ --update-targets [\"arn:aws:iot:region:123456789012:thing/myCoreDevice\"] \ --update-targets-operating-system ubuntu \ --software-to-update core \ --s3-url-signer-role arn:aws:iam::123456789012:role/myS3UrlSignerRole \ --update-agent-log-level WARN \ --amzn-client-token myClientToken1
      Windows command prompt
      aws greengrass create-software-update-job ^ --update-targets-architecture x86_64 ^ --update-targets [\"arn:aws:iot:region:123456789012:thing/myCoreDevice\"] ^ --update-targets-operating-system ubuntu ^ --software-to-update core ^ --s3-url-signer-role arn:aws:iam::123456789012:role/myS3UrlSignerRole ^ --update-agent-log-level WARN ^ --amzn-client-token myClientToken1

      Questo comando restituisce la risposta seguente.

      { "IotJobId": "GreengrassUpdateJob_c3bd7f36-ee80-4d42-8321-a1da0EXAMPLE", "IotJobArn": "arn:aws:iot:region:123456789012:job/GreengrassUpdateJob_c3bd7f36-ee80-4d42-8321-a1da0EXAMPLE", "PlatformSoftwareVersion": "1.10.1" }
    2. Copiare IoTJobId dalla risposta.

    3. Chiama DescribeJobl'AWS IoT CoreAPI per vedere lo stato del lavoro. Sostituire il valore di esempio con l'ID del processo e quindi eseguire il comando.

      aws iot describe-job --job-id GreengrassUpdateJob_c3bd7f36-ee80-4d42-8321-a1da0EXAMPLE

      Il comando restituisce un oggetto di risposta che contiene informazioni sul processo, tra cui status e jobProcessDetails.

      { "job": { "jobArn": "arn:aws:iot:region:123456789012:job/GreengrassUpdateJob_c3bd7f36-ee80-4d42-8321-a1da0EXAMPLE", "jobId": "GreengrassUpdateJob_c3bd7f36-ee80-4d42-8321-a1da0EXAMPLE", "targetSelection": "SNAPSHOT", "status": "IN_PROGRESS", "targets": [ "arn:aws:iot:region:123456789012:thing/myCoreDevice" ], "description": "This job was created by Greengrass to update the Greengrass Cores in the targets with version 1.10.1 of the core software running on x86_64 architecture.", "presignedUrlConfig": { "roleArn": "arn:aws::iam::123456789012:role/myS3UrlSignerRole", "expiresInSec": 3600 }, "jobExecutionsRolloutConfig": {}, "createdAt": 1588718249.079, "lastUpdatedAt": 1588718253.419, "jobProcessDetails": { "numberOfCanceledThings": 0, "numberOfSucceededThings": 0, "numberOfFailedThings": 0, "numberOfRejectedThings": 0, "numberOfQueuedThings": 1, "numberOfInProgressThings": 0, "numberOfRemovedThings": 0, "numberOfTimedOutThings": 0 }, "timeoutConfig": {} } }

    Per la risoluzione dei problemi, consultare Risoluzione dei problemi relativi a AWS IoT Greengrass.

API CreateSoftwareUpdateJob

Puoi utilizzare l'CreateSoftwareUpdateJobAPI per aggiornare il software AWS IoT Greengrass Core o il software OTA update agent sui tuoi dispositivi principali. Questa API crea un processo di snapshot AWS IoT che notifica ai dispositivi quando è disponibile un aggiornamento. Dopo aver chiamato CreateSoftwareUpdateJob, è possibile utilizzare altri comandi del processo AWS IoT per tenere traccia dell'aggiornamento software. Per ulteriori informazioni, consulta Jobs in the AWS IoTDeveloper Guide.

L'esempio seguente mostra come usare l'AWS CLI per creare un processo di aggiornamento del software AWS IoT Greengrass Core su un dispositivo core:

aws greengrass create-software-update-job \ --update-targets-architecture x86_64 \ --update-targets [\"arn:aws:iot:region:123456789012:thing/myCoreDevice\"] \ --update-targets-operating-system ubuntu \ --software-to-update core \ --s3-url-signer-role arn:aws:iam::123456789012:role/myS3UrlSignerRole \ --update-agent-log-level WARN \ --amzn-client-token myClientToken1

Il comando create-software-update-job restituisce una risposta JSON contenente l'ID processo, l'ARN del processo e la versione software che sono stati installati dall'aggiornamento:

{ "IotJobId": "GreengrassUpdateJob_c3bd7f36-ee80-4d42-8321-a1da0EXAMPLE", "IotJobArn": "arn:aws:iot:region:123456789012:job/GreengrassUpdateJob_c3bd7f36-ee80-4d42-8321-a1da0EXAMPLE", "PlatformSoftwareVersion": "1.9.2" }

Per i passaggi che illustrano come utilizzare create-software-update-job per aggiornare un dispositivo core, consulta Creare un aggiornamento OTA..

Il comando create-software-update-job ha i seguenti parametri:

--update-targets-architecture

L'architettura del dispositivo core.

Valori validi: armv7l, armv6l, x86_64 o aarch64

--update-targets

I core da aggiornare. L'elenco può contenere ARN di singoli core e ARN di gruppi di oggetti i cui membri sono core. Per ulteriori informazioni sui gruppi di oggetti, consulta Gruppi di oggetti statici nella Guida per gli AWS IoT sviluppatori.

--update-targets-operating-system

Il sistema operativo del dispositivo Core.

Valori validi: ubuntu, amazon_linux, raspbian o openwrt

--software-to-update

Specifica se il software di base o il software dell'agente di aggiornamento OTA deve essere aggiornato.

Valori validi: core o ota_agent

--s3-url-signer-role

L'ARN del ruolo IAM utilizzato per preassegnare l'URL Amazon S3 che rimanda agli artefatti dell'aggiornamento AWS IoT Greengrass software. La politica delle autorizzazioni allegata al ruolo deve consentire l's3:GetObjectazione sui bucket nei destinatariRegione AWS. Il ruolo deve inoltre consentire a iot.amazonaws.com di assumere il ruolo come entità attendibile. Per ulteriori informazioni, consulta Autorizzazioni IAM per gli aggiornamenti OTA.

--amzn-client-token

(Facoltativo) Un token client utilizzato per effettuare le richieste. Fornisci un token unico per impedire la creazione di aggiornamenti duplicati a causa di nuovi tentativi interni.

--update-agent-log-level

(Facoltativo) Il livello di registrazione per le istruzioni di registro generate dall'agente di aggiornamento OTA. Il valore predefinito è ERROR.

Valori validi: NONE, TRACE, DEBUG, VERBOSE, INFO, WARN, ERROR o FATAL

Nota

CreateSoftwareUpdateJob accetta richieste solo per le seguenti combinazioni di architettura e sistema operativo supportate:

  • ubuntu/x86_64

  • ubuntu/aarch64

  • amazon_linux/x86_64

  • raspbian/armv7l

  • raspbian/armv6l

  • openwrt/aarch64

  • openwrt/armv7l