1. 30 Settembre 2021
Milano MuleSoft Meetup #5
MuleSoft e AWS - La coppia che disaccoppia
Best practices per collegare MuleSoft e AWS
2. ● Ckeck-In e Benvenuto
● MuleSoft e AWS - La coppia che disaccoppia
● Best practices per collegare MuleSoft e AWS
● Q&A and Wrap Up
Agenda
meetup@florence-consulting.it
3. IL TEAM DI MILANO MULESOFT MEETUP #5
Brunello Cucinelli
Caterina Bonanno Giacomo Bartoloni Simone Trovato
Florence Consulting Group & MuleSoft
Daniela Mogini
Gonzalo Marcos
5. Contattaci all’indirizzo meetup@florence-consulting.it
Hai ancora domande e vuoi
approfondire in separata sede?
Invia il tuo feedback
Finito l’evento riceverai una e-mail per inviare il tuo
feedback: facci sapere con precisione quali sono i
topic che ti piacerebbe approfondire insieme!
We Are Hiring!
7. MuleSoft Meetup Milano – Daniela Mogini, Software Architect Brunello Cucinelli
MuleSoft & AWS:
la coppia che disaccoppia
8. Agenda
1. Architettura e problematiche di un sistema distribuito
2. Scalabilità: Disaccoppiare utilizzando messaggi e code
3. Affidabilità: Retry e Dead Letter Queues
4. Sicurezza: VPC peering, endpoint privati e flow logs
5. Test e validazione dell’architettura
9. Architettura e problematiche di un
sistema distribuito
Sistemi distribuiti: You know you have one when the crash of a computer you've never heard of stops you from getting any work done. – L. Lamport
• Molti sistemi coinvolti
• Possibilità di fallimenti parziali sui singoli sistemi
• Latenza di rete
• Problematiche di aggiornamento concorrente dei dati
10. Un ecosistema complesso
Ogni aggiornamento dei dati su uno dei
sistemi coinvolti deve essere propagato su tutti
gli altri
PROBLEMATICHE:
• Molte integrazioni punto-punto
• Modalità di integrazione mista:
API e scambio file
• Gestione degli errori frammentata
• Tempistiche di aggiornamento su tutti i
sistemi non prevedibili
• Possibili anomalie di sovrascrittura dovute
alla latenza degli aggiornamenti
• Difficoltà nell’introduzione di nuovi sistemi
On-prem system On-prem system
On-prem system
Cloud system Cloud system
Cloud system
Scambio
file
API
API
API
API
11. Obiettivi
● Uniformare la modalità di integrazione
utilizzando API rest
● Disaccoppiare l’aggiornamento sui vari
sistemi in modalità near real-time
● Evitare complessità di orchestrazione e
di gestione degli errori
● Aumentare la manutenibilità e facilitare
l’introduzione di nuovi sistemi
On-prem system On-prem system
On-prem system
Cloud system Cloud system
Cloud system
12. API-Led & FAN-OUT Pattern
Servizi AWS utilizzati:
• SNS – Simple Notification Service
• SQS – Simple queue service
Architettura:
● Un nuovo evento di insert/update viene
propagato alla Experience API e al layer di
process che si occupa di inviare il
messaggio alla topic SNS
● La topic SNS propaga il messaggio a tutte
le code SQS che hanno effettuato una
sottoscrizione
● Le System API effettuano long-polling
periodici per ricevere e elaborare
messaggi dalle code e propagare gli
aggiornamenti ai sistemi a valle
ARCHITETTURA
VERSIONE 1
On-prem system
SOTTOSCRIZIONE
Experience API
Process API
System API System API System API
Insert or update message
POLLING POLLING POLLING
On-prem system On-prem system Cloud system
FAN-OUT
PATTERN
13. API-Led & FAN-OUT Pattern
VANTAGGI
● Propagazione simultanea del messaggio
verso molteplici sistemi
● Maggiore scalabilità: è possibile effettuare
un sizing indipendente dei layer API
● L’aggiunta di nuovi processi produttori e
consumatori dei messaggi risulta immediata
● Non necessita di orchestrazione
● Costo contenuto
SVANTAGGI
● Richiede meccanismi di gestione asincrona
degli errori
● Stiamo uscendo dalla VPC: necessari
accorgimenti per il routing e una sicura
configurazione di rete
ARCHITETTURA
VERSIONE 1
On-prem system
SOTTOSCRIZIONE
Experience API
Process API
System API System API System API
Insert or update message
POLLING POLLING POLLING
On-prem system On-prem system Cloud system
FAN-OUT
PATTERN
14. SQS – Simple Queue Service
CARATTERISTICHE
● Servizio completamente gestito
● 2 versioni: Standard o FIFO
● Numero di API calls al secondo: illimitato per code standard, 300 per code FIFO (con possibilità di utilizzare batch di 10 messaggi)
● Conservazione dei messaggi: default → 4 giorni, max → 14 giorni
● Bassa latenza (<10 ms)
● Supporto Endpoint Privati
● Retry policy + DLQ
15. SQS – Parametri principali
Nuovo
messaggio
tempo
Ritardo nella consegna:
Tutti i nuovi messaggi inviati alla coda rimangono invisibili ai consumatori per tutta la durata del
periodo di ritardo.
Compreso tra 0s e 15min
Il messaggio è reso disponibile per i consumatori
Richiesta di polling
Tempo di attesa del messaggio:
Tempo in cui Amazon SQS attende la
disponibilità dei messaggi dopo che la
coda riceve una richiesta di ricezione.
→ Durata dell’operazione di polling.
Compreso tra 0s e 20s
Risposta al polling
Timeout di visibilità:
Il periodo di tempo in cui un messaggio ricevuto da una coda (da un consumer) non sarà visibile
agli altri consumatori di messaggi.
→ Tempo massimo che un consumer ha a disposizione per elaborare il messaggio.
Compreso tra 0s e 12h
Richiesta di DELETE del messaggio
Se allo scadere del timeout di visibilità non è stata ricevuta una richiesta
di cancellazione del messaggio, il processamento del messaggio viene
considerato fallito.
Numero massimo di ricezioni
Il numero di ricezioni è
inferiore al numero massimo
di ricezioni impostato per la
coda?
SI: Il
messaggio
viene rimesso
in coda
NO: Il messaggio viene
inviato a una DLQ
(Dead Letter Queue)
DLQ
18. SNS - Simple Notification Service
CARATTERISTICHE
● Servizio completamente gestito
● 2 versioni: Standard o FIFO
● Permette di disaccoppiare i produttori di messaggi dai
consumatori
● Sottoscrizioni Application-to-application e Application-to-
person (email, SMS, notifiche push)
21. Test – Invio Messaggio a SNS
aws sns publish --topic-arn arn:aws:sns:eu-central-1:908712819371:test_topic --message
"Hello FAN-OUT!"
AWS CLI
AWS CONSOLE
22. Test – Ricezione messaggio su SQS
AWS CLI
AWS CONSOLE
aws sqs receive-message --queue-url https://sqs.eu-central-
1.amazonaws.com/908712819371/TestQueue --wait-time-seconds 10
23. Networking & Security
● Definizione di una policy IAM
● VPC Peering tra Mulesoft e AWS
● Utilizzo di endpoint privati per l’invio e la ricezione di messaggi verso i servizi SQS e SNS
24. VPC Peering
1) Accettare la richiesta di peering proveniente da Mulesoft
2) Impostare la route di ritorno
3) Attivare l’opzione per la risoluzione DNS
25. VPC Endpoints
● Abilitano una connessione privata tra la VPC
AWS e i servizi AWS che supportano Private
Link
● Sono device di rete virtuali scalabili,
ridondanti e altamente disponibili
● Specifici per servizio
Nella nostra architettura
● Il traffico passa dalla VPC di Mulesoft alla
VPC AWS sfruttando il VPC peering
● All’interno della rete AWS vengono utilizzati i
VPC Enpoints per raggiungere i servizi SQS e
SNS utilizzando un IP privato della VPC, senza
mai attraversare l’Internet pubblico
ARCHITETTURA
VERSIONE 2
On-prem system
SOTTOSCRIZIONE
Experience API
Process API
System API System API System API
Insert or update message
POLLING POLLING POLLING
On-prem system On-prem system Cloud system
SNS VPC ENDPOINT
SQS VPC ENDPOINT
AWS
VPC PEERING
VPC
PEERING
VPC
VPC
FAN-OUT
PATTERN
VPN
VPN
27. Test dell’infrastruttura
TEST DI BASE:
Invio / ricezione di messaggi
TEST AVANZATO:
Verificare che effettivamente i messaggi vengano inviati e ricevuti dai servizi SQS e SNS in maniera privata,
attraverso la VPC e i VPC endpoints:
1. Configurare un meccanismo per il salvataggio dei log di traffico della VPC su AWS
→ VPC Flow Logs, salvataggio dei log in un bucket S3
2. Analisi dei file di log
→ Amazon Athena
30. Flow Logs - Risultato
Flow Logs salvati all’interno del bucket S3
Partizionati in cartelle sulla base della data
31. Amazon Athena
● Servizio query interattivo che permette di analizzare dati salvati in S3 utilizzando SQL standard
● Formati file supportati: CSV, JSON, ORC, Avro e Parquet
32. Amazon Athena – Analisi Flow Logs
STEP 1:
Creazione della tabella
CREATE EXTERNAL TABLE IF NOT EXISTS vpc_flow_logs (
version int, account string, interfaceid string,
sourceaddress string, destinationaddress string,
sourceport int, destinationport int,
protocol int, numpackets int, numbytes bigint,
starttime int, endtime int,
action string, logstatus string,
vpcid string, subnetid string, instanceid string,
tcpflags int, type string,
pktsrcaddr string, pktdstaddr string,
region string, azid string,
sublocationtype string,
sublocationid string,
pktsrcawsservice string,
pktdstawsservice string,
flowdirection string,
trafficpath string
)
PARTITIONED BY (`date` date)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ' '
LOCATION 's3://bc-vpc-
flowlogs/AWSLogs/908712819371/vpcflowlogs/eu-central-1/'
TBLPROPERTIES ("skip.header.line.count"="1");
STEP 2:
Aggiunta della partizione sulla data
ALTER TABLE vpc_flow_logs
ADD PARTITION (`date`='2021-09-30')
location 's3://bc-vpc-flowlogs/AWSLogs/908712819371/vpcflowlogs/eu-
central-1/2021/09/30';
STEP 3:
Query sui dati
SELECT *
FROM vpc_flow_logs
WHERE date = DATE('2021-09-30')
AND action = 'ACCEPT'
REFERENCE:
https://docs.aws.amazon.com/athena/latest/ug/vpc-flow-logs.html
Questo passaggio è
necessario in quanto i
file sono salvati su
cartelle diverse del
bucket, sulla base
della data
34. Wrap Up
● API-Led & FAN-OUT pattern basato su SNS e
SQS per disaccoppiare l’aggiornamento dati
su un sistema distribuito
● Policy di retry e utilizzo di Dead Letter Queue
(DLQ)
● Vpc Peering tra la VPC Mulesoft e quella
AWS
● Utilizzo di VPC Endpoints per accedere in
maniera privata ai servizi SQS e SNS
● Salvataggio dei log su Bucket S3 tramite la
configurazione dei Flow Logs
● Analisi dei log con query SQL utilizzando
Amazon Athena
ARCHITETTURA
VERSIONE 3
On-prem system
Experience API
Process API
System API System API System API
Insert or update message
On-prem system On-prem system Cloud system
AWS
VPC PEERING
VPC
PEERING
VPC
VPC
DLQ
FLOW
LOGS
SQL
FAN-OUT
PATTERN
VPN
VPN
SOTTOSCRIZIONE
POLLING POLLING POLLING
SNS VPC ENDPOINT
SQS VPC ENDPOINT
35. Evoluzioni future
● Integrazione di un AWS TRANSIT GATEWAY
(supportato da Mulesoft a partire da
Settembre 2021)
https://docs.mulesoft.com/runtime-
manager/tgw-about
● Monitoraggio dell’infrastruttura lato AWS
con CloudWatch:
○ Allarmi basati sui parametri delle code, ad
esempio: numero medio di messaggi visibili
in coda
○ Azioni di auto-scaling collegate agli allarmi
37. MuleSoft Meetup Milano – Simone Trovato, Senior Software Engineer di Florence Consulting Group
MuleSoft & AWS:
Comunicazione sicura tramite VPC
38. Agenda
● Introduzione
○ Message Queuing Service
○ VPC e VPC Peering
● Amazon SNS/SQS
○ Panoramica
○ Scenari di integrazione
● Caso d'uso
○ Architettura
○ PoC e configurazione
○ Test e Risultati
● Conclusioni
39. Introduzione
Message-oriented middleware (MOM) - infrastruttura di integrazione tra sistemi distribuiti
Scambio di messaggi asincrono
Disaccoppiamento tra i sistemi
Vantaggi:
● Performance
● Affidabilità
● Scalabilità
40. Message Queueing Service
Message queueing service: sistema di comunicazione
tramite messaggi in ambienti Cloud-based (SaaS)
Concetto di coda (queue) e comunicazione asincrona
Uso di messaging brokers: disaccoppiamento tra producer e
consumer
PATTERNS:
• Publish/subscribe (fan-out) – stesso messaggio
distribuito a più subscribers, registrati al topic
• Message queue – più consumers in ascolto alla coda, ma
ciascun messaggio è processato da un consumer solo
• Many-to-one – più producers, un solo consumer
• Request/reply – messaggio di riscontro (ack o reply)
inviato dal consumer al producer tramite un altro canale
41. Anypoint VPC
Segmento di rete per i CloudHub Workers
● virtuale
● privato
● Isolato
Connessione di data center tramite canale sicuro VPN
Sottoscrizione base: 2 Anypoint VPC, ciascuna
associabile ad environment multipli
Possibilità di isolare ambienti produttivi da non
produttivi
Possibilità di configurare regole firewall
42. Anypoint VPC Peering
Connessione diretta tra due VPC
Comunicazione reciproca come se fossero sulla
stessa rete
Isolamento logico da altre reti
NOTA: AWS e Anypoint VPCs devono essere nella
stessa region!!!
43. Amazon SNS Connector
Wrapper Mulesoft per Amazon Simple Notification Service APIs
Current version: 4.6.1
Casi d’uso:
● Publish-subscribe
● Invio notifiche push (multiprotocollo)
Features aggiuntive:
● Retry automatici
● Monitoring
● Invio SMS (da 4.6.x)
NB: attualmente il connettore non supporta la configurazione di topic FIFO
44. Amazon SQS Connector
Wrapper Mulesoft per Amazon Simple Queue Service APIs
Current version: 5.11.1
Casi d’uso:
● Asynchronous processing
● Disaccoppiamento (one-way messaging pattern)
● Distribuzione del carico di lavoro
● Batch scheduling (gestione jobs in code di esecuzione)
Supporto per:
● Standard Queues
● FIFO Queues
47. Caso d'uso - Architettura
Sistema Mule progettato secondo il modello API-Led
Sincronizzazione dati tra sistemi eterogenei
(Salesforce, gestione dati Master, Software di cassa,
sistemi legacy)
MOM con propagazione di eventi (modello event-
driven), uso di AWS
Uso di CDM (Common Data Model) come pattern
dati per l'interoperabilità
Problema: gli ARN delle code AWS viaggiano su rete
pubblica!!
arn:partition:service:region:account-id:resource-id
Esigenza: rendere sicura la comunicazione fra
Mulesoft e AWS, instradando il traffico nella VPC
ARCHITETTURA
VERSIONE 2
48. Caso d'uso - Publish event
Creazione cliente Aggiornamento cliente
56. Caso d'uso - Verifica connettività VPC
Tool per verifiche networking: net-tools
Test connettività da CloudHub alle relative reti connesse
JAR deployabile su CloudHub
Permette di effettuare i seguenti comandi:
● ping
● traceroute
● socket connection test
● DNS (resolver)
● curl
● certest
● SSL Ciphers (list of supported ciphers)
Usato per verificare la raggiungibilità degli AWS VPC Endpoint (VPCE) dalla Anypoint VPC
Link: https://help.mulesoft.com/s/article/How-To-Use-Network-Tools-Application
57. Caso d'uso - Verifica connettività VPC
Verifica VPCE SNS: OK Verifica VPCE SQS: OK
58. Caso d'uso - Configurazioni per log debugging
Connector/Module
Name
DEBUG Package Driver Level DEBUG
Amazon SNS Connector org.mule.extension.sns
org.mule.service.http.impl.service.HttpMessageLogger
com.amazonaws
com.amazonaws.services
Amazon SQS Connector org.mule.extension.sqs
org.mule.service.http.impl.service.HttpMessageLogger
org.apache.http
Fonte: https://help.mulesoft.com/s/article/DEBUG-packages-for-Anypoint-Connectors-and-modules-in-mule-4
61. Risultati - Logs SNS
La connessione viene instaurata correttamente con il VPCE
62. Risultati - Logs SNS
Correlation ID passato come attributo
Payload messaggio
63. Risultati - Logs SQS
Messaggio ricevuto correttamente
Richiesta di eliminazione messaggio da coda
64. Conclusioni
● Paradigma Message Oriented Middleware e Message Queuing Services
● Anypoint VPC e VPC Peering con AWS
● Connettori Mulesoft Amazon SNS ed SQS
● Caso d'uso e configurazioni di utilizzo
● Sicurezza: rendere privata la comunicazione all'interno della VPC - uso di VPCE (PrivateLink)
● Risultati