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à.
Esportazione di flussi di dati inCloud AWS(console)
Questo tutorial mostra come utilizzare ilAWS IoTconsole per configurare e distribuire unAWS IoT Greengrassgruppo con stream manager abilitato. Il gruppo contiene una funzione Lambda definita dall'utente che scrive in un flusso in stream manager, che viene quindi esportato automaticamente inCloud AWS.
Stream manager rende più efficiente e affidabile l'inserimento, l'elaborazione e l'esportazione di flussi di dati di volumi elevati. In questo tutorial viene creato unTransferStream
Funzione Lambda che utilizza i dati IoT. La funzione Lambda utilizza ilAWS IoT GreengrassCore SDK per creare un flusso in stream manager e quindi leggere e scrivere su di esso. Stream manager esporta quindi il flusso in Kinesis Data Streams. Il diagramma seguente mostra questo flusso di lavoro.
Lo scopo di questo tutorial è mostrare in che modo le funzioni Lambda definite dall'utente utilizzano ilStreamManagerClient
oggetto inAWS IoT GreengrassSDK core per interagire con stream manager. Per semplicità, la funzione Python Lambda creata per questo tutorial genera dati del dispositivo simulati.
Prerequisiti
Per completare questo tutorial, è necessario quanto segue:
-
Un gruppo Greengrass e un core Greengrass (v1.10 o versioni successive). Per informazioni su come creare un gruppo e un core Greengrass, consultaGuida introduttiva con AWS IoT Greengrass. Nel tutorial Nozioni di base sono descritte anche le fasi per l'installazione del software AWS IoT Greengrass Core.
Nota
Stream manager non è supportato su OpenWrt Distribuzioni.
-
Java 8 Runtime (JDK 8) installato sul dispositivo principale.
-
Per distribuzioni basate su Debian (incluso Raspbian) o distribuzioni basate su Ubuntuu, eseguire il comando seguente:
sudo apt install openjdk-8-jdk
-
Per distribuzioni basate su Red Hat (incluso Amazon Linux), eseguire il comando seguente:
sudo yum install java-1.8.0-openjdk
Per ulteriori informazioni, consulta How to download and install prebuilt OpenJDK packages
nella documentazione di OpenJDK.
-
-
AWS IoT GreengrassCore SDK per Python v1.5.0 o versioni successive. Per utilizzare
StreamManagerClient
nellaAWS IoT GreengrassCore SDK per Python, devi:-
Installare Python 3.7 o versioni successive sul dispositivo core.
-
Includi l'SDK e le sue dipendenze nel pacchetto di distribuzione delle funzioni Lambda. Le istruzioni vengono fornite in questo tutorial.
Suggerimento
È possibile utilizzare
StreamManagerClient
con Java o NodeJS. Per il codice di esempio, consultaAWS IoT GreengrassSDK for JavaeAWS IoT GreengrassSDK per Node.js sul GitHub. -
-
Un flusso di destinazione denominato
MyKinesisStream
creato in Amazon Kinesis Data Streams nella stessaRegione AWScome il tuo gruppo Greengrass. Per ulteriori informazioni, consultaCreare un flussonellaGuida per gli sviluppatori di Amazon Kinesis.Nota
In questa esercitazione, stream manager esporta i dati in Kinesis Data Streams, con conseguente addebito dei costiAccount AWS. Per informazioni sui prezzi, consultaPrezzi di Kinesis Data Streams
. Per evitare costi aggiuntivi, puoi eseguire questo tutorial senza creare un flusso di dati Kinesis. In questo caso, controlla i log per vedere se stream manager ha tentato di esportare il flusso in Kinesis Data Streams.
-
Una policy IAM aggiunta allaRuolo del gruppo Greengrassche consente a
kinesis:PutRecords
un'operazione sul flusso di dati di destinazione, come mostrato nell'esempio seguente:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kinesis:PutRecords" ], "Resource": [ "arn:aws:kinesis:
region
:account-id
:stream/MyKinesisStream" ] } ] }
Il tutorial include le seguenti fasi di alto livello:
Il completamento di questo tutorial richiede circa 20 minuti.
Fase 1: Creazione di un pacchetto di distribuzione della funzione Lambda
In questa fase, viene creato un pacchetto di distribuzione della funzione Lambda contenente il codice della funzione Python e le dipendenze. Questo pacchetto viene caricato in un secondo momento quando si crea ilFunzione Lambda inAWS Lambda. La funzione Lambda utilizza ilAWS IoT GreengrassCore SDK per creare flussi locali e interagire con essi.
Nota
Le funzioni Lambda definite dall'utente devono utilizzare ilAWS IoT GreengrassCore SDKinteragire con stream manager. Per ulteriori informazioni sui requisiti di Stream Manager di Greengrass, consulta l'argomento relativo ai requisiti di Stream Manager di Greengrass.
-
Download diAWS IoT GreengrassSDK per Pythonv1.5.0 o versioni successive.
-
Decomprimere il pacchetto scaricato per ottenere l'SDK. Il kit SDK è la cartella
greengrasssdk
. -
Installare le dipendenze di pacchetti da includere con l'SDK nel pacchetto di distribuzione della funzione Lambda.
-
Passare alla directory SDK che contiene il file
requirements.txt
. Questo file elenca le dipendenze. -
Installare le dipendenze SDK. Ad esempio, eseguire il comando
pip
seguente per installarle nella directory corrente:pip install --target . -r requirements.txt
-
-
Salvare la seguente funzione del codice Python nel file locale
transfer_stream.py
.Suggerimento
Per il codice di esempio che utilizza Java e NodeJS, consultaAWS IoT GreengrassSDK for Java
eAWS IoT GreengrassSDK per Node.js sul GitHub. import asyncio import logging import random import time from greengrasssdk.stream_manager import ( ExportDefinition, KinesisConfig, MessageStreamDefinition, ReadMessagesOptions, ResourceNotFoundException, StrategyOnFull, StreamManagerClient, ) # This example creates a local stream named "SomeStream". # It starts writing data into that stream and then stream manager automatically exports # the data to a customer-created Kinesis data stream named "MyKinesisStream". # This example runs forever until the program is stopped. # The size of the local stream on disk will not exceed the default (which is 256 MB). # Any data appended after the stream reaches the size limit continues to be appended, and # stream manager deletes the oldest data until the total stream size is back under 256 MB. # The Kinesis data stream in the cloud has no such bound, so all the data from this script is # uploaded to Kinesis and you will be charged for that usage. def main(logger): try: stream_name = "SomeStream" kinesis_stream_name = "MyKinesisStream" # Create a client for the StreamManager client = StreamManagerClient() # Try deleting the stream (if it exists) so that we have a fresh start try: client.delete_message_stream(stream_name=stream_name) except ResourceNotFoundException: pass exports = ExportDefinition( kinesis=[KinesisConfig(identifier="KinesisExport" + stream_name, kinesis_stream_name=kinesis_stream_name)] ) client.create_message_stream( MessageStreamDefinition( name=stream_name, strategy_on_full=StrategyOnFull.OverwriteOldestData, export_definition=exports ) ) # Append two messages and print their sequence numbers logger.info( "Successfully appended message to stream with sequence number %d", client.append_message(stream_name, "ABCDEFGHIJKLMNO".encode("utf-8")), ) logger.info( "Successfully appended message to stream with sequence number %d", client.append_message(stream_name, "PQRSTUVWXYZ".encode("utf-8")), ) # Try reading the two messages we just appended and print them out logger.info( "Successfully read 2 messages: %s", client.read_messages(stream_name, ReadMessagesOptions(min_message_count=2, read_timeout_millis=1000)), ) logger.info("Now going to start writing random integers between 0 and 1000 to the stream") # Now start putting in random data between 0 and 1000 to emulate device sensor input while True: logger.debug("Appending new random integer to stream") client.append_message(stream_name, random.randint(0, 1000).to_bytes(length=4, signed=True, byteorder="big")) time.sleep(1) except asyncio.TimeoutError: logger.exception("Timed out while executing") except Exception: logger.exception("Exception while running") def function_handler(event, context): return logging.basicConfig(level=logging.INFO) # Start up this sample code main(logger=logging.getLogger())
-
Comprimere le voci seguenti nel file
transfer_stream_python.zip
. Questo file è il pacchetto di distribuzione della funzione Lambda.-
transfer_stream.py. La logica dell'app.
-
greengrasssdk. Libreria richiesta per le funzioni Python Greengrass Lambda che pubblicano messaggi MQTT.
Operazioni di stream managersono disponibili nella versione 1.5.0 o successiva delAWS IoT GreengrassSDK di base per Python.
-
Le dipendenze installate per ilAWS IoT GreengrassCore SDK per Python (ad esempio,
cbor2
directory).
Quando crei il file
zip
, includi solo questi elementi, non la cartella che li contiene. -
Fase 2: Creazione di una funzione Lambda
In questa fase, utilizzerai ilAWS Lambdaconsole per creare una funzione Lambda e configurarla in modo che utilizzi il pacchetto di distribuzione. In seguito, pubblicherai una versione della funzione e creerai un alias.
-
Innanzitutto, crea la funzione Lambda.
-
Nella AWS Management Console, scegli Services (Servizi) e apri la console AWS Lambda.
-
ScegliereCrea funzionee quindiAuthor from scratch (Crea da zero).
-
Nella sezione Basic information (Informazioni di base), specifica i seguenti valori:
-
Nel campo Function name (Nome funzione), immettere
TransferStream
. -
In Runtime, scegliere Python 3.7.
-
PerAutorizzazioni, mantenere l'impostazione predefinita. Questo crea un ruolo di esecuzione che concede le autorizzazioni Lambda di base. Tale ruolo non viene utilizzato daAWS IoT Greengrass.
-
-
Nella parte inferiore della pagina, scegliereCrea funzione.
-
-
Quindi, registra il gestore e carica il pacchetto di distribuzione della funzione Lambda.
-
SulCodescheda, sottoCodice sorgente, scegliCarica da. Dal menu a discesa, scegli.zip.
-
ScegliereCaricamentoe quindi
transfer_stream_python.zip
pacchetto di distribuzione. Quindi, scegliere Save (Salva). -
SulCodetab per la funzione, sottoImpostazioni di runtime, scegliModificare, quindi immettere i valori seguenti.
-
In Runtime, scegliere Python 3.7.
-
In Handler (Gestore), immetti
transfer_stream.function_handler
-
-
Seleziona Save (Salva.
Nota
LaTestpulsante sul pulsanteAWS Lambdala console non funziona con questa funzione. LaAWS IoT GreengrassCore SDK non contiene moduli necessari per eseguire le funzioni Lambda di Greengrass in modo indipendente nelAWS LambdaConsole. Questi moduli (ad esempio,
greengrass_common
) vengono forniti alle funzioni dopo che sono state implementate nel core Greengrass.
-
-
Ora, pubblica la prima versione della funzione Lambda e crea unaalias per la versione.
Nota
I gruppi Greengrass possono fare riferimento a una funzione Lambda tramite alias (consigliato) o per versione. L'utilizzo di un alias semplifica la gestione degli aggiornamenti del codice perché non è necessario modificare la tabella di sottoscrizione o la definizione del gruppo quando il codice funzione viene aggiornato. Invece, è sufficiente puntare l'alias alla nuova versione della funzione.
-
SulTransferStream: 1pagina di configurazione, dallaOperazionimenu, scegliCreare alias.
-
Nella pagina Create a new alias (Crea un nuovo alias), utilizza i seguenti valori:
-
In Name (Nome), inserire
GG_TransferStream
. -
In Version (Versione), selezionare 1.
Nota
AWS IoT Greengrassnon supporta gli alias Lambda per$LATESTVersioni.
-
-
Scegli Crea.
-
Ora puoi aggiungere la funzione Lambda al gruppo Greengrass.
Fase 3: Aggiunta di una funzione Lambda al gruppo Greengrass
In questa fase, aggiungerai la funzione Lambda al gruppo, quindi configurerai il ciclo di vita e le variabili di ambiente della funzione Lambda. Per ulteriori informazioni, consulta la pagina Controllo dell'esecuzione delle funzioni Greengrass Lambda utilizzando la configurazione specifica del gruppo .
NellaAWS IoTRiquadro di navigazione della console, inManage (Gestione), espandereApparecchi Greengrasse quindiGruppi (V1).
Scegliere il gruppo target.
-
Nella pagina di configurazione del gruppo, scegliereFunzioni LambdaTabulatore.
-
UNDERFunzioni di Lambda, scegliInserisci.
-
SulAggiungi funzione Lambda, scegliere la paginaLambda function (Funzione Lambda)per la funzione Lambda.
-
Per ilVersione delle Lambda, scegliAlias: GG_TransferStream.
Configurare ora le proprietà che determinano il comportamento della funzione Lambda nel gruppo Greengrass.
-
NellaConfigurazione della funzione Lambda, apportare le seguenti modifiche:
-
Impostare Memory limit (Limite di memoria) su 32 MB.
-
PerPinned, scegliTrue.
Nota
UNdi lunga durata(oppureappuntato) La funzione Lambda si avvia automaticamente dopoAWS IoT Greengrassinizia e continua a funzionare in un proprio container. Questo è in contrasto con unon demandFunzione Lambda, che viene avviata quando viene richiamata e termina quando non vi sono più attività da eseguire. Per ulteriori informazioni, consulta la pagina Configurazione del ciclo di vita per le funzioni Greengrass Lambda .
-
-
ScegliereAggiungi funzione Lambda.
Fase 4: Abilitazione di Stream Manager
In questa fase, assicurati che stream manager sia abilitato.
-
Nella pagina di configurazione del gruppo, scegliereFunzioni LambdaTabulatore.
-
UNDERFunzioni AWS Lambda, selezionaStream managere controlla lo stato. Se disabilitato, scegliere Edit (Modifica). Quindi, scegliere Enable (Abilita) e Save (Salva). È possibile utilizzare le impostazioni dei parametri predefinite per questo tutorial. Per ulteriori informazioni, consulta la pagina Configurazione di Stream Manager di AWS IoT Greengrass .
Nota
Quando utilizzi la console per abilitare stream manager e distribuire il gruppo, la dimensione della memoria per stream manager è impostata su 4194304 KB (4 GB) per impostazione predefinita. Consigliamo di impostare la dimensione della memoria su almeno 128000 KB.
Fase 5: Configurazione della registrazione locale
In questa fase, si configuraAWS IoT Greengrassi componenti di sistema, le funzioni Lambda definite dall'utente e i connettori nel gruppo per scrivere log nel file system del dispositivo core. Puoi utilizzare i log per risolvere eventuali problemi che potrebbero verificarsi. Per ulteriori informazioni, consulta la pagina Monitoraggio con i log AWS IoT Greengrass .
Fase 6: Distribuire il gruppo Greengrass
Distribuire il gruppo al nuovo dispositivo core.
Fase 7: Eseguire il test dell'applicazione
LaTransferStream
La funzione Lambda genera dati del dispositivo simulati. Scrive i dati in un flusso che viene esportato da stream manager nel flusso di dati Kinesis target.
-
Nella console Amazon Kinesis, sottoKinesis Data Streams, scegliMyKinesisStream.
Nota
Se il tutorial è stato eseguito senza un flusso di dati Kinesis di destinazione, controllare il file di log per stream manager (
GGStreamManager
). Se contieneexport stream MyKinesisStream doesn't exist
in un messaggio di errore, il test viene superato. Questo errore indica che il servizio ha tentato di esportare nel flusso ma il flusso non esiste. -
SulMyKinesisStreampagina, scegliereMonitoraggio. Se il test vien superato, i dati sono visibili nei grafici Put Records (Inserisci record) . A seconda della connessione, potrebbe essere necessario fino a un minuto prima che i dati vengano visualizzati.
Importante
Al termine della sessione di test, eliminare il flusso di dati Kinesis per evitare di incorrere in ulteriori costi.
In alternativa, eseguire i comandi seguenti per arrestare il daemon Greengrass. Ciò impedisce al core di inviare messaggi fino a quando non si è pronti a continuare il test.
cd /greengrass/ggc/core/ sudo ./greengrassd stop
-
Remove ilTransferStreamLambda function (Funzione Lambda).
NellaAWS IoTRiquadro di navigazione della console, inManage (Gestione), espandereApparecchi Greengrasse quindiGruppi (V1).
-
UNDERGruppi di Greengrass, scegliere il gruppo.
-
SulLambda, scegliere i puntini di sospensione (...) per ilTransferStreamfunzione, quindi scegliereFunzione Remove.
-
In Actions (Operazioni), scegliere Deploy (Distribuisci).
Per visualizzare le informazioni di registrazione o risolvere problemi con i flussi, controllare i log per le funzioni TransferStream
e GGStreamManager
. È necessario disporre delle autorizzazioni root
per leggere i log AWS IoT Greengrass nel file system.
-
TransferStream
scrive le voci di log in
.greengrass-root
/ggc/var/log/user/region
/account-id
/TransferStream.log -
GGStreamManager
scrive le voci di log in
.greengrass-root
/ggc/var/log/system/GGStreamManager.log
Se hai bisogno di ulteriori informazioni sulla risoluzione dei problemi, puoi farloimpostare il livello di loggingperLog di LambdaaLog di debuge quindi distribuire nuovamente il gruppo.