{"id":4055,"date":"2022-01-21T13:59:00","date_gmt":"2022-01-21T12:59:00","guid":{"rendered":"https:\/\/blog.besharp.it\/?p=4055"},"modified":"2022-01-20T16:44:44","modified_gmt":"2022-01-20T15:44:44","slug":"una-panoramica-completa-delliot-su-aws","status":"publish","type":"post","link":"https:\/\/blog.besharp.it\/it\/una-panoramica-completa-delliot-su-aws\/","title":{"rendered":"Una panoramica completa dell’IoT su AWS"},"content":{"rendered":"\n
Negli ultimi anni abbiamo assistito a una crescita costante della popolarit\u00e0 di dispositivi connessi ad internet, portando alla nascita di ecosistemi IoT (Internet of Things). Tra le applicazioni IoT nel settore industriale o retail troviamo la telemetria, il controllo remoto, l’inventario, i sistemi di monitoraggio biomedico, i dispositivi indossabili per il fitness, i gadget connessi per gli assistenti vocali e molto altro. Tutti questi oggetti devono essere accessibili da Internet per permetterci di monitorarne costantemente lo stato, ricevere notifiche o controllarli a distanza.<\/p>\n\n\n\n
In questo articolo tratteremo l’argomento in modo piuttosto informativo e discorsivo, partendo dalle aree pi\u00f9 generiche fino ai classici problemi che ci si trova ad affrontare sviluppando questo tipo di applicazioni, alla descrizione dei protocolli e, infine, una panoramica dei servizi che AWS offre per la realizzazione di soluzioni IoT.<\/p>\n\n\n\n
Nei capitoli seguenti esamineremo la creazione di un ecosistema IoT, i punti chiave da considerare e quali strumenti possono aiutarci. <\/p>\n\n\n\n
Supponiamo di voler realizzare una produzione di massa di dispositivi connessi. Dobbiamo considerare che gli utenti potrebbero posizionarli ovunque, la quantit\u00e0 di dati trasferiti potrebbe variare e la comunicazione potrebbe dover essere bidirezionale. Potremmo avere dispositivi collocati in una stanza con accesso a una connessione Internet stabile senza vincoli di larghezza di banda e altri che operano all’aperto collegati tramite una rete mobile. Queste limitazioni ci costringono a scegliere un protocollo leggero ed elastico adatto a varie condizioni di rete e posizionamento dei dispositivi. <\/p>\n\n\n\n
La sicurezza della nostra infrastruttura \u00e8 da considerarsi cruciale: ogni dato inviato dai nostri dispositivi deve essere crittografato sia in transito che a riposo. Anche se il traffico non contiene informazioni sensibili secondo le leggi applicabili, non vogliamo che persone o sistemi non autorizzati scoprano cosa viene inviato o ottengano l’accesso alle informazioni sull’infrastruttura sottostante. Inoltre, i dati a volte possono essere difficili da classificare e le informazioni sensibili potrebbero non essere evidenti all’inizio, pertanto l’approccio pi\u00f9 sicuro consiste nel considerare tutto il traffico e i dati archiviati come delicati, applicando quindi un livello di sicurezza ragionevole a tutti i livelli. Dobbiamo proteggere il tunnel di connessione perch\u00e9 la situazione peggiore che potrebbe verificarsi \u00e8 l\u2019esposizione di backdoor che potrebbero potenzialmente consentire a chiunque l\u2019accesso ai nostri dispositivi. <\/p>\n\n\n\n
La tipica applicazione IoT consiste in un insieme di azioni che vengono eseguite lato server quando i client inviano messaggi, inclusa l’elaborazione e l’invio di risposte o comandi\/notifiche ai dispositivi. La frequenza dei messaggi pu\u00f2 variare a seconda dell’applicazione, con picchi di lavoro alternati a periodi di inattivit\u00e0, quindi la nostra architettura deve essere scalabile ed elastica. Nella maggior parte dei casi, il software deve reagire agli eventi. Quando un client notifica un cambio di stato al server, viene creato un nuovo evento e diverse aree dell’applicazione back-end possono agire di conseguenza. Vogliamo inoltre che la nostra architettura si adatti al numero di dispositivi connessi in modo da essere sufficientemente elastica per far fronte a un carico di lavoro crescente. <\/p>\n\n\n\n
MQTT sta per Message Queuing Telemetry Transport ed \u00e8 un protocollo di messaggistica creato per soddisfare gli scopi sopra citati. Di solito si appoggia al protocollo TCP\/IP e definisce due tipi di entit\u00e0 di rete: <\/p>\n\n\n\n
Il broker di messaggi offre diversi topic, che consistono in spazi utili per organizzare le informazioni pubblicate dai client, e tiene traccia degli stati di connessione, delle credenziali di sicurezza e dei certificati di tutti i dispositivi. Se la comunicazione deve essere bidirezionale, i client possono anche sottoscriversi a un topic specifico (o pi\u00f9 di uno se necessario) per ricevere i messaggi pubblicati dal broker di messaggi.<\/p>\n\n\n\n Esistono tre tipi di messaggi che i client possono inviare al broker di messaggi: <\/p>\n\n\n\n \u00c8 possibile inoltre configurare la qualit\u00e0 del servizio, che indica i parametri usati per caratterizzare la qualit\u00e0 del servizio offerto dal broker. Questi sono i possibili valori che puoi configurare:<\/p>\n\n\n\n Poich\u00e9 la sicurezza \u00e8 un punto cruciale delle infrastrutture IoT, il protocollo MQTT pu\u00f2 proteggere le informazioni trasferite utilizzando TLS e autenticare i client utilizzando protocolli di autenticazione moderni, come OAuth.<\/p>\n\n\n\n Come promesso all’inizio dell’articolo, analizzeremo i servizi di AWS che possono essere utilizzati per sviluppare applicazioni IoT nel cloud. Ma niente paura, seguiranno altri articoli in cui esploreremo nel dettaglio i servizi e i principali pattern architettonici che possiamo utilizzare!<\/p>\n\n\n\n AWS offre un’ampia variet\u00e0 di servizi che possono aiutarci a costruire una solida soluzione IoT e il pi\u00f9 famoso \u00e8 IoT Core.<\/p>\n\n\n\n IoT Core ti consente di gestire le connessioni MQTT tra i tuoi dispositivi e il cloud in un ambiente completamente serverless. Pagherai solo per le risorse che utilizzerai e si scaler\u00e0 automaticamente in base alle tue esigenze.<\/p>\n\n\n\n Per creare una nuova connessione \u00e8 necessario prima configurare un dispositivo su IoT Core. La creazione del dispositivo \u00e8 semplice. Tutto ci\u00f2 di cui hai bisogno \u00e8 un nome per la tua risorsa e configurare i certificati utilizzati per creare una connessione crittografata. Puoi anche organizzare il dispositivo IoT in gruppi distinti, assegnare tag per facilitare il filtraggio e inserirli nel proprio gruppo di fatturazione per allocare i costi. <\/p>\n\n\n\n I certificati sono facili da creare: IoT Core fornir\u00e0 le chiavi private e pubbliche con pochi click (\u00e8 vivamente consigliato archiviarle in un bucket S3 crittografato poich\u00e9 non saranno accessibili dopo il processo di creazione dell’oggetto). Se desideri fornire i tuoi certificati, IoT Core ti consente di caricarli ed associarli al dispositivo.<\/p>\n\n\n\n L’ultima cosa da fare prima di iniziare ad utilizzare il tuo nuovo dispositivo \u00e8 applicare una policy.<\/p>\n\n\n\n Le policy definiscono cosa pu\u00f2 fare il tuo dispositivo. Ad esempio, potresti avere oggetti che possono pubblicare e sottoscriversi ad un sottoinsieme specifico di topic, altri che possono solo ricevere notifiche senza poter inviare messaggi, ecc. Queste policy di sicurezza possono essere modificate in seguito e la modifica avr\u00e0 effetto immediato.<\/p>\n\n\n\n IoT Core fornisce inoltre una funzionalit\u00e0 chiamata shadow<\/em>. Lo shadow \u00e8 un documento JSON che contiene lo stato corrente di uno specifico dispositivo. I tuoi dispositivi possono aggiornarlo semplicemente pubblicando un messaggio sull\u2019endpoint del proprio topic. Un oggetto IoT pu\u00f2 avere pi\u00f9 shadow con nome e solo una senza nome. Il contenuto degli shadow \u00e8 accessibile dall’applicazione anche quando il relativo dispositivo \u00e8 offline e viene inoltrato al dispositivo quando questo si riconnette. <\/p>\n\n\n\n Gli oggetti IoT possono trarre vantaggio dallo shadow poich\u00e9 \u00e8 un modo per archiviare lo stato e la configurazione in uno spazio cloud centralizzato accessibile solo da esso e dalla tua applicazione.<\/p>\n\n\n\n A fronte degli aggiornamenti sui topic, potresti voler scatenare eventi che li gestiscano. Questo pu\u00f2 essere fatto con le IoT Rules. Ogni regola ha un nome, un’istruzione simile a SQL che consente di filtrare i messaggi e selezionare un sottoinsieme di campi e un elenco di azioni da intraprendere. \u00c8 possibile associare diversi servizi AWS alle tue regole IoT; Ecco alcuni esempi: <\/p>\n\n\n\n Quest’ultimo servizio \u00e8 utile anche quando vuoi ridurre il numero di chiamate ed i costi di S3: \u00e8 consigliato evitare l\u2019esecuzione di una chiamata PutObject verso S3 per ogni aggiornamento inviato dai tuoi dispositivi perch\u00e9 si rischia di incorrere in un aumento inaspettato dei costi del servizio. Con Kinesis Firehose \u00e8 possibile archiviare pi\u00f9 messaggi in un singolo oggetto S3 con una singola chiamata API.<\/p>\n\n\n\n La console IoT Core offre un modo semplice e rapido per monitorare lo stato generale dei tuoi dispositivi. \u00c8 possibile consultare direttamente dalla homepage del servizio il numero di dispositivi attualmente connessi, il numero di messaggi pubblicati e le regole eseguite. Inoltre IoT Core pu\u00f2 essere configurato per pubblicare i log delle attivit\u00e0 e metriche su Amazon CloudWatch.<\/p>\n\n\n\n Supponiamo di voler costruire un ecosistema IoT con diversi sensori che raccolgono informazioni meteorologiche. Ogni sensore \u00e8 un dispositivo IoT Core con i propri certificati e invia periodicamente un aggiornamento in formato JSON contenente le informazioni di campionamento a uno o pi\u00f9 topic MQTT. Ecco cosa vogliamo fare:<\/p>\n\n\n\n Questa possibile architettura soddisfa tutte le nostre esigenze: \u00e8 interamente serverless, il che significa che pu\u00f2 scalare in base alle nostre esigenze; \u00e8 conveniente perch\u00e9 paghiamo solo per le risorse che stiamo utilizzando; \u00e8 elastica poich\u00e9 pu\u00f2 crescere in termini di funzionalit\u00e0 in quanto ogni aspetto della nostra applicazione \u00e8 disaccoppiato dagli altri; le connessioni tra client e IoT Core sono crittografate, quindi la nostra infrastruttura \u00e8 sicura. <\/p>\n\n\n\n Abbiamo esplorato le principali aree di interesse relative al mondo IoT; abbiamo introdotto il protocollo MQTT ed il servizio AWS IoT Core con le sue funzionalit\u00e0 principali utili a costruire applicazioni interamente cloud-native<\/p>\n\n\n\n Restate sintonizzati per la serie di futuri articoli in cui approfondiremo le problematiche legate al mondo IoT e di cui questo \u00e8 solo il capitolo introduttivo!<\/p>\n","protected":false},"excerpt":{"rendered":" Negli ultimi anni abbiamo assistito a una crescita costante della popolarit\u00e0 di dispositivi connessi ad internet, portando alla nascita di […]<\/p>\n","protected":false},"author":18,"featured_media":4064,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[477],"tags":[257,490,251,275,442,263,412,554],"class_list":["post-4055","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cloud-native-development","tag-amazon-cloudwatch","tag-amazon-dynamodb-it","tag-amazon-s3","tag-aws-cloudformation","tag-aws-iot","tag-aws-lambda","tag-internet-of-things-iot","tag-lambda"],"yoast_head":"\n<\/figure>\n\n\n\n
Distribuzione dell’ecosistema IoT nel cloud<\/h1>\n\n\n\n
IoT Core<\/h2>\n\n\n\n
Device shadow<\/h3>\n\n\n\n
IoT Rules<\/h3>\n\n\n\n
Monitoraggio dei dispositivi<\/h3>\n\n\n\n
Un esempio<\/h2>\n\n\n\n
Conclusioni<\/h1>\n\n\n\n