Amazon SNS (Simple Notification Service) per gestione notifiche
da Davide Riboldi · pubblicato il 10 giugno, 2014 · modificato il 5 giugno, 2017

Amazon SNS è un servizio che coordina e gestisce la consegna o l’invio di messaggi tra servizi, applicazioni e device mobili. Il suo utilizzo come vedremo in seguito è elastico e si può adattare a qualsiasi esigenza applicativa che si necessita. Molti servizi che troviamo sugli Amazon Web Services sono già predisposti alla spedizione di notifiche tramite questo servizio, il quale può essere implementato anche nei nostri programmi tramite l’utilizzo di semplici API e SDK messi a disposizione da Amazon.

Introduzione

Questo servizio coordina e gestisce la consegna o l’invio di messaggi verso degli endpoint chiamati anche client. Ci sono due tipi di client: I publisher che comunicano in maniera asincrona verso i subscriber inviando un messaggio attraverso un punto d’accesso logico chiamato topic. I subscriber (web server, indirizzi email o code SQS) ricevono i messaggi o le notifiche attraverso uno dei protocolli supportati (SQS, HTTP/S, email, SMS) una volta che questi vengono associati ad un topic.

Amazon SNS

Quando si utilizza Amazon SNS (come proprietario) è possibile creare un topic e controllare gli accessi con delle policy che determinano quale publisher e quale subscriber possono comunicare con il topic. Un publisher può inviare messaggi ad un topic che lui stesso ha creato, oppure verso un topic per il quale gli sono stati concessi i permessi di pubblicazione. Quindi anche topic al di fuori del proprio account.

Invece di avere uno specifico indirizzo di destinazione per ogni messaggio inviato, un publisher invia il suo messaggio verso un topic. Amazon SNS abbina il topic ad una lista di subscriber che lo hanno sottoscritto e invia un messaggio ad ognuno di loro. Ogni topic possiede un nome univoco che identifica l’endpoint, questo nome viene utilizzato dal publisher per postare i messaggi e dal subscriber per registrare le notifiche.

Scenario “fanout”

Si parla di uno scenario “fanout” quando in Amazon SNS un messaggio viene inviato ad un topic e questo viene replicato e mandato su più code Amazon SQS, endpoint HTTP o indirizzi email. Questo ci permette di sfruttare un sistema di elaborazione asincrono parallelo. Per chiarire il concetto vi allego la seguente immagine:

Amazon SNS

Per esempio prendiamo in considerazione un’applicazione di e-commerce, questa può essere sviluppata per inviare un messaggio SNS verso un topic ogni qual volta venga eseguito un ordine per un prodotto, le code di Amazon SQS sottoscritte al topic riceveranno un’identica notifica per ogni nuovo ordine. Un’istanza collegata ad una di queste code potrebbe gestire l’elaborazione dell’ordine, mentre un’altra istanza EC2 potrebbe essere collegata ad un data warehouse per l’analisi degli ordini.

Lo scenario “fanout” potrebbe anche essere utilizzato per replicare i dati inviati in produzione verso l’ambiente di sviluppo, infatti è possibile fare un test dell’applicazione continuando ad alimentare l’ambiente di test con dati che arrivano dalla produzione.

Facciamo un test

Come abbiamo visto in precedenza per fare un test completo dobbiamo avere un topic, un publisher e un subscriber. Come prima cosa dobbiamo creare il topic in quanto è il canale di comunicazione tra gli altri due componenti. Quindi entriamo nella nostra management console, selezioniamo il servizio SNS e scegliamo “create topic”.

Amazon SNS

Per ricevere i messaggi in un topic bisogna iscrivere l’endpoint e quindi creare un subscriber, questo può essere un server, un indirizzo email o una coda SQS. Sempre dal menu del servizio selezioniamo “My Subscriptions” e l’azione per la creazione di un nuovo elemento, scegliamo il protocollo, l’endpoint e confermiamo la creazione.

Come publisher possiamo utilizzare per fare delle prove direttamente la management console, che mette a disposizione un semplice tools per spedire i messaggi al topic che abbiamo appena creato. Quindi selezioniamo il tasto publish, specifichiamo soggetto e descrizione, spediamo il messaggio al topic e controlliamo il messaggio ricevuto.

Messaggi e protocolli

Se esistono diversi subscriber che si sono registrati al topic e questi hanno dei protocolli di comunicazione diversi, è possibile spedire al topic un messaggio differente in base al protocollo. Ad esempio possiamo mandare un messaggio breve per la spedizione di un SMS e uno più lungo per una spedizione su posta elettronica. I protocolli supportati sono HTTP, HTTPS, EMAIL, SMS, JSON, SQS ect. Ognuno di questi protocolli può avere un messaggio con contenuti diversi pur mantenendo lo stesso invio.

Mobile Push Notification

Con Amazon SNS è possibile inviare messaggi di notifica direttamente verso un’app installata su un device mobile. I messaggi di notifica inviati verso un endpoint mobile possono apparire nell’app come messaggio di allarme, avviso sonoro o badge updates.

I servizi di push notification supportati da Amazon:

Amazon SNS

I servizi di notifica come APNS e GCM mantengono il collegamento alle apps e ai dispositivi mobili ad essi associati. Quando le app e i dispositivi vengono registrati al servizio, questi restituiscono un device token. Amazon SNS utilizza il device token per la creazione dell’endpoint mobile e per potergli inviare i messaggi di notifica.

Guida completa su AWS

Questo articolo appartiene ad una serie di pubblicazioni che costituiscono una guida completa dedicata agli Amazon Web Services.  Molti servizi che trattiamo in questo blog vengono anche spiegati con dei video che trovate nel nostro canale youtube. Se volete seguire questo percorso didattico iscrivetevi alla community Cloud AWS.

1 Commento

  1. La caratteristica principale per cui sono tentato di provare questo servizio è la semplificazione che riguarda le notifiche push sui device mobile Android e IOS. Anche tutti gli SDK e i linguaggi disponibili non sono male.

condividi