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à.
Controllo dell'esecuzione delle funzioni Greengrass Lambda utilizzando la configurazione specifica del gruppo
AWS IoT Greengrassfornisce la gestione basata sul cloud delle funzioni di Greengrass Lambda. Sebbene il codice e le dipendenze di una funzione Lambda siano gestiti utilizzandoAWS Lambda, è possibile configurare il comportamento della funzione Lambda quando viene eseguita in un gruppo Greengrass.
Impostazioni di configurazione specifiche del gruppo
AWS IoT Greengrassfornisce le seguenti impostazioni di configurazione specifiche del gruppo per le funzioni Greengrass Lambda.
- Utente e gruppo di sistema
L'identità di accesso utilizzata per eseguire una funzione Lambda. Per impostazione predefinita, le funzioni Lambda vengono eseguite come identità di accesso predefinita del gruppo. Di solito, questo è l'account di sistema AWS IoT Greengrass standard (ggc_user e ggc_group). Puoi modificare l'impostazione e scegliere l'ID utente e l'ID di gruppo che dispongono delle autorizzazioni necessarie per eseguire la funzione Lambda. Puoi sostituire sia l'UID che il GID o soltanto uno di essi se lasci vuoti l'altro campo. Questa impostazione offre un controllo più granulare sull'accesso alle risorse del dispositivo. Ti consigliamo di configurare l'hardware Greengrass con limiti di risorse, autorizzazioni di file e quote disco appropriati per gli utenti e i gruppi le cui autorizzazioni vengono utilizzate per eseguire le funzioni Lambda.
Questa funzionalità è disponibile per AWS IoT Greengrass Core v1.7 e versioni successive.
Importante
Ti consigliamo di evitare di eseguire le funzioni Lambda come root a meno che non sia assolutamente necessario. L'esecuzione come root aumenta i seguenti rischi:
-
Il rischio di modifiche non intenzionali, come l'eliminazione accidentale di un file importante.
-
Il rischio per i dati e il dispositivo causato da individui malintenzionati.
-
Il rischio che si verifichi un container sfugge quando i container Docker vengono utilizzati con
--net=host
e.UID=EUID=0
Se l'esecuzione come root è necessaria, aggiorna la configurazione di AWS IoT Greengrass in modo da attivarla. Per ulteriori informazioni, consulta Esecuzione di una funzione Lambda come utente root.
- ID utente del sistema (numero)
-
L'ID utente dell'utente che dispone delle autorizzazioni necessarie per eseguire la funzione Lambda. Questa impostazione è disponibile solo se scegli di eseguirla come altro ID utente/ID di gruppo. Puoi usare il getent passwd comando sul tuo dispositivo AWS IoT Greengrass principale per cercare l'ID utente che desideri utilizzare per eseguire la funzione Lambda.
Se si utilizza lo stesso UID per eseguire i processi e la funzione Lambda su un dispositivo principale Greengrass, il ruolo del gruppo Greengrass può concedere ai processi credenziali temporanee. I processi possono utilizzare le credenziali temporanee nelle implementazioni principali di Greengrass.
- ID del gruppo di sistema (numero)
-
L'ID di gruppo per il gruppo che dispone delle autorizzazioni necessarie per eseguire la funzione Lambda. Questa impostazione è disponibile solo se scegli di eseguirla come un altro ID utente/ID di gruppo. Puoi usare il getent group comando sul tuo dispositivo AWS IoT Greengrass principale per cercare l'ID del gruppo che desideri utilizzare per eseguire la funzione Lambda.
-
- Containerizzazione della funzione Lambda
-
Scegli se la funzione Lambda viene eseguita con la containerizzazione predefinita per il gruppo o specifica la containerizzazione che deve essere sempre utilizzata per questa funzione Lambda.
La modalità di containerizzazione di una funzione Lambda ne determina il livello di isolamento.
-
Le funzioni Lambda containerizzate vengono eseguite in modalità contenitore Greengrass. La funzione Lambda viene eseguita in un ambiente di runtime isolato (o namespace) all'interno del contenitore. AWS IoT Greengrass
-
Le funzioni Lambda non containerizzate vengono eseguite in modalità No container. Le funzioni Lambda vengono eseguite come un normale processo Linux senza alcun isolamento.
Questa funzionalità è disponibile per AWS IoT Greengrass Core v1.7 e versioni successive.
Ti consigliamo di eseguire le funzioni Lambda in un contenitore Greengrass a meno che il tuo caso d'uso non richieda che vengano eseguite senza containerizzazione. Quando le funzioni Lambda vengono eseguite in un contenitore Greengrass, è possibile utilizzare le risorse locali e del dispositivo collegate e ottenere i vantaggi dell'isolamento e di una maggiore sicurezza. Prima di modificare l'impostazione di containerizzazione, consulta Considerazioni sulla scelta della containerizzazione delle funzioni Lambda.
Nota
Per funzionare senza abilitare lo spazio dei nomi del kernel e il cgroup del dispositivo, tutte le funzioni Lambda devono essere eseguite senza containerizzazione. Puoi eseguire facilmente questa operazione impostando la containerizzazione predefinita per il gruppo. Per informazioni, consulta Impostazione della containerizzazione predefinita per le funzioni Lambda in un gruppo.
-
- Memory limit (Limite memoria)
-
L'allocazione di memoria per la funzione. Il valore predefinito è 16 MB.
Nota
L'impostazione del limite di memoria non è disponibile quando si modifica la funzione Lambda in modo che venga eseguita senza containerizzazione. Le funzioni Lambda eseguite senza containerizzazione non hanno limiti di memoria. L'impostazione del limite di memoria viene eliminata quando si modifica l'impostazione di containerizzazione predefinita della funzione Lambda o del gruppo in modo che venga eseguita senza containerizzazione.
- Timeout
-
La quantità di tempo prima che la funzione o la richiesta venga terminata. Il valore predefinito è 3 secondi.
- Bloccato
-
Il ciclo di vita di una funzione Lambda può essere su richiesta o di lunga durata. Il valore predefinito è on demand.
Una funzione Lambda su richiesta viene avviata in un contenitore nuovo o riutilizzato quando viene richiamata. Le richieste per la funzione potrebbero essere elaborate da qualsiasi container disponibile. Una funzione Lambda di lunga durata, o bloccata, si avvia automaticamente dopo AWS IoT Greengrass l'avvio e continua a funzionare nel proprio contenitore (o sandbox). Tutte le richieste per la funzione vengono elaborate dallo stesso container. Per ulteriori informazioni, consulta Configurazione del ciclo di vita per le funzioni Greengrass Lambda.
- Read access to /sys directory (Accesso in lettura alla directory /sys)
-
Indica se la funzione può accedere alla cartella /sys dell'host. Utilizza questa impostazione se la funzione deve leggere le informazioni del dispositivo da /sys. Il valore predefinito è false.
Nota
Questa impostazione non è disponibile quando si esegue una funzione Lambda senza containerizzazione. Il valore di questa impostazione viene scartato quando si modifica la funzione Lambda in modo che venga eseguita senza containerizzazione.
- Tipo di codifica
-
Il tipo di codifica prevista del payload di input per la funzione, in formato JSON o binario. Il valore predefinito è JSON.
Il supporto per il tipo di codifica binaria è disponibile a partire dalle versioni 1.5.0 del software AWS IoT Greengrass Core e 1.1.0 di SDK AWS IoT Greengrass Core. L'accettazione dei dati di input binari può essere utile per le funzioni che interagiscono con i dati del dispositivo poiché le limitate funzionalità hardware dei dispositivi rendono spesso difficile o impossibile la creazione di un tipo di dati JSON.
Nota
Gli eseguibili Lambda supportano solo il tipo di codifica binaria, non JSON.
- Argomenti del processo
-
Gli argomenti della riga di comando vengono passati alla funzione Lambda durante l'esecuzione.
- Variabili di ambiente
-
Le coppie chiave-valore che possono trasferire in modo dinamico le impostazioni al codice e alle librerie delle funzioni. Le variabili di ambiente locali funzionano nello stesso modo delle variabili di ambiente delle funzioni AWS Lambda, ma sono disponibili nell'ambiente core.
- Policy di accesso alle risorse
-
Un elenco di un massimo di 10 risorse locali, risorse segrete e risorse di apprendimento automatico a cui la funzione Lambda può accedere e l'autorizzazione
read-only
oread-write
corrispondente. Nella console, queste risorse affiliate sono elencate nella pagina di configurazione del gruppo nella scheda Risorse.La modalità di containerizzazione influisce sul modo in cui le funzioni Lambda possono accedere alle risorse locali di dispositivi e volumi e alle risorse di machine learning.
-
Le funzioni Lambda non containerizzate devono accedere alle risorse locali del dispositivo e del volume direttamente tramite il file system sul dispositivo principale.
-
Per consentire alle funzioni Lambda non containerizzate di accedere alle risorse di machine learning nel gruppo Greengrass, è necessario impostare le proprietà del proprietario della risorsa e delle autorizzazioni di accesso sulla risorsa di machine learning. Per ulteriori informazioni, consulta Accedi alle risorse di machine learning dalle funzioni Lambda.
-
Per informazioni sull'utilizzo dell'AWS IoT GreengrassAPI per impostare impostazioni di configurazione specifiche del gruppo per le funzioni Lambda definite dall'utente, CreateFunctionDefinitionvedere nel riferimento AWS IoT Greengrass Version 1all'API create-function-definitiono nel riferimento ai comandi. AWS CLI Per distribuire le funzioni Lambda su un core di Greengrass, crea una versione di definizione della funzione che contenga le tue funzioni, crea una versione di gruppo che faccia riferimento alla versione della definizione della funzione e ad altri componenti del gruppo, quindi distribuisci il gruppo.
Esecuzione di una funzione Lambda come utente root
Questa funzionalità è disponibile per AWS IoT Greengrass Core v1.7 e versioni successive.
Prima di poter eseguire una o più funzioni Lambda come root, devi prima aggiornare la AWS IoT Greengrass configurazione per abilitare il supporto. Il supporto per l'esecuzione delle funzioni Lambda come root è disattivato per impostazione predefinita. La distribuzione non riesce se si tenta di distribuire una funzione Lambda e di eseguirla come root (UID e GID pari a 0) e non si è aggiornata la configurazione. AWS IoT Greengrass Nel log di runtime (greengrass_root
/ggc/var/log/system/runtime.log) viene visualizzato un errore simile al seguente:
lambda(s)
[list of function arns]
are configured to run as root while Greengrass is not configured to run lambdas with root permissions
Importante
Ti consigliamo di evitare di eseguire le funzioni Lambda come root a meno che non sia assolutamente necessario. L'esecuzione come root aumenta i seguenti rischi:
-
Il rischio di modifiche non intenzionali, come l'eliminazione accidentale di un file importante.
-
Il rischio per i dati e il dispositivo causato da individui malintenzionati.
-
Il rischio che si verifichi un container sfugge quando i container Docker vengono utilizzati con
--net=host
e.UID=EUID=0
Per consentire l'esecuzione delle funzioni Lambda come root
Sul dispositivo AWS IoT Greengrass, accedi alla cartella
greengrass-root
/config.Nota
Per impostazione predefinita,
greengrass-root
è la directory /greengrass.Modificare il file config.json per aggiungere
"allowFunctionsToRunAsRoot" : "yes"
al camporuntime
. Per esempio:{ "coreThing" : { ... }, "runtime" : { ... "allowFunctionsToRunAsRoot" : "yes" }, ... }
Per riavviare AWS IoT Greengrass, utilizza i comandi seguenti:
cd /greengrass/ggc/core sudo ./greengrassd restart
Ora puoi impostare l'ID utente e l'ID di gruppo (UID/GID) delle funzioni Lambda su 0 per eseguire quella funzione Lambda come root.
Puoi modificare il valore di "allowFunctionsToRunAsRoot"
to "no"
e restart AWS IoT Greengrass se desideri impedire l'esecuzione delle funzioni Lambda come root.
Considerazioni sulla scelta della containerizzazione delle funzioni Lambda
Questa funzionalità è disponibile per AWS IoT Greengrass Core v1.7 e versioni successive.
Per impostazione predefinita, le funzioni Lambda vengono eseguite all'interno di un AWS IoT Greengrass contenitore. Questo container isola le funzioni dall'host, garantendo una maggiore sicurezza sia per l'host sia per le funzioni nel container.
Ti consigliamo di eseguire le funzioni Lambda in un contenitore Greengrass a meno che il tuo caso d'uso non richieda che vengano eseguite senza containerizzazione. Eseguendo le funzioni Lambda in un contenitore Greengrass, hai un maggiore controllo sulla limitazione dell'accesso alle risorse.
Di seguito sono riportati alcuni esempi di casi d'uso per l'esecuzione senza containerizzazione:
È opportuno eseguire AWS IoT Greengrass su un dispositivo che non supporta la modalità container (ad esempio perché stai utilizzando una distribuzione Linux speciali o hai una versione kernel che è troppo vecchia).
Vuoi eseguire la tua funzione Lambda in un altro ambiente contenitore con il proprio OverlayFS, ma riscontri conflitti OverlayFS quando esegui in un contenitore Greengrass.
È necessario accedere alle risorse locali con percorsi che non possono essere determinati al momento della distribuzione o che possono variare dopo la distribuzione, come nel caso dei dispositivi integrabili.
Hai un'applicazione legacy che è stata scritta come processo e hai riscontrato problemi durante l'esecuzione come funzione Lambda containerizzata.
Differenze nella containerizzazione | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Containerizzazione | Note | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Container Greengrass |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Nessun container |
|
Nota
L'impostazione predefinita della containerizzazione per il gruppo Greengrass non si applica ai connettori.
La modifica della containerizzazione per una funzione Lambda può causare problemi durante la distribuzione. Se alla funzione Lambda sono state assegnate risorse locali che non sono più disponibili con le nuove impostazioni di containerizzazione, la distribuzione non riesce.
Quando si modifica una funzione Lambda dall'esecuzione in un contenitore Greengrass all'esecuzione senza containerizzazione, i limiti di memoria per la funzione vengono eliminati. È necessario accedere direttamente al file system anziché utilizzare le risorse locali collegate. Prima della distribuzione, è necessario rimuovere le risorse collegate.
Quando si modifica una funzione Lambda dall'esecuzione senza containerizzazione all'esecuzione in un contenitore, la funzione Lambda perde l'accesso diretto al file system. È necessario definire un limite di memoria per ogni funzione oppure accettare il valore predefinito di 16 MB. Puoi configurare queste impostazioni per ogni funzione Lambda prima della distribuzione.
Per modificare le impostazioni di containerizzazione per una funzione Lambda
Nel riquadro di navigazione della AWS IoT console, in Gestione, espandi i dispositivi Greengrass, quindi scegli Gruppi (V1).
-
Scegliete il gruppo che contiene la funzione Lambda di cui desiderate modificare le impostazioni.
-
Scegli la scheda Funzioni Lambda.
-
Sulla funzione Lambda che desideri modificare, scegli i puntini di sospensione (...), quindi scegli Modifica configurazione.
-
Modifica le impostazioni di containerizzazione. Se si configura la funzione Lambda per l'esecuzione in un contenitore Greengrass, è inoltre necessario impostare Limite di memoria e accesso in lettura alla directory /sys.
-
Scegli Salva e quindi Conferma per salvare le modifiche alla tua funzione Lambda.
Le modifiche diventano effettive quando il gruppo viene distribuito.
Puoi anche usare il comando CreateFunctionDefinitione CreateFunctionDefinitionVersionnell'AWS IoT GreengrassAPI Reference. Se stai modificando l'impostazione di containerizzazione, assicurati di aggiornare anche gli altri parametri. Ad esempio, se state passando dall'esecuzione di una funzione Lambda in un contenitore Greengrass all'esecuzione senza containerizzazione, assicuratevi di cancellare il parametro. MemorySize
Determinare le modalità di isolamento supportate dal dispositivo Greengrass in uso
Puoi utilizzare lo strumento di controllo delle dipendenze di AWS IoT Greengrass per determinare le modalità di isolamento (container Greengrass/nessun container) supportate dal dispositivo Greengrass in uso.
Per eseguire lo strumento di controllo delle dipendenze di AWS IoT Greengrass
Scaricate ed eseguite il correttore di AWS IoT Greengrass dipendenza dal repository. GitHub
wget https://github.com/aws-samples/aws-greengrass-samples/raw/master/greengrass-dependency-checker-GGCv1.11.x.zip unzip greengrass-dependency-checker-GGCv1.11.x.zip cd greengrass-dependency-checker-GGCv1.11.x sudo modprobe configs sudo ./check_ggc_dependencies | more
Nel punto in cui viene visualizzato
more
, premi il tasto Spacebar per visualizzare un'altra pagina di testo.
Per informazioni sul comando modprobe, esegui man modprobe nel terminale.
Impostazione dell'identità di accesso predefinita per le funzioni Lambda in un gruppo
Questa funzionalità è disponibile per AWS IoT Greengrass Core v1.8 e versioni successive.
Per un maggiore controllo sull'accesso alle risorse del dispositivo, puoi configurare l'identità di accesso predefinita utilizzata per eseguire le funzioni Lambda nel gruppo. Questa impostazione determina le autorizzazioni predefinite concesse alle funzioni Lambda quando vengono eseguite sul dispositivo principale. Per sovrascrivere l'impostazione per singole funzioni nel gruppo, puoi utilizzare la proprietà Run as (Esegui come) della funzione. Per ulteriori informazioni, consulta Run as (Esegui come).
Questa impostazione a livello di gruppo viene anche utilizzata per eseguire il software AWS IoT Greengrass Core sottostante. Si tratta di funzioni Lambda di sistema che gestiscono le operazioni, come il routing dei messaggi, la sincronizzazione degli shadow locali e il rilevamento automatico degli indirizzi IP.
L'identità di accesso predefinita può essere configurata per eseguire account di sistema AWS IoT Greengrass standard (ggc_user ggc_group) o utilizzare le autorizzazioni di un altro utente o gruppo. Si consiglia di configurare l'hardware Greengrass con limiti di risorse, autorizzazioni di file e quote disco appropriati per tutti gli utenti e i gruppi le cui autorizzazioni vengono utilizzate per eseguire funzioni Lambda definite dall'utente o di sistema.
Per modificare l'identità di accesso predefinita per il gruppo AWS IoT Greengrass
Nel riquadro di navigazione della AWS IoT console, in Gestione, espandi i dispositivi Greengrass, quindi scegli Gruppi (V1).
Scegli il gruppo di cui desideri modificare le impostazioni.
-
Scegli la scheda Funzioni Lambda e, nella sezione Ambiente di runtime della funzione Lambda predefinito, scegli Modifica.
-
Nella pagina Modifica ambiente di runtime della funzione Lambda predefinito, in Utente e gruppo di sistema predefiniti, scegli Un altro ID utente/ID gruppo.
Quando scegli questa opzione, vengono visualizzati i campi ID utente di sistema (numero) e ID del gruppo di sistema (numero).
Inserire un ID utente, un ID gruppo o entrambi. Se si lascia un campo vuoto, viene utilizzato il rispettivo account di sistema Greengrass (ggc_user o ggc_group).
-
Per ID utente di sistema (numero), inserisci l'ID utente dell'utente che dispone delle autorizzazioni che desideri utilizzare di default per eseguire le funzioni Lambda nel gruppo. È possibile utilizzare il comando getent passwd sul dispositivo AWS IoT Greengrass per cercare l'ID utente.
-
Per ID gruppo di sistema (numero), inserisci l'ID del gruppo che dispone delle autorizzazioni che desideri utilizzare di default per eseguire le funzioni Lambda nel gruppo. È possibile utilizzare il comando getent group sul dispositivo AWS IoT Greengrass per cercare l'ID gruppo.
Importante
L'esecuzione come utente radice aumenta rischi per i dati e il dispositivo. Non eseguire come radice (UID/GID = 0) a meno che non sia richiesto dal business case. Per ulteriori informazioni, consulta Esecuzione di una funzione Lambda come utente root.
-
Le modifiche diventano effettive quando il gruppo viene distribuito.
Impostazione della containerizzazione predefinita per le funzioni Lambda in un gruppo
Questa funzionalità è disponibile per AWS IoT Greengrass Core v1.7 e versioni successive.
L'impostazione di containerizzazione per un gruppo Greengrass determina la containerizzazione predefinita per le funzioni Lambda nel gruppo.
In modalità contenitore Greengrass, per impostazione predefinita, le funzioni Lambda vengono eseguite in un ambiente di runtime isolato all'interno del AWS IoT Greengrass contenitore.
In modalità No container, le funzioni Lambda vengono eseguite come normali processi Linux per impostazione predefinita.
È possibile modificare le impostazioni del gruppo per specificare la containerizzazione predefinita per le funzioni Lambda nel gruppo. Puoi sovrascrivere questa impostazione per una o più funzioni Lambda nel gruppo se desideri che le funzioni Lambda vengano eseguite con una containerizzazione diversa da quella predefinita del gruppo. Prima di modificare le impostazioni di containerizzazione, consulta Considerazioni sulla scelta della containerizzazione delle funzioni Lambda.
Importante
Se desideri modificare la containerizzazione predefinita per il gruppo, ma disponi di una o più funzioni che utilizzano una containerizzazione diversa, modifica le impostazioni per le funzioni Lambda prima di modificare l'impostazione del gruppo. Se modifichi prima l'impostazione di containerizzazione del gruppo, i valori delle impostazioni Memory Limit (Limite memoria) e Read access to /sys directory (Accesso in lettura alla directory /sys) vengono ignorati.
Per modificare le impostazioni di containerizzazione per il gruppo AWS IoT Greengrass
Nel riquadro di navigazione della AWS IoT console, in Gestione, espandi i dispositivi Greengrass, quindi scegli Gruppi (V1).
Scegli il gruppo di cui desideri modificare le impostazioni.
-
Scegli la scheda Funzioni Lambda.
-
In Ambiente di runtime della funzione Lambda predefinito, scegli Modifica.
-
Nella pagina Modifica ambiente di runtime della funzione Lambda predefinito, in Containerizzazione predefinita della funzione Lambda, modificare l'impostazione di containerizzazione.
-
Selezionare Salva.
Le modifiche diventano effettive quando il gruppo viene distribuito.