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à.
Tutorial: Formattare una notifica utilizzando una funzione AWS Lambda
Questo tutorial dimostra come inviare i dati dei MQTT messaggi a un' AWS Lambda azione per la formattazione e l'invio a un altro servizio. AWS In questo tutorial, l' AWS Lambda azione utilizza AWS SDK per inviare il messaggio formattato all'SNSargomento Amazon che hai creato nel tutorial su come farloTutorial: invio di una SNS notifica Amazon.
Nel tutorial su come farloTutorial: invio di una SNS notifica Amazon, il JSON documento risultante dall'istruzione di interrogazione della regola è stato inviato come corpo del messaggio di testo. Il risultato è un messaggio di testo simile a questo esempio:
{"device_id":"32","reported_temperature":38,"max_temperature":30}
In questo tutorial, utilizzerai un'azione di AWS Lambda regola per richiamare una AWS Lambda funzione che formatta i dati dell'istruzione di query della regola in un formato più intuitivo, come questo esempio:
Device 32 reports a temperature of 38, which exceeds the limit of 30.
La AWS Lambda funzione che creerai in questo tutorial formatta la stringa del messaggio utilizzando i dati dell'istruzione rule query e richiama la funzione di SNSpubblicazione
Cosa imparerai in questo tutorial
-
Come creare e testare una AWS Lambda funzione
-
Come utilizzare la AWS Lambda funzione AWS SDK in an per pubblicare una SNS notifica Amazon
-
Come utilizzare SQL query e funzioni semplici in un'istruzione di query basata su regole
-
Come usare il MQTT client per testare una regola AWS IoT
Questo tutorial dura circa 45 minuti.
In questo tutorial, dovrai:
Prima di iniziare questo tutorial, assicurati di disporre di:
-
Configurare Account AWS
Avrai bisogno della tua Account AWS AWS IoT console per completare questo tutorial.
-
Aver rivisto Visualizza MQTT i messaggi con il AWS IoT MQTT client
Assicurati di poter utilizzare il MQTT client per iscriverti e pubblicare su un argomento. Utilizzerai il MQTT client per testare la tua nuova regola in questa procedura.
-
Aver completato gli altri tutorial sulle regole in questa sezione
Questo tutorial richiede l'argomento di SNS notifica che hai creato nel tutorial su come farloTutorial: invio di una SNS notifica Amazon. Si presuppone inoltre che in questa sezione siano stati completati i tutorial relativi alle regole.
-
Aver rivisto la panoramica di AWS Lambda
Se non l'hai mai usato AWS Lambda prima, AWS Lambdaconsulta la sezione Guida introduttiva a Lambda per conoscerne i termini e i concetti.
Passaggio 1: creare una AWS Lambda funzione che invii un messaggio di testo
La AWS Lambda funzione di questo tutorial riceve il risultato dell'istruzione di query della regola, inserisce gli elementi in una stringa di testo e invia la stringa risultante ad Amazon SNS come messaggio in una notifica.
A differenza del tutorial su come fareTutorial: invio di una SNS notifica Amazon, che utilizzava un'azione di AWS IoT regola per inviare la notifica, questo tutorial invia la notifica dalla funzione Lambda utilizzando una funzione di. AWS SDK L'argomento effettivo SNS delle notifiche Amazon utilizzato in questo tutorial, tuttavia, è lo stesso che hai usato nel tutorial su come farloTutorial: invio di una SNS notifica Amazon.
Per creare una AWS Lambda funzione che invii un messaggio di testo
-
Crea una nuova AWS Lambda funzione.
-
Nella console AWS Lambda
scegliere Create function (Crea funzione). -
In Create function (Crea funzione) seleziona Use a blueprint (Usa un blueprint).
Cerca e seleziona il blueprint
hello-world-python
, quindi scegli Configure (Configura). -
In Basic information (Informazioni di base):
-
In Function name (Nome funzione), inserisci il nome della funzione,
format-high-temp-notification
. -
In Ruolo di esecuzione, scegli Crea un nuovo ruolo dai modelli di AWS policy.
-
In Nome ruolo, inserisci il nome del nuovo ruolo,
format-high-temp-notification-role
. -
In Modelli di policy, facoltativo, cerca e seleziona Amazon SNS Publish Policy.
-
Scegli Crea funzione.
-
-
-
Modifica il codice del blueprint per formattare e inviare una SNS notifica Amazon.
-
Dopo aver creato la funzione, dovresti vedere la pagina dei format-high-temp-notificationdettagli. In caso contrario, aprilo dalla pagina Lambda Funzioni
. -
Nella pagina dei format-high-temp-notificationdettagli, scegli la scheda Configurazione e scorri fino al pannello Codice funzione.
-
Nella finestra Function code (Codice della funzione), nel pannello Environment (Ambiente), scegli il file Python,
lambda_function.py
. -
Nella finestra Function code (Codice della funzione), elimina tutto il codice originale del programma dal blueprint e sostituiscilo con questo codice.
import boto3 # # expects event parameter to contain: # { # "device_id": "32", # "reported_temperature": 38, # "max_temperature": 30, # "notify_topic_arn": "
arn:aws:sns:us-east-1:57EXAMPLE833:high_temp_notice
" # } # # sends a plain text string to be used in a text message # # "Device {0} reports a temperature of {1}, which exceeds the limit of {2}." # # where: # {0} is the device_id value # {1} is the reported_temperature value # {2} is the max_temperature value # def lambda_handler(event, context): # Create an SNS client to send notification sns = boto3.client('sns') # Format text message from data message_text = "Device {0} reports a temperature of {1}, which exceeds the limit of {2}.".format( str(event['device_id']), str(event['reported_temperature']), str(event['max_temperature']) ) # Publish the formatted message response = sns.publish( TopicArn = event['notify_topic_arn'], Message = message_text ) return response -
Seleziona Deploy (Implementa).
-
-
In una nuova finestra, cerca l'Amazon Resource Name (ARN) del tuo SNS argomento Amazon tratto dal tutorial su come farloTutorial: invio di una SNS notifica Amazon.
-
In una nuova finestra, apri la pagina Argomenti della SNS console Amazon
. -
Nella pagina Argomenti, trova l'argomento di notifica high_temp_notice nell'elenco degli argomenti di Amazon. SNS
-
Trova l'argomento ARNdi notifica high_temp_notice da utilizzare nel passaggio successivo.
-
-
Crea un test per la tua funzione Lambda.
-
Nella pagina Lambda Functions
della console, nella pagina dei format-high-temp-notificationdettagli, scegli Seleziona un evento di test nell'angolo in alto a destra della pagina (anche se sembra disabilitato), quindi scegli Configura eventi di test. -
In Configure test event (Configura eventi di test), scegli Create new test event (Crea un nuovo evento di test).
-
In Event name (Nome evento), inserisci
SampleRuleOutput
. -
Nell'JSONeditor sotto Event name, incolla questo JSON documento di esempio. Questo è un esempio di ciò che la AWS IoT regola invierà alla funzione Lambda.
{ "device_id": "32", "reported_temperature": 38, "max_temperature": 30, "notify_topic_arn": "
arn:aws:sns:us-east-1:57EXAMPLE833:high_temp_notice
" } -
Fate riferimento alla finestra che contiene l'argomento ARNdella notifica high_temp_notice e copiate il valore. ARN
-
Sostituite il
notify_topic_arn
valore nell'JSONeditor con quello dell'argomento di ARN notifica.Tieni aperta questa finestra in modo da poter riutilizzare questo ARN valore quando crei la AWS IoT regola.
-
Scegli Create (Crea) .
-
-
Testare la funzione con i dati di esempio.
-
Nella pagina dei format-high-temp-notificationdettagli, nell'angolo in alto a destra della pagina, verifica che sia SampleRuleOutputvisualizzato accanto al pulsante Test. In caso contrario, sceglilo dall'elenco degli eventi di test disponibili.
-
Per inviare il messaggio di output della regola di esempio alla funzione, scegli Test.
-
Se la funzione e la notifica hanno funzionato, riceverai un messaggio di testo sul tuo cellulare che ha sottoscritto la notifica.
Se non hai ricevuto un messaggio di testo sul telefono, controlla il risultato dell’operazione. Nel pannello Function code (Codice della funzione), nella casella Execution result (Risultato dell'esecuzione), rivedi la risposta per trovare eventuali errori che si sono verificati. Non proseguire con il passaggio successivo finché la funzione non è in grado di inviare la notifica al telefono.
Fase 2: Creare una AWS IoT regola con un'azione AWS Lambda
In questo passaggio, si utilizzerà l'istruzione query della regola per formattare i dati dal dispositivo sensore meteo immaginario da inviare a una funzione Lambda, che formatta e invia un messaggio di testo.
Un esempio di messaggio payload ricevuto da un dispositivo con sensore meteo è simile al seguente:
{ "temperature": 28, "humidity": 80, "barometer": 1013, "wind": { "velocity": 22, "bearing": 255 } }
In questa regola, si utilizzerà l'istruzione query della regola per creare un payload dei messaggi per la funzione Lambda simile al seguente:
{ "device_id": "32", "reported_temperature": 38, "max_temperature": 30, "notify_topic_arn": "
arn:aws:sns:us-east-1:57EXAMPLE833:high_temp_notice
" }
Contiene tutte le informazioni necessarie alla funzione Lambda per formattare e inviare il messaggio di testo corretto.
Per creare la AWS IoT regola per chiamare una funzione Lambda
-
Apri l'hub Rules della AWS IoT console
. -
Per iniziare a creare la nuova regola in Rules (Regole), scegli Create (Crea).
-
Nella parte superiore di Create a rule (Crea una regola):
-
In Name (Nome), inserisci il nome della regola,
wx_friendly_text
.Ricorda che il nome di una regola deve essere univoco all'interno della tua regione Account AWS e non può avere spazi. Abbiamo usato un carattere di sottolineatura in questo nome per separare le due parole nel nome della regola.
-
In Description (Descrizione), descrivi la regola.
Una descrizione significativa ti aiuta a ricordare cosa fa questa regola e perché l'hai creata. La descrizione può essere lunga quanto necessario, quindi sii il più dettagliato possibile.
-
-
In Rule query statement (Istruzione query regola) di Create a rule (Crea una regola):
-
In Utilizzo della SQL versione, seleziona
2016-03-23
. -
Nella casella di modifica Rule query statement (Istruzione query regola), inserisci l'istruzione:
SELECT cast(topic(2) AS DECIMAL) as device_id, temperature as reported_temperature, 30 as max_temperature, '
arn:aws:sns:us-east-1:57EXAMPLE833:high_temp_notice
' as notify_topic_arn FROM 'device/+/data' WHERE temperature > 30Questa istruzione:
-
Ascolta i MQTT messaggi con un argomento che corrisponde al filtro degli
device/+/data
argomenti e che hanno untemperature
valore maggiore di 30. -
Seleziona il secondo elemento dalla stringa dell'argomento, lo converte in un numero decimale e quindi lo assegna al campo
device_id
. -
Seleziona il valore del campo
temperature
dal payload del messaggio e lo assegna al camporeported_temperature
. -
Crea un valore costante,
30
, per rappresentare il valore limite e lo assegna al campomax_temperature
. -
Crea un valore costante per il campo
notify_topic_arn
.
-
-
Fate riferimento alla finestra che contiene l'argomento ARNdella notifica high_temp_notice e copiate il valore. ARN
-
Sostituite il valore (ARN
arn:aws:sns:us-east-1:57EXAMPLE833:high_temp_notice
) nell'editor delle istruzioni di interrogazione ARN delle regole con l'argomento della notifica.
-
-
In Set one or more actions (Imposta una o più operazioni):
-
Per aprire l'elenco delle operazioni delle regole per questa regola, scegli Add action (Aggiungi operazione).
-
In Select an action (Seleziona un’operazione), scegli Send a message to a Lambda function (Invia un messaggio a una funzione Lambda).
-
Per aprire la pagina di configurazione dell’operazione selezionata, nella parte inferiore dell'elenco delle operazioni, scegli Configure action (Configura operazione).
-
-
In Configure action (Configura operazione):
-
In Function name (Nome della funzione), scegli Select (Seleziona).
-
Scegli format-high-temp-notification.
-
Nella parte inferiore di Configure action (Configura operazione), scegli Add action (Aggiungi operazione).
-
Per creare la regola, nella parte inferiore di Create a rule (Crea una regola), scegli Create a rule (Crea una regola).
-
Fase 3: Verifica della AWS IoT regola e AWS Lambda regola l'azione
Per testare la nuova regola, utilizzerai il MQTT client per pubblicare e sottoscrivere i MQTT messaggi utilizzati da questa regola.
Apri il MQTTclient nella AWS IoT
console
Per utilizzare il MQTT client per testare la regola
-
Nel MQTT client della AWS IoT console
, iscriviti agli argomenti di input, in questo caso, device/+/data
.-
Nel MQTT client, in Abbonamenti, scegli Sottoscrivi a un argomento.
-
In Subscription topic (Argomento sottoscrizione), inserisci l'argomento del filtro dell’argomento di input,
device/+/data
. -
Lascia gli altri campi ai valori predefiniti.
-
Scegli Subscribe to topic (Effettua sottoscrizione all'argomento).
Nella colonna Subscriptions (Sottoscrizioni), sotto Publish to a topic (Pubblica un argomento),
device/+/data
viene visualizzato.
-
-
Pubblicazione di un messaggio nell'argomento di input con un ID dispositivo specifico,
device/32/data
. Non puoi pubblicare MQTT su argomenti che contengono caratteri jolly.-
Nel MQTT client, in Abbonamenti, scegli Pubblica su argomento.
-
Nel campo Publish (Pubblica), inserisci il nome dell'argomento di input,
device/32/data
. -
Copia i dati di esempio mostrati qui e, nella casella di modifica sotto il nome dell'argomento, incolla i dati di esempio.
{ "temperature": 38, "humidity": 80, "barometer": 1013, "wind": { "velocity": 22, "bearing": 255 } }
-
Per pubblicare il tuo MQTT messaggio, scegli Pubblica su argomento.
-
-
Conferma che il messaggio di testo è stato inviato.
-
Nel MQTT client, sotto Abbonamenti, c'è un punto verde accanto all'argomento a cui ti sei iscritto in precedenza.
I punti verdi indicano che uno o più nuovi messaggi sono stati ricevuti dall'ultima volta che li hai visualizzati.
-
Sotto Subscriptions (Sottoscrizioni), scegli device/+/data (dispositivo/+/dati) per verificare che il payload del messaggio corrisponda a quello che hai appena pubblicato e assomigli a questo:
{ "temperature": 38, "humidity": 80, "barometer": 1013, "wind": { "velocity": 22, "bearing": 255 } }
-
Controlla che il telefono che hai usato per iscriverti all'SNSargomento e conferma che il contenuto del payload del messaggio abbia questo aspetto:
Device 32 reports a temperature of 38, which exceeds the limit of 30.
Se si modifica l'elemento ID dell’argomento nell'argomento del messaggio, tenere presente che la trasformazione del valore
topic(2)
in un valore numerico funzionerà solo se tale elemento nell'argomento del messaggio contiene solo caratteri numerici.
-
-
Prova a inviare un MQTT messaggio in cui la temperatura non superi il limite.
-
Nel MQTT client, in Abbonamenti, scegli Pubblica su argomento.
-
Nel campo Publish (Pubblica), inserisci il nome dell'argomento di input,
device/33/data
. -
Copia i dati di esempio mostrati qui e, nella casella di modifica sotto il nome dell'argomento, incolla i dati di esempio.
{ "temperature": 28, "humidity": 80, "barometer": 1013, "wind": { "velocity": 22, "bearing": 255 } }
-
Per inviare il MQTT messaggio, scegli Pubblica su argomento.
Il messaggio inviato dovrebbe essere visualizzato nella sottoscrizione
device/+/data
; tuttavia, poiché il valore della temperatura è inferiore alla temperatura massima nell'istruzione query della regola, non si dovrebbe ricevere un messaggio di testo.Se il comportamento non viene visualizzato correttamente, controlla i suggerimenti per la risoluzione dei problemi.
-
Risoluzione dei problemi relativi alla AWS Lambda regola e alla notifica
Ecco alcune cose da controllare nel caso in cui non stai vedendo i risultati che ti aspetti.
-
Hai un banner di errore
Se viene visualizzato un errore quando è stato pubblicato il messaggio di input, correggilo prima. I seguenti passaggi potrebbero aiutarti a correggere l'errore.
-
Non vedi il messaggio di input nel MQTT client
Ogni volta che pubblichi il messaggio di input
device/32/data
sull'argomento, tale messaggio dovrebbe apparire nel MQTT client, se hai sottoscritto il filtro deglidevice/+/data
argomenti come descritto nella procedura.Controlli
-
Controlla il filtro degli argomenti a cui hai effettuato la sottoscrizione
Se hai effettuato la sottoscrizione all'argomento del messaggio di input come descritto nella procedura, visualizzerai una copia del messaggio di input ogni volta che lo pubblichi.
Se il messaggio non viene visualizzato, controlla il nome dell'argomento sottoscritto e confrontalo con l'argomento in cui è stato pubblicato. I nomi degli argomenti fanno distinzione tra maiuscole e minuscole e l'argomento a cui è stato sottoscritto deve essere identico all'argomento in cui hai pubblicato il payload dei messaggi.
-
Controlla la funzione di pubblicazione dei messaggi
Nel MQTT client, in Abbonamenti, scegli device/+/data, controlla l'argomento del messaggio di pubblicazione, quindi scegli Pubblica sull'argomento. Dovresti vedere il payload del messaggio dalla casella di modifica sotto l'argomento visualizzato nell'elenco dei messaggi.
-
-
Non ricevi alcun messaggio SMS
Affinché la regola funzioni, deve avere la politica corretta che la autorizza a ricevere un messaggio e inviare una SNS notifica, e deve inoltre ricevere il messaggio.
Controlli
-
Controlla il Regione AWS tuo MQTT cliente e la regola che hai creato
La console su cui esegui il MQTT client deve trovarsi nella stessa AWS regione della regola che hai creato.
-
Verifica che il valore della temperatura nel payload del messaggio superi la soglia di prova
Se il valore della temperatura è minore o uguale a 30, come definito nell'istruzione query della regola, la regola non eseguirà alcuna delle operazioni.
-
Controlla l'argomento del messaggio di input nell'istruzione query della regola
Affinché la regola funzioni, deve ricevere un messaggio con il nome dell'argomento che corrisponde al filtro dell'argomento nella FROM clausola dell'istruzione di interrogazione della regola.
Controlla l'ortografia del filtro dell'argomento nell'istruzione di interrogazione delle regole con quella dell'argomento nel MQTT client. I nomi degli argomenti fanno distinzione tra maiuscole e minuscole e l'argomento del messaggio deve corrispondere al filtro argomento nell'istruzione query della regola.
-
Controllare il contenuto del payload del messaggio di input
Affinché la regola funzioni, deve trovare il campo dati nel payload del messaggio dichiarato nell'SELECTistruzione.
Controlla l'ortografia del
temperature
campo nell'istruzione Rule Query con quella del payload del messaggio nel client. MQTT I nomi dei campi fanno distinzione tra maiuscole e minuscole e il campotemperature
nell'istruzione query della regola deve essere identico a quello del campotemperature
nel payload del messaggio.Assicurati che il JSON documento nel payload del messaggio sia formattato correttamente. Se JSON contiene errori, ad esempio una virgola mancante, la regola non sarà in grado di leggerlo.
-
Controlla la SNS notifica di Amazon
QuindiPassaggio 1: crea un SNS argomento Amazon che invii un messaggio SMS di testo, fai riferimento al passaggio 3 che descrive come testare la SNS notifica Amazon e testare la notifica per assicurarti che funzioni.
-
Controlla la funzione Lambda
In Passaggio 1: creare una AWS Lambda funzione che invii un messaggio di testo, fai riferimento al passaggio 5 che descrive come testare la funzione Lambda utilizzando i dati di test e testa la funzione Lambda.
-
Controlla il ruolo utilizzato dalla regola
L'operazione della regola deve disporre dell'autorizzazione per ricevere l'argomento originale e pubblicare il nuovo argomento.
Le policy che autorizzano la regola a ricevere i dati dei messaggi e a ripubblicarli sono specifiche degli argomenti utilizzati. Se si modifica l'argomento utilizzato per ripubblicare i dati del messaggio, è necessario aggiornare il ruolo dell'operazione della regola per aggiornare la policy in modo che corrisponda all'argomento corrente.
Se si sospetta che questo sia il problema, modificare l'operazione Ripubblica regola e creare un nuovo ruolo. I nuovi ruoli creati dall'operazione della regola ricevono le autorizzazioni necessarie per eseguire queste operazioni.
-
Fase 4: Esamina i risultati e i passaggi successivi
In questo tutorial:
-
Hai creato una AWS IoT regola per chiamare una funzione Lambda che ha inviato una SNS notifica Amazon utilizzando il tuo payload di messaggi personalizzato.
-
Hai usato una semplice SQL query e delle funzioni in un'istruzione Rule Query per creare un nuovo payload di messaggi per la tua funzione Lambda.
-
Hai usato il MQTT client per testare la tua AWS IoT regola.
Passaggi successivi
Dopo aver inviato alcuni messaggi di testo con questa regola, prova a sperimentarla per vedere come la modifica di alcuni aspetti del tutorial influisce sul messaggio e quando viene inviato. Ecco alcune idee per iniziare.
-
Cambia il
device_id
nell'argomento del messaggio di input e osserva l'effetto nel contenuto del messaggio di testo. -
Modifica i campi selezionati nell'istruzione query della regola, aggiorna la funzione Lambda per utilizzarli in un nuovo messaggio e osserva l'effetto nel contenuto del messaggio di testo.
-
Modifica il test nell'istruzione query della regola per verificare una temperatura minima anziché una temperatura massima. Aggiorna la funzione Lambda per formattare un nuovo messaggio e ricordati di cambiare il nome di
max_temperature
. -
Per ulteriori informazioni su come trovare gli errori che potrebbero verificarsi durante lo sviluppo e l'utilizzo AWS IoT delle regole, consultaMonitoraggio AWS IoT.