Comunicazioni affidabili con Amazon SES e Cloudwatch

Comunicazioni affidabili con Amazon SES e Cloudwatch

PUBBLICATO IL 13/09/2023 DA

Quando si tratta di gestire un e-commerce, c’è un aspetto fondamentale che non può essere sottovalutato: la comunicazione fluida e affidabile con i clienti. In un mondo in cui ogni dettaglio conta, l’invio tempestivo e preciso di email di conferma ordine, di aggiornamento sulla spedizione e sullo stato della consegna è cruciale. Per raggiungere questi obiettivi, è indispensabile mettere a punto un sistema di logging solido e un meccanismo di monitoraggio efficace per tracciare e gestire il processo di invio delle email. In questo contesto, Amazon Simple Email Service (SES) si rivela un alleato vincente, fornendo un’infrastruttura affidabile e scalabile per l’invio di email transazionali e di marketing. In questo articolo, esploreremo con dettaglio come configurare un sistema avanzato di logging delle email, sfruttando le potenzialità di Amazon SES in combinazione con una serie di servizi offerti da Amazon Web Services (AWS).

Un'osservazione preliminare

Immaginiamo di avere l’opportunità di osservare da vicino un noto e-commerce che, per garantire una comunicazione senza intoppi con i clienti, fa affidamento sulla potenza di Amazon SES per inviare email di importanza cruciale. Le email di conferma degli ordini, le notifiche di spedizione e i messaggi sullo stato della consegna sono solo alcune delle comunicazioni che l’azienda vuole assicurarsi siano consegnate in modo impeccabile. Tuttavia, l’obiettivo va oltre la semplice consegna delle email: l’azienda è determinata a creare un sistema che permetta di tracciare ogni passaggio del processo di invio, rendendo possibile individuare rapidamente e risolvere con prontezza qualsiasi problema che possa insorgere lungo il percorso.

I servizi che abbiamo usato

L’architettura che proponiamo è il risultato di un’armoniosa integrazione di diversi servizi AWS, ognuno con un ruolo preciso all’interno del sistema globale:

  1. Amazon SES: Questo servizio rappresenta l’elemento centrale dell’infrastruttura, agendocome motore per l’invio delle email ai destinatari.
  2. Amazon SNS: Un servizio di messaggistica flessibile, il cui compito è quello di catturare gli eventi generati dall’invio delle email e inoltrarli ai componenti successivi.
  3. AWS Lambda: Tramite questa soluzione serverless, è possibile elaborare gli eventi provenienti da Amazon SNS. L’obiettivo è estrarre i dati significativi relativi all’invio delle email e indirizzarli verso i registri di Amazon CloudWatch.
  4. Amazon CloudWatch Logs: Questo servizio si occupa della raccolta e della gestionecentralizzata dei log generati da una varietà di risorse AWS.
  5. CloudWatch Log Insights: Un’innovativa funzionalità di CloudWatch Logs che semplifica l’analisi dei log tramite query avanzate.

L’infrastruttura

Iniziamo ora a esaminare con attenzione i passaggi necessari per creare questa infrastruttura di logging avanzato delle email.

cloud

1. Configurazione Dettagliata di Amazon SES

Per iniziare, è essenziale eseguire una configurazione accurata del servizio Amazon SES (https://docs.aws.amazon.com/ses/latest/dg/setting-up.html). Questo include la verifica dei domini utilizzati per gli indirizzi email, la corretta impostazione delle identità (come gli indirizzi “From”) e, se necessario, la creazione di template di email personalizzati.

2. Creazione di un SNS Topic

  1. Accedete alla Console AWS e dirigetevi alla sezione dedicata ad Amazon SNS.
  2. Qui, create un nuovo “topic” SNS, a cui assegnare un nome significativo, come “EmailLoggingTopic.”

3. Configurazione Avanzata dell’Evento di Invio di Amazon SES

  1. Nella console di Amazon SES, accedete alla sezione “Eventi di Invio Email.”
  2. Abilitate la pubblicazione di eventi e collegatela al “topic” SNS creato in precedenza.

4. Creazione del Gruppo di Log di CloudWatch

  1. Accedete alla Console di Gestione AWS, dirigetevi ad Amazon CloudWatch.
  2. Qui, create un nuovo gruppo di log, a cui assegnare un nome descrittivo, come “EmailLogsGroup.”

5. Realizzazione di una Funzione Lambda Efficace

La chiave di volta di questo sistema risiede nella funzione Lambda, il cui compito è processare gli eventi SNS in arrivo, estrarre i dati salienti relativi all’invio delle email e inviarli ai registri di Amazon CloudWatch. Di seguito, presentiamo uno snippet di codice Python che rappresenta una possibile implementazione:

import boto3

import json

import os

import time

from datetime import date

logs_client = boto3.client('logs')

def lambda_handler(event, context):

   print(event)

   today = date.today().strftime('%Y-%m-%d')

   log_group_name = os.environ["CW_LOG_GROUP"]

   log_stream_name = today

   for sns_record in event.get('Records', []):

   message = get_message_from_sns_event(sns_record)

   write_log_to_cloudwatch(log_group_name, log_stream_name,

json.dumps(message, indent=4), logs_client)

def get_message_from_sns_event(sns_record):

   sns_message = json.loads(sns_record.get('Sns', {}).get('Message'))

   return sns_message

def write_log_to_cloudwatch(log_group_name, log_stream_name, message, client):

   timestamp = int(time.time() * 1000)

   try:

   client.create_log_stream(logGroupName=log_group_name,

logStreamName=log_stream_name)

   except client.exceptions.ResourceAlreadyExistsException:

   pass

   response = client.describe_log_streams(logGroupName=log_group_name,

   logStreamNamePrefix=log_stream_name)

   log_stream = response['logStreams'][0]

   sequence_token = log_stream.get('uploadSequenceToken', None)

   if sequence_token:

    client.put_log_events(

    logGroupName=log_group_name,

    logStreamName=log_stream_name,

    logEvents=[{'timestamp': timestamp, 'message': message}],

    sequenceToken=sequence_token

   )

   else:

    client.put_log_events(

    logGroupName=log_group_name,

    logStreamName=log_stream_name,

    logEvents=[{'timestamp': timestamp, 'message': message}]

   )

Assicuratevi di configurare su Lambda la variabile d’ambiente CW_LOG_GROUP con il nome del log group appena creato.

6. Attivazione della Lambda tramite Eventi SNS

  1. Nella Console di Gestione AWS, accedete ad Amazon SNS.
  2. Selezionate il “topic” SNS creato precedentemente (“EmailLoggingTopic”).
  3. Scegliete “Crea sottoscrizione” e selezionate la vostra funzione Lambda come destinazione.

7. Definizione di Query per CloudWatch Log Insights

  1. Nella console di CloudWatch, visitate la sezione “Insights” relativa al gruppo di log “EmailLogsGroup.”
  2. Utilizzate la seguente query per analizzare e visualizzare i campi rilevanti:

fields @timestamp, @message

| parse @message /"notificationType":\s*"(?[^"]+)"/

| parse @message /"timestamp":\s*"(?[^"]+)"/

| parse @message /"subject":\s*"(?[^"]+)"/

| parse @message /"destination":\s

  

*\[(?[^\]]+)\]/

| parse @message /"bouncedRecipients":\s*\[(?[^\]]+)\]/

| display EventTimestamp, NotificationType, Subject, Destination,

BouncedRecipients

8.Test e Monitoraggio Approfonditi

Ora che tutti i componenti sono configurati, è giunto il momento di testare il sistema di logging delle email. Per farlo, inviate email di prova tramite Amazon SES e osservate l’andamento dei log generati.Seguite attentamente le query in CloudWatch Log Insights per verificare che i dati vengano elaborati in modo accurato e che tutte le informazioni rilevanti vengano catturate.

cloudAws

In Conclusione

L’implementazione di un sistema di logging avanzato delle email, sfruttando le potenzialità di Amazon SES e dei servizi AWS, si configura come un passo fondamentale per l’e-commerce moderno. Garantire la consegna puntuale e precisa delle comunicazioni ai clienti rappresenta solo la punta dell’iceberg: la vera forza di questo approccio risiede nella capacità di individuare rapidamente eventuali problematiche e reagire con tempestività, garantendo un’esperienza fluida e affidabile.

Grazie a questa infrastruttura, ogni passaggio dell'invio delle email è sottoposto a un controllo dettagliato, contribuendo a elevare la soddisfazione del cliente e il successo dell'attività commerciale nel suo complesso. Inoltre, è possibile ampliare ulteriormente questa infrastruttura aggiungendo un sistema di notifica tramite email o piattaforme di messaggistica come Slack, in grado di avvisare immediatamente l'operatore in caso di bounce o errori di consegna delle email. Questo livello aggiuntivo di monitoraggio consente di intervenire prontamente su problemi critici, assicurando che le comunicazioni con i clienti siano sempre efficienti e affidabili.


Contatta i nostri esperti

per parlare di come possiamo aiutare te e la tua azienda ad evolvere

Contattaci