Corso
Gestire le notifiche in tempo reale tra le tue applicazioni può essere una vera sfida, almeno senza il servizio di messaggistica giusto.
Amazon Simple Notification Service (SNS) offre una soluzione di messaggistica completamente gestita per disaccoppiare e scalare microservizi, sistemi distribuiti e applicazioni serverless. SNS ti permette di inviare messaggi a un gran numero di iscritti tramite diversi protocolli di trasporto, come HTTP/S, email, SMS e notifiche push su dispositivi mobili. AWS SNS si occupa di tutto il lavoro pesante della consegna dei messaggi, inclusi recapito affidabile, retry e backoff, così puoi concentrarti sullo sviluppo delle funzionalità core della tua applicazione.
AWS SNS segue un modello pubblica-sottoscrivi che è facile da comprendere e scalare. Un singolo messaggio pubblicato può essere distribuito a più endpoint contemporaneamente, il che rende SNS ideale per le architetture event-driven.
In questo tutorial, ti guiderò nella configurazione e nell'uso di AWS SNS per inviare notifiche su vari canali.
Che cos'è AWS SNS?
Amazon Simple Notification Service (SNS) è il servizio di messaggistica pub/sub gestito di AWS che consente di disaccoppiare microservizi, sistemi distribuiti e applicazioni serverless.
SNS funziona con un semplice modello publish-subscribe in cui i publisher inviano messaggi ai topic e i subscriber ricevono tali messaggi. Pensa a un topic SNS come a un canale di comunicazione: pubblichi messaggi su questo canale e chiunque sia iscritto riceve subito una notifica. Il bello del sistema è che i publisher non devono sapere chi riceve i loro messaggi e i subscriber non devono sapere chi li invia.
Potresti chiederti in cosa differisca da altri servizi di messaggistica AWS come Simple Queue Service (SQS). In breve, SQS usa un modello basato su code progettato principalmente per elaborare attività in modo asincrono, mentre SNS è pensato per inviare in broadcast messaggi a più destinatari contemporaneamente. Questo rende SNS perfetto per gli scenari in cui devi notificare molti sistemi di un evento appena avvenuto. Puoi approfondire le differenze nel post del blog SQS vs SNS.
SNS supporta molteplici protocolli di consegna, che ti offrono flessibilità su come i tuoi iscritti ricevono le notifiche.
Caratteristiche principali di AWS SNS
SNS è ricco di funzionalità che lo rendono l'unico servizio di notifica di cui avrai bisogno. Eccone alcune:
- Architettura fan-out: SNS può recapitare messaggi a migliaia di endpoint contemporaneamente, permettendoti di trasmettere aggiornamenti in tutto l'ecosistema applicativo con una singola chiamata API.
- Molteplici protocolli di trasporto: non sei limitato a un solo modo di inviare messaggi. SNS supporta endpoint HTTP/HTTPS, email, SMS, notifiche push mobili e persino code SQS come endpoint di sottoscrizione.
- Filtraggio dei messaggi: non tutti gli iscritti hanno bisogno di ogni messaggio. Con il filtraggio, i tuoi subscriber possono creare policy per ricevere solo i messaggi rilevanti, riducendo rumore e sovraccarico di elaborazione.
- Archiviazione dei messaggi: se devi mantenere uno storico di tutte le notifiche inviate, SNS si integra con Amazon S3 per l'archiviazione e con Amazon Redshift per le analisi.
- Tracciamento dello stato di consegna: puoi monitorare lo stato di consegna delle notifiche per assicurarti che raggiungano le destinazioni. È particolarmente utile per SMS e push mobili, dove la consegna non è garantita.
- Crittografia: i tuoi dati sensibili restano protetti grazie al supporto di SNS per la crittografia lato server, che assicura la riservatezza dei messaggi durante la trasmissione.
Ma la parte migliore di SNS è la scalabilità. SNS si adatta automaticamente alle esigenze della tua applicazione. Non importa se invii dieci o dieci milioni di notifiche al giorno: il servizio si adegua senza richiedere interventi manuali.
A breve, ti mostrerò come configurare SNS.
Configurare AWS SNS
Prima di poter inviare la tua prima notifica con SNS, dovrai seguire alcuni passaggi di configurazione per mettere tutto in ordine.
Passaggio 1: Creare un account AWS
Se non hai già un account AWS, devi crearne uno prima di iniziare a usare SNS.
Vai alla home page di AWS e clicca sul pulsante "Create an AWS Account" in alto a destra. Dovrai fornire il tuo indirizzo email, creare una password e inserire alcune informazioni di base sull'account. AWS richiederà anche i dati della carta di credito: non preoccuparti, SNS ha un piano gratuito piuttosto generoso e non ti verrà addebitato nulla a meno che tu non superi quei limiti.
Una volta configurato l'account, sei pronto per proseguire. Ti consiglio però vivamente di creare un utente IAM dedicato invece di usare l'account root. Non è l'argomento di oggi, ma fai riferimento alle istruzioni ufficiali per le linee guida dettagliate.
Passaggio 2: Configurare SNS nella console di gestione AWS
Ora che hai un account AWS, è il momento di accedere al servizio SNS.
Accedi alla Console di gestione AWS con le tue credenziali e trova SNS. Puoi farlo in tre modi:
- Digita "SNS" nella barra di ricerca in cima alla console
- Clicca su "Services" nella barra di navigazione in alto e trova SNS nella categoria "Application Integration"
- Vai direttamente alla console SNS
Indipendentemente dal percorso, questa è la schermata che dovresti vedere:

Immagine 1 - Pagina del servizio AWS SNS
Una volta nel dashboard di SNS, vedrai un menu a sinistra con opzioni come "Topics", "Subscriptions" e "Mobile". Il dashboard ti dà una panoramica delle tue risorse SNS e dell'attività recente.
Se l'account è nuovo, sarà piuttosto vuoto — è normale. Ora creiamo il nostro primo topic SNS.
Passaggio 3: Creare un topic SNS
Un topic SNS è in pratica un canale di comunicazione a cui i publisher inviano messaggi e gli iscritti ascoltano.
Pensalo come una stazione radio: la stazione trasmette su una specifica frequenza (il topic) e chiunque sia sintonizzato su quella frequenza riceve la trasmissione. In termini SNS, la tua applicazione pubblica messaggi su un topic e tutti gli endpoint iscritti a quel topic li ricevono.
Ecco come creare il tuo primo topic SNS:
- Nella schermata mostrata in Immagine 1, inserisci un nome per il topic.
- Clicca sul pulsante "Next step".
- Seleziona "Standard" come tipo (i topic FIFO hanno casi d'uso diversi che tratteremo più avanti).
- (Opzionale) Inserisci un display name. Sarà incluso nei messaggi inviati a iscritti SMS o email.
- Lascia tutte le altre impostazioni ai valori predefiniti per ora.
- Clicca su "Create topic".
Se preferisci le immagini al testo, ecco come dovrebbe apparire la schermata:

Immagine 2 - Creazione di un topic SNS
Una volta soddisfatto dei valori, scorri verso il basso finché non vedi il pulsante "Create topic":

Immagine 3 - Creazione di un topic SNS (2)
E questo è tutto! Il tuo topic SNS è pronto all'uso. Vedrai dettagli come l'ARN (Amazon Resource Name) del topic, che identifica in modo univoco il tuo topic:

Immagine 4 - Dettagli del topic creato
Il nuovo topic è pronto per le sottoscrizioni, ma al momento non ne ha, quindi qualsiasi messaggio tu pubblichi non andrà da nessuna parte. Niente panico: risolvi nel prossimo paragrafo aggiungendo iscritti.
Iscritti e sottoscrizioni SNS
Come dicevo, il tuo topic SNS è come una stazione radio. Al momento non ha ascoltatori, ma questo cambierà quando aggiungi iscritti per ricevere i tuoi messaggi.
Che cos'è un iscritto SNS?
Un iscritto è qualsiasi endpoint che riceve notifiche dal tuo topic SNS quando viene pubblicato un messaggio.
Pensa all'analogia di una newsletter. Ogni volta che pubblichi una nuova edizione (messaggio), viene recapitata a tutti sulla tua mailing list. SNS rende questo processo automatico e scalabile, gestendo per te tutta la logistica della consegna.
AWS supporta un'ampia varietà di tipi di iscritti, offrendoti flessibilità su come i tuoi messaggi vengono elaborati. Ecco i principali:
- Indirizzi email: invia notifiche in testo semplice direttamente alle caselle di posta.
- Numeri SMS: recapita notifiche via SMS ai telefoni cellulari.
- Code SQS: instrada i messaggi verso altri servizi AWS per un'ulteriore elaborazione.
- Funzioni Lambda: attiva l'esecuzione di codice serverless in risposta alle notifiche.
- Endpoint HTTP/HTTPS: invia messaggi ad applicazioni web o API.
- Push mobile: recapita notifiche direttamente alle app mobili.
Ogni tipo di iscritto ha vantaggi e casi d'uso propri. Ad esempio, email e SMS sono ottimi per destinatari umani, mentre code SQS e funzioni Lambda sono più adatte alla comunicazione sistema-a-sistema.
Passaggio 1: Aggiungere un iscritto
Ora che sai cosa sono gli iscritti, aggiungiamone uno al tuo topic. Per questo tutorial userò l'email, perché è l'opzione più semplice da configurare.
Ecco come aggiungere un iscritto email al tuo topic SNS:
- Dalla pagina dei dettagli del topic (quella mostrata in Immagine 4), clicca sul pulsante "Create subscription".
- Nel menu a tendina "Protocol", seleziona "Email".
- Nel campo "Endpoint", inserisci l'indirizzo email che deve ricevere le notifiche.
- Lascia tutte le altre impostazioni ai valori predefiniti.
- Clicca su "Create subscription".
La schermata dovrebbe essere simile a questa:

Immagine 5 - Creazione di una sottoscrizione email
Dopo aver cliccato su "Create subscription", AWS aggiungerà la sottoscrizione al tuo topic, ma sarà in stato "pending confirmation":

Immagine 6 - Stato in attesa di conferma
Questa è una funzione di sicurezza importante: AWS vuole assicurarsi che il proprietario dell'indirizzo email desideri effettivamente ricevere queste notifiche.
Passaggio 2: Confermare le sottoscrizioni
Dopo aver aggiunto un iscritto, deve confermare di voler ricevere le notifiche dal tuo topic SNS.
Per le sottoscrizioni email, AWS invia automaticamente un'email di conferma all'indirizzo specificato. L'email contiene un link che il destinatario deve cliccare per attivare la sottoscrizione. Finché ciò non avviene, i messaggi pubblicati sul topic non verranno recapitati a questo endpoint.
Ecco come appare tipicamente l'email di conferma:

Immagine 7 - Email di conferma SNS
Il destinatario deve semplicemente cliccare sul link "Confirm subscription" nell'email. Verrà reindirizzato a una pagina che conferma l'attivazione della sottoscrizione:

Immagine 8 - Messaggio di conferma sottoscrizione
Il processo è simile per gli iscritti SMS: AWS invia un SMS con un link di conferma che il destinatario deve seguire. Gli endpoint HTTP/HTTPS devono rispondere a una richiesta di conferma da parte di AWS, mentre le risorse AWS come Lambda e le code SQS possono essere configurate per la conferma automatica.
Puoi verificare lo stato delle sottoscrizioni cliccando sulla sezione "Subscriptions" nella barra laterale sinistra della console SNS. Le sottoscrizioni confermate mostreranno lo stato "Confirmed", mentre quelle in attesa "Pending confirmation".

Immagine 9 - Stato delle sottoscrizioni
Una volta confermata la sottoscrizione, sei pronto per iniziare a inviare messaggi! Qualsiasi messaggio pubblicato sul topic sarà recapitato a tutti gli iscritti confermati tramite il protocollo specificato.
Ecco tutto per la configurazione delle sottoscrizioni SNS. Nella prossima sezione imparerai come pubblicare messaggi sul tuo topic e testare che gli iscritti li ricevano correttamente.
Pubblicare messaggi sui topic SNS
Ora che hai configurato il tuo topic SNS e aggiunto iscritti, è il momento di inviare la tua prima notifica.
Passaggio 1: Pubblicare un messaggio
Un buon modo per iniziare è pubblicare un messaggio tramite la Console AWS.
Per inviare il tuo primo messaggio, vai alla pagina dei dettagli del topic e clicca sul pulsante "Publish message" in alto a destra (vedi Immagine 4). Si aprirà il form di pubblicazione del messaggio dove puoi comporre la notifica. Vedrai campi per l'oggetto e il corpo del messaggio. L'oggetto è opzionale ma utile per le notifiche email, perché diventa l'oggetto della mail.
Per un semplice messaggio di test, potresti inserire qualcosa del genere:

Immagine 10 - Contenuto del primo messaggio
Quando sei soddisfatto del messaggio, scorri verso il basso e clicca sul pulsante "Publish message" in fondo al form:

Immagine 11 - Pubblicazione di un messaggio tramite console
Dopo il clic, SNS distribuisce immediatamente il messaggio a tutti gli iscritti confermati. Se hai configurato una sottoscrizione email, dovresti ricevere il messaggio di test nella tua casella in pochi secondi:

Immagine 12 - Messaggio ricevuto via email
Semplice, vero? Vediamo ora come personalizzarlo ulteriormente.
Passaggio 2: Inviare notifiche SMS ed email
SNS ti consente di personalizzare l'aspetto dei messaggi per i diversi tipi di iscritti.
Quando pubblichi un messaggio, noterai l'opzione "Message structure". Per impostazione predefinita, è su "Identical payload for all delivery protocols", il che significa che tutti gli iscritti ricevono esattamente lo stesso messaggio. Puoi anche selezionare "Custom payload for each delivery protocol" per adattare il formato del messaggio a ciascun tipo di iscritto.
Per le notifiche email, hai due opzioni di formato:
- Email-JSON: invia il payload JSON grezzo all'endpoint email.
- Email: invia un'email formattata con oggetto e corpo del messaggio.

Immagine 13 - Personalizzazione del payload
Per le notifiche SMS, ricorda che c'è un limite di 160 caratteri. SNS recapiterà messaggi più lunghi, ma saranno considerati come messaggi multipli. Puoi anche impostare il tipo di messaggio SMS su "Promotional" o "Transactional", con impatto sull'ottimizzazione della consegna:

Immagine 14 - Opzioni SMS
Ora sai come inviare e personalizzare le notifiche email tramite Console AWS. A breve imparerai a fare lo stesso tramite CLI e Python.
Passaggio 3: Usare AWS CLI o SDK per pubblicare messaggi
La console è ottima per i test manuali, ma nel mondo reale vorrai pubblicare messaggi in modo programmatico.
L'AWS Command Line Interface (CLI) semplifica l'invio di messaggi SNS dal terminale o dagli script di automazione.
Supponendo che tu abbia installato e configurato AWS CLI, esegui questo comando per pubblicare un messaggio tramite CLI:
aws sns publish --topic-arn "sns-arn" --subject "CLI Notification" --message "Hello from the AWS CLI!"

Immagine 15 - Pubblicazione di un messaggio tramite AWS CLI
In un attimo, vedrai un messaggio simile nella tua casella:

Immagine 16 - Pubblicazione di un messaggio tramite AWS CLI (2)
Per applicazioni più avanzate, gli SDK AWS offrono accesso programmatico a SNS in molti linguaggi di programmazione.
Ecco un semplice esempio per pubblicare un messaggio usando Python con la libreria boto3:
import boto3
# Initialize the SNS client
sns_client = boto3.client("sns", region_name="eu-central-1")
# Topic ARN (Amazon Resource Name)
topic_arn = "sns-arn"
# Publish a simple message
response = sns_client.publish(
TopicArn=topic_arn, Message="Hello from Python!", Subject="Python Notification"
)
# Check if the message was sent successfully
if "MessageId" in response:
print(f"Message published successfully! Message ID: {response['MessageId']}")

Immagine 17 - Pubblicazione di un messaggio tramite SDK Python
Ancora una volta, il messaggio viene recapitato all'istante nella mia casella:

Immagine 18 - Pubblicazione di un messaggio tramite SDK Python (2)
Questo è tutto ciò che serve per pubblicare messaggi con SNS! Ora hai più modi per inviare notifiche, dall'interfaccia semplice della console alla pubblicazione programmatica con AWS CLI o SDK.
> Nuovo ad AWS Boto in Python? Iscriviti al nostro corso e diventa operativo in un attimo.
Nella prossima sezione esploreremo alcune funzionalità avanzate di SNS che porteranno le tue notifiche al livello successivo.
Funzionalità avanzate di SNS
Finora hai imparato le basi di SNS. In questa sezione vedrai alcune funzionalità avanzate che rendono SNS davvero potente.
Filtraggio dei messaggi SNS
Inviare la stessa notifica a tutti gli iscritti spesso porta gli endpoint a ricevere messaggi che non interessano.
Il filtraggio dei messaggi risolve il problema permettendo agli iscritti di filtrare i messaggi da ricevere in base agli attributi del messaggio. È come impostare i filtri nella posta elettronica: crei regole che determinano quali messaggi passano. Per SNS, queste regole si chiamano filter policies.
Per iniziare, puoi impostare filter policies sulle sottoscrizioni in modo che ricevano solo i messaggi pertinenti:

Immagine 19 - Policy di filtraggio delle notifiche
In questo esempio, l'iscritto riceverà notifiche solo per i messaggi che hanno un attributo order_value con un valore numerico pari o superiore a 1500.
Ora, per inviare una notifica del genere, puoi usare il seguente codice Python:
import boto3
# Initialize the SNS client
sns_client = boto3.client("sns", region_name="eu-central-1")
# Topic ARN (Amazon Resource Name)
topic_arn = "arn:aws:sns:eu-central-1:105036517833:TestTopic"
response = sns_client.publish(
TopicArn=topic_arn,
Message="A new high-value order has been placed",
Subject="New Order Notification",
MessageAttributes={
"order_value": {"DataType": "Number", "StringValue": "2000"},
"region": {"DataType": "String", "StringValue": "EU"},
"category": {"DataType": "String", "StringValue": "Electronics"},
},
)
print(response)
Ecco cosa vedrai dopo l'esecuzione dello script Python:

Immagine 20 - Invio di una notifica tramite Python
Solo se il valore di order_value è pari o superiore a 1500, riceverai la notifica:

Immagine 21 - Contenuto della notifica
In breve, le filter policies ti permettono di inviare notifiche mirate senza modificare il codice di pubblicazione. Il bello è che il filtraggio avviene lato AWS, non nella tua applicazione, migliorando l'efficienza e riducendo il traffico inutile.
Dead letter queue (DLQ) in SNS
La consegna dei messaggi può talvolta fallire anche nei sistemi più affidabili.
Una Dead Letter Queue (DLQ) è una coda Amazon SQS speciale in cui SNS può inviare i messaggi che non sono stati recapitati agli iscritti. Questo succede in genere quando un iscritto non è disponibile o restituisce un errore. Invece di perdere per sempre questi messaggi falliti, SNS li reindirizza alla DLQ, dove puoi analizzarli in seguito o ritentare la consegna.
Configurare una DLQ prevede due passaggi. Per prima cosa, crea una coda SQS da usare come DLQ:

Immagine 22 - Creazione di una coda SQS
Poi configura la tua sottoscrizione SNS per usare questa coda per i messaggi non recapitabili:

Immagine 23 - Aggiungere una redrive policy alla coda SQS
Questa configurazione richiede le autorizzazioni corrette, perché SNS deve poter inviare messaggi alla coda SQS. Nella console AWS puoi impostarlo con una semplice checkbox, ma se usi CloudFormation o altri strumenti IaC, dovrai aggiungere le autorizzazioni IAM appropriate.
Con una DLQ in funzione, puoi monitorare i fallimenti di consegna e intervenire quando necessario. Ad esempio, potresti impostare un allarme che si attiva quando compaiono messaggi nella DLQ, segnalando potenziali problemi con i subscriber, ma questo esula dallo scopo di questa sezione.
Usare AWS Lambda con SNS
Le funzioni Lambda aprono un mondo di possibilità per l'elaborazione dei messaggi SNS.
Quando iscrivi una funzione Lambda a un topic SNS, la funzione viene attivata automaticamente ogni volta che viene pubblicato un messaggio. L'approccio serverless di Lambda significa che non devi gestire alcuna infrastruttura per l'elaborazione dei messaggi: scala automaticamente in base al volume dei messaggi.
Per iniziare, crea una funzione Lambda:

Immagine 24 - Creazione di una funzione Lambda
Quindi, inserisci un codice simile a questo:
def lambda_handler(event, context):
# SNS messages come in the 'Records' array
for record in event["Records"]:
# Extract the message
message = record["Sns"]["Message"]
subject = record["Sns"]["Subject"]
timestamp = record["Sns"]["Timestamp"]
# Process the message
print(f"Received message: {message}")
print(f"Subject: {subject}")
print(f"Timestamp: {timestamp}")
# Your business logic here
# For example, store the message in a database
# or trigger another AWS service
print("ALL DONE!")
# Return success
return {"statusCode": 200, "body": "Message processed successfully"}

Immagine 25 - Codice della funzione Lambda
Quando il codice è pronto, clicca sul pulsante "Add trigger" per collegare la funzione Lambda a SNS:

Immagine 26 - Connessione di SNS a Lambda
La funzione è ora collegata alla coda, quindi puoi inviare una notifica di test:

Immagine 27 - Notifica di test
Le funzioni Lambda ti permettono di monitorare i log, quindi puoi vedere le invocazioni recenti della funzione, risultato dell'invio di una notifica:

Immagine 28 - Log della funzione Lambda
Le funzioni Lambda possono fare praticamente qualsiasi cosa con questi messaggi: salvarli in un database, attivare altri servizi AWS, inviare email o persino chiamare API esterne. Questo rende SNS e Lambda una combinazione potente per costruire architetture event-driven. Puoi saperne di più sulle funzioni Lambda nel tutorial Introduzione ad AWS Lambda.
A seguire, imparerai le basi del monitoraggio e del logging in SNS.
Monitoraggio e logging dell'attività SNS
Tenere traccia dell'attività SNS è essenziale per mantenere un sistema di notifica affidabile.
Usare Amazon CloudWatch con SNS
Amazon CloudWatch fornisce monitoraggio completo per tutti i servizi AWS, SNS incluso. Quando configuri CloudWatch con SNS, ottieni visibilità su metriche operative importanti come tassi di consegna dei messaggi, fallimenti e pattern d'uso delle API.
Per iniziare con il monitoraggio CloudWatch per SNS, vai alla console CloudWatch nel tuo account AWS. Da lì puoi accedere alle metriche SNS preconfigurate che AWS raccoglie automaticamente per te.
Le metriche SNS più preziose da monitorare includono:
- NumberOfMessagesPublished: traccia quanti messaggi vengono pubblicati sui tuoi topic.
- NumberOfNotificationsDelivered: mostra i recapiti riusciti ai subscriber.
- NumberOfNotificationsFailed: evidenzia i tentativi di consegna falliti, che potrebbero indicare problemi di configurazione.
- PublishSize: misura la dimensione dei messaggi pubblicati, aiutandoti a rimanere entro i limiti del servizio.

Immagine 29 - Dashboard CloudWatch predefinita per SNS
Impostare gli allarmi CloudWatch ti permette di rispondere rapidamente ai potenziali problemi prima che impattino gli utenti. Ad esempio, potresti creare un allarme che si attiva quando i fallimenti di consegna superano una certa soglia:
- Nella console CloudWatch, vai alla sezione "Alarms".
- Clicca su "Create alarm" e seleziona la metrica SNS che vuoi monitorare.
- Definisci la soglia (ad es., più di 5 consegne fallite in 5 minuti).
- Configura le azioni di notifica, come l'invio di un alert al team operativo.
Se preferisci le immagini alle istruzioni testuali, inizia creando un allarme per una metrica di interesse, come NumberOfNotificationsFailed. Imposta le soglie che attiveranno l'allarme:

Immagine 30 - Creazione di un allarme
E questo è tutto: l'allarme è stato creato ed è attivo:

Immagine 31 - Creazione di un allarme (2)
Questi allarmi possono fare la differenza tra affrontare proattivamente un problema e venirne a conoscenza da utenti scontenti.
Revisione dei log SNS
AWS CloudTrail cattura tutta l'attività API nel tuo account AWS, incluse le azioni eseguite all'interno del servizio SNS.
Ogni operazione eseguita sui tuoi topic SNS — tramite console, CLI o SDK — genera una voce nei log di CloudTrail. Questi log forniscono informazioni preziose per analisi di sicurezza, tracciamento delle modifiche alle risorse e audit di conformità.
Per accedere ai log SNS in CloudTrail:
- Apri la console CloudTrail nel tuo account AWS (probabilmente dovrai creare una nuova trail).
- Vai su "Event history" per vedere l'attività SNS recente.
- Filtra gli eventi selezionando "Event source" e digitando "sns.amazonaws.com".
Di nuovo, se le istruzioni testuali non bastano, fai riferimento alle immagini qui sotto. Inizia creando una nuova trail:

Immagine 32 - Creazione di una nuova trail
Poi, in "Event history", filtra gli eventi per includere solo quelli per SNS:

Immagine 33 - Filtraggio dei log
I log vengono archiviati automaticamente in un bucket S3, il che significa che questo approccio fornisce uno storage permanente e abilita capacità di interrogazione più avanzate.
> Come funziona l'archiviazione su AWS? Leggi la nostra guida su S3 ed EFS.
In conclusione, combinando le metriche di CloudWatch con i log di CloudTrail, crei un sistema di monitoraggio completo che aiuta a garantire l'affidabilità della tua infrastruttura SNS.
Best practice per l'uso di AWS SNS
Ora conosci le funzionalità di base e avanzate di AWS SNS. Mancano da trattare le best practice per creare topic e inviare messaggi.
Proteggere i topic SNS
La sicurezza dovrebbe essere una priorità quando configuri la tua infrastruttura SNS. Senza i controlli adeguati, i tuoi topic potrebbero essere esposti ad accessi non autorizzati, con un enorme rischio per la sicurezza.
AWS Identity and Access Management (IAM) offre gli strumenti per mettere in sicurezza i topic SNS. Inizia creando policy che seguano il principio del privilegio minimo: concedi solo i permessi specifici necessari per ciascun utente o servizio. Ad esempio, potresti voler consentire ad alcune applicazioni solo di pubblicare messaggi, mentre ad altre solo di iscriversi ai topic.
Ecco un esempio di policy IAM che limita la pubblicazione a un topic specifico:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "sns:Publish",
"Resource": "sns-arn"
}
]
}
Puoi anche usare le policy del topic per controllare quali account AWS possono iscriversi ai tuoi topic. È particolarmente importante se condividi dati tra confini organizzativi.
Non dimenticare di eseguire audit regolari delle autorizzazioni usando AWS CloudTrail e rimuovere gli accessi non più necessari.
Gestire il volume dei messaggi
Volumi elevati di messaggi possono sopraffare gli iscritti se non gestiti correttamente. Qui diventa essenziale combinare SNS con altri servizi AWS.
Un pattern molto diffuso è l'architettura "fanout", in cui pubblichi messaggi su un topic SNS a cui sono iscritte più code SQS. Ogni coda può poi alimentare diversi sistemi di elaborazione al proprio ritmo. Questo disaccoppia i publisher dai consumer e fornisce un buffer durante i picchi di traffico.
Per esigenze di elaborazione in tempo reale, considera di iscrivere funzioni Lambda ai tuoi topic. Lambda scala automaticamente con il volume dei messaggi, eliminando la necessità di effettuare il provisioning e la gestione dei server.
Ridurre i costi
SNS è conveniente, ma i costi possono crescere rapidamente all'aumentare del volume dei messaggi. Alcune scelte strategiche possono aiutarti a tenerli sotto controllo.
Innanzitutto, sii selettivo sui protocolli di sottoscrizione. Gli endpoint HTTP/HTTPS sono in genere l'opzione più economica. Le notifiche email, pur comode, andrebbero usate con giudizio perché hanno costi più alti per messaggio.
Il filtraggio dei messaggi è un altro potente strumento di risparmio. Implementando filter policies sulle sottoscrizioni, ti assicuri che i messaggi vengano recapitati solo agli iscritti interessati. Ad esempio, se hai un topic per tutti gli avvisi di sistema, potresti voler far ricevere ai tecnici di reperibilità solo gli alert critici durante il loro turno, non ogni notifica:
# Subscribe with a filter policy
response = sns.subscribe(
TopicArn="sns-arn",
Protocol="email",
Endpoint="oncall@example.com",
Attributes={"FilterPolicy": '{"severity": ["critical"]}'},
)
Infine, rivedi regolarmente l'utilizzo di SNS in AWS Cost Explorer e cerca opportunità per consolidare i topic o rimuovere sottoscrizioni inutilizzate. Risorse inutilizzate o duplicate non solo aggiungono costi non necessari, ma complicano anche la tua architettura.
Seguendo queste best practice, creerai un'implementazione SNS sicura, scalabile ed economica: tutto ciò che serve per un servizio di notifica affidabile senza spese impreviste o problemi di sicurezza.
Riepilogo su AWS SNS
Se ti servono notifiche in tempo reale tra applicazioni distribuite, AWS SNS è la scelta giusta. È facile da usare, si integra bene con gli altri servizi AWS e scala all'infinito in base alle tue esigenze.
Il modello publish-subscribe di SNS rende semplice implementare sistemi di notifica che possono raggiungere più canali contemporaneamente. Dalla creazione di topic e gestione degli iscritti all'adozione di funzionalità avanzate come filtraggio dei messaggi e dead letter queue, ora hai le conoscenze per costruire un'infrastruttura di notifica robusta.
Hai anche imparato gli aspetti critici di monitoraggio, sicurezza e gestione dei costi che assicurano che la tua implementazione SNS resti affidabile ed efficiente in produzione.
Man mano che le applicazioni adottano architetture event-driven, servizi come SNS diventano sempre più preziosi. Che tu stia costruendo un semplice sistema di alert o complessi microservizi, i pattern in questo tutorial offrono una base per una comunicazione efficace tra i componenti del tuo sistema.
Per saperne di più su AWS, segui questi corsi di DataCamp:
Puoi anche usare DataCamp per prepararti agli esami di certificazione AWS - AWS Cloud Practitioner (CLF-C02).
FAQs
Che cos'è AWS SNS e in cosa differisce da SQS?
AWS SNS (Simple Notification Service) è un servizio di messaggistica completamente gestito che ti consente di inviare notifiche dai publisher a più iscritti. A differenza di SQS (Simple Queue Service), che segue un modello basato su coda in cui ogni messaggio è elaborato da un singolo consumer, SNS usa un modello publish-subscribe che trasmette un singolo messaggio a molti destinatari contemporaneamente. Questa differenza fondamentale rende SNS ideale per le notifiche di evento e SQS più adatto all'elaborazione di task.
Quali tipi di endpoint possono iscriversi ai topic SNS?
AWS SNS supporta un'ampia gamma di endpoint per gli iscritti, inclusi indirizzi email, numeri di telefono per SMS, code SQS, funzioni Lambda, endpoint HTTP/HTTPS e notifiche push mobili. Questa varietà ti offre flessibilità nella consegna ed elaborazione delle notifiche, permettendoti di raggiungere sia destinatari umani (via email o SMS) sia altri sistemi (via Lambda, SQS o endpoint HTTP) con lo stesso messaggio pubblicato.
Come posso proteggere i miei topic SNS?
Proteggere i topic SNS significa implementare controlli di accesso adeguati tramite policy IAM che seguano il principio del privilegio minimo. Puoi limitare chi può pubblicare sui topic e gestire le sottoscrizioni, e usare le policy del topic per controllare quali account AWS possono iscriversi. Per i dati sensibili, AWS SNS supporta la crittografia lato server per proteggere il contenuto dei messaggi durante la trasmissione. Audit di sicurezza regolari con i log di CloudTrail aiutano a identificare tentativi di accesso non autorizzati o potenziali vulnerabilità nell'implementazione SNS.
Come posso implementare il filtraggio dei messaggi in SNS?
Il filtraggio dei messaggi in SNS consente agli iscritti di ricevere solo le notifiche che interessano. Ciò avviene tramite filter policies che gli iscritti definiscono in base agli attributi del messaggio. Quando pubblichi messaggi con attributi specifici (come valore dell'ordine, regione o livello di priorità), SNS confronta questi attributi con la policy di ciascun iscritto e consegna il messaggio solo se c'è corrispondenza. Il filtraggio avviene lato AWS, non nella tua applicazione, migliorando l'efficienza e riducendo il traffico di messaggi inutile.
Come funzionano le dead letter queue (DLQ) con SNS?
Le Dead Letter Queue fungono da rete di sicurezza per i fallimenti nella consegna dei messaggi in SNS. Quando un messaggio non può essere recapitato a un iscritto (tipicamente perché l'iscritto non è disponibile o restituisce un errore), SNS può reindirizzarlo a una coda SQS designata invece di perderlo del tutto. Questo sistema DLQ ti consente di catturare, analizzare e potenzialmente ritentare le consegne fallite. È particolarmente prezioso per le notifiche mission-critical in cui la perdita di messaggi potrebbe avere impatti significativi sul business, offrendo visibilità su problemi di consegna altrimenti difficili da rilevare.


