Esportazione di flussi di dati inCloud AWS(console) - 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à.

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

Diagramma del flusso di lavoro di gestione dei flussi.

Lo scopo di questo tutorial è mostrare in che modo le funzioni Lambda definite dall'utente utilizzano ilStreamManagerClientoggetto 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 utilizzareStreamManagerClientnellaAWS 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.jssul GitHub.

  • Un flusso di destinazione denominatoMyKinesisStreamcreato 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 akinesis:PutRecordsun'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.

  1. Download diAWS IoT GreengrassSDK per Pythonv1.5.0 o versioni successive.

  2. Decomprimere il pacchetto scaricato per ottenere l'SDK. Il kit SDK è la cartella greengrasssdk.

  3. Installare le dipendenze di pacchetti da includere con l'SDK nel pacchetto di distribuzione della funzione Lambda.

    1. Passare alla directory SDK che contiene il file requirements.txt. Questo file elenca le dipendenze.

    2. Installare le dipendenze SDK. Ad esempio, eseguire il comando pip seguente per installarle nella directory corrente:

      pip install --target . -r requirements.txt
  4. 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 JavaeAWS IoT GreengrassSDK per Node.jssul 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())
  5. 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,cbor2directory).

    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.

  1. Innanzitutto, crea la funzione Lambda.

    1. Nella AWS Management Console, scegli Services (Servizi) e apri la console AWS Lambda.

    2. ScegliereCrea funzionee quindiAuthor from scratch (Crea da zero).

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

    4. Nella parte inferiore della pagina, scegliereCrea funzione.

  2. Quindi, registra il gestore e carica il pacchetto di distribuzione della funzione Lambda.

    1. SulCodescheda, sottoCodice sorgente, scegliCarica da. Dal menu a discesa, scegli.zip.

      Il menu a discesa Carica da con file.zip evidenziato.
    2. ScegliereCaricamentoe quinditransfer_stream_python.zippacchetto di distribuzione. Quindi, scegliere Save (Salva).

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

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

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

    1. Nel menu Actions (Operazioni), seleziona Publish new version (Pubblica nuova versione).

    2. Per Version description (Descrizione versione), immettere First version, quindi scegliere Publish (Pubblica).

    3. SulTransferStream: 1pagina di configurazione, dallaOperazionimenu, scegliCreare alias.

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

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

  1. NellaAWS IoTRiquadro di navigazione della console, inManage (Gestione), espandereApparecchi Greengrasse quindiGruppi (V1).

  2. Scegliere il gruppo target.

  3. Nella pagina di configurazione del gruppo, scegliereFunzioni LambdaTabulatore.

  4. UNDERFunzioni di Lambda, scegliInserisci.

  5. SulAggiungi funzione Lambda, scegliere la paginaLambda function (Funzione Lambda)per la funzione Lambda.

  6. Per ilVersione delle Lambda, scegliAlias: GG_TransferStream.

    Configurare ora le proprietà che determinano il comportamento della funzione Lambda nel gruppo Greengrass.

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

  8. ScegliereAggiungi funzione Lambda.

Fase 4: Abilitazione di Stream Manager

In questa fase, assicurati che stream manager sia abilitato.

  1. Nella pagina di configurazione del gruppo, scegliereFunzioni LambdaTabulatore.

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

  1. In Local logs configuration (Configurazione log locale), verificare se è configurata la registrazione locale.

  2. Se i log non sono configurati per i componenti di sistema Greengrass o per le funzioni Lambda definite dall'utente, scegliereModificare.

  3. ScegliereLivello di registro delle funzioni Lambda utenteeLivello di log del sistema Greengrass.

  4. Mantenere i valori predefiniti per il livello di registrazione e il limite di spazio su disco e scegliere Save (Salva).

Fase 6: Distribuire il gruppo Greengrass

Distribuire il gruppo al nuovo dispositivo core.

  1. Assicurarsi che il fileAWS IoT Greengrasscore è in esecuzione. Esegui i seguenti comandi nel terminale di Raspberry Pi in base alle esigenze.

    1. Per controllare se il daemon è in esecuzione:

      ps aux | grep -E 'greengrass.*daemon'

      Se l'output contiene una voce root per /greengrass/ggc/packages/ggc-version/bin/daemon, allora il daemon è in esecuzione.

      Nota

      La versione nel percorso dipende dalla versione del software AWS IoT Greengrass Core installata sul dispositivo core.

    2. Per avviare il daemon:

      cd /greengrass/ggc/core/ sudo ./greengrassd start
  2. Nella pagina di configurazione del gruppo, scegliereDistribuzione.

    1. NellaFunzioni Lambdascheda, sotto la schedaFunzioni AWS Lambdasezione, selezionaRilevatore di IPe scegliModificare.

    2. NellaModifica impostazioni rilevatore IPfinestra di dialogo, selezionareRileva e sostituisci automaticamente gli endpoint del broker MQTT.

    3. Seleziona Save (Salva.

      Questo consente ai dispositivi di acquisire automaticamente informazioni di base sulla connettività, come, ad esempio indirizzo IP, DNS e numero della porta. È consigliato il rilevamento automatico, ma AWS IoT Greengrass supporta anche endpoint specifici manualmente. Ti viene chiesto il metodo di individuazione solo la prima volta che il gruppo viene distribuito.

      Nota

      Se richiesto, concedi l'autorizzazione per creare ilRuolo del servizio Greengrasse associalo al tuoAccount AWSnella correnteRegione AWS. Tale ruolo consenteAWS IoT Greengrassper accedere alle risorse inAWSServizi .

      Nella pagina Deployments (Distribuzioni) vengono visualizzati il timestamp della distribuzione, l'ID versione e lo stato. Una volta completata, la distribuzione dovrebbe mostrare lo statoCompletato.

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

Fase 7: Eseguire il test dell'applicazione

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

  1. 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 contiene export 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.

  2. 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
  3. Remove ilTransferStreamLambda function (Funzione Lambda).

    1. NellaAWS IoTRiquadro di navigazione della console, inManage (Gestione), espandereApparecchi Greengrasse quindiGruppi (V1).

    2. UNDERGruppi di Greengrass, scegliere il gruppo.

    3. SulLambda, scegliere i puntini di sospensione (...) per ilTransferStreamfunzione, quindi scegliereFunzione Remove.

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

Consulta anche