{"id":6601,"date":"2024-01-19T09:00:00","date_gmt":"2024-01-19T08:00:00","guid":{"rendered":"https:\/\/blog.besharp.it\/?p=6601"},"modified":"2024-02-02T11:06:44","modified_gmt":"2024-02-02T10:06:44","slug":"hands-on-strumentazione-di-aws-lambda-con-aws-x-ray-per-analisi-e-debugging-delle-applicazioni","status":"publish","type":"post","link":"https:\/\/blog.besharp.it\/it\/hands-on-strumentazione-di-aws-lambda-con-aws-x-ray-per-analisi-e-debugging-delle-applicazioni\/","title":{"rendered":"Hands-on: strumentazione di AWS Lambda con AWS X-Ray per analisi e debugging delle applicazioni"},"content":{"rendered":"\n
Lavorare con i microservizi<\/strong> presenta molti vantaggi, ma presenta anche alcuni difetti. Uno di questi \u00e8 senza dubbio il complicarsi delle attivit\u00e0 di debug e monitoraggio dell’intera applicazione.<\/p>\n\n\n\n Ogni microservizio pu\u00f2 produrre log in una posizione diversa e passare da uno all’altro durante il debug potrebbe richiedere molto tempo.<\/p>\n\n\n\n Inoltre, sapere quali microservizi fanno parte di un\u2019applicazione e trovare colli di bottiglia o punti deboli pu\u00f2 essere complicato, soprattutto con applicazioni di grandi dimensioni e scarsamente documentate.<\/p>\n\n\n\n AWS X-Ray risolve entrambi i problemi fornendo un punto centralizzato da cui accedere ai log delle applicazioni e consultare una mappa di tutti i microservizi, le risorse e il modo in cui questi comunicano.<\/p>\n\n\n\n AWS X-Ray \u00e8 un servizio che consente di raccogliere dati dalle applicazioni che si desidera monitorare, in modo da poterli analizzare per trovare possibili problemi o modi per migliorare le prestazioni delle applicazioni. L’invio di dati riferiti a richieste in entrata e in uscita e altri eventi consente di vedere quali risorse AWS, microservizi e API Web vengono utilizzati.<\/p>\n\n\n\n Questo processo \u00e8 chiamato \u201cStrumentazione\u201d.<\/p>\n\n\n\n Esistono diversi tipi di strumentazione:<\/p>\n\n\n\n Molti servizi AWS forniscono integrazione con AWS X-Ray, come AWS Lambda, Amazon API Gateway, Amazon Simple Notification Service o Amazon Simple Queue Service.<\/p>\n\n\n\n L’integrazione dei servizi AWS con AWS X-Ray pu\u00f2 essere suddivisa in:<\/p>\n\n\n\n I dati inviati dalle applicazioni sono chiamati segmenti<\/strong>. I segmenti contengono informazioni diverse in base alla natura della richiesta. Ad esempio, una richiesta HTTP conterr\u00e0 informazioni come l’URL, il metodo e il codice di risposta.<\/p>\n\n\n\n Un segmento pu\u00f2 essere suddiviso in sottosegmenti<\/strong> per fornire maggiori informazioni su tutti gli attori coinvolti nel lavoro. Il segmento dell’applicazione pu\u00f2 essere suddiviso in diversi sottosegmenti per ciascuna funzione eseguita per conoscere l’ordine e la durata delle funzioni. I sottosegmenti vengono utilizzati anche da AWS X-Ray per creare “segmenti dedotti” per servizi che non supportano AWS X-Ray, come Amazon DynamoDB. Ci\u00f2 consente a AWS X-Ray di mostrarli nella trace map <\/strong>(o mappa di tracciamento). La mappa di tracciamento mostra tutti i servizi coinvolti e pu\u00f2 essere utilizzata per analizzare il flusso di lavoro dell’applicazione. La mappa delle tracce viene creata utilizzando le tracce<\/strong>. Una traccia \u00e8 una raccolta di tutti i segmenti generati da una singola richiesta all’applicazione.<\/p>\n\n\n\n <\/p>\n\n\n <\/p>\n\n\n\n AWS X-Ray non traccia ogni richiesta, ma segue una frequenza di campionamento. La frequenza di campionamento pu\u00f2 essere personalizzata nelle impostazioni di AWS X-Ray creando regole da applicare a specifici servizi.<\/p>\n\n\n\n <\/p>\n\n\n <\/p>\n\n\n\n Se l’aapplicazione genera molte tracce, \u00e8 possibile filtrarle per ottenere informazioni pi\u00f9 accurate utilizzando le filter expression<\/strong>. Le filter expression consentono di filtrare informazioni come tracce che hanno generato errori in servizi specifici, tracce originate da determinati URL o tracce la cui durata ha superato un determinato periodo di tempo.<\/p>\n\n\n\n \u00c8 anche possibile estendere il filtraggio creando un gruppo<\/strong>. I gruppi conterranno tutte le tracce che rispettano l’espressione del filtro generata dopo la creazione del gruppo. Nei gruppi \u00e8 possibile attivare insight<\/strong> e notifiche di insight. AWS X-Ray identifica i problemi emergenti nelle applicazioni e crea insight quando gli intervalli vengono superati. Se le notifiche sono abilitate, riceverai una notifica per ogni evento di insight.<\/p>\n\n\n\n X-Ray tiene traccia degli errori che si verificano nell’applicazione e degli errori restituiti dai servizi richiamati. Gli errori sono raggruppati come segue:<\/p>\n\n\n\n AWS X-Ray crittografa le tracce e i dati inattivi con una chiave di crittografia gestita da AWS. <\/p>\n\n\n\n Se si desidera disattivare la crittografia o utilizzare una chiave gestita da noi a causa dei requisiti di conformit\u00e0, \u00e8 possibile configurare AWS X-Ray per utilizzare una chiave KMS.<\/p>\n\n\n\n in AWS X-Ray si paga in base al numero di tracce registrate, recuperate e scansionate.<\/p>\n\n\n\n Il servizio fornisce una dimensione di traccia minima garantita di 100 KB.<\/p>\n\n\n\n I dati di tracciamento vengono conservati per 30 giorni da quando vengono registrati senza costi aggiuntivi.<\/p>\n\n\n\n AWS X-Ray ha un tier gratuito:<\/p>\n\n\n\n Puoi personalizzare la frequenza di campionamento per scegliere il giusto compromesso tra costi e quantit\u00e0 di dati da raccogliere.<\/p>\n\n\n\n Abbiamo creato una semplice applicazione di esempio per mostrarvi la configurazione della strumentazione a raggi X e i suoi output.<\/p>\n\n\n\n Lo scopo dell’applicazione consiste nel pre-elaborare le immagini, inviarle a Rekognition per rilevare il testo al loro interno e salvare l’output in una tabella DynamoDB per la successiva analisi dei risultati.<\/p>\n\n\n\n L’applicazione comprender\u00e0 un bucket S3 in cui caricheremo le immagini che vogliamo analizzare.<\/p>\n\n\n\n La creazione di oggetti all’interno del bucket attiver\u00e0 una funzione Lambda, che si occuper\u00e0 di applicare alcune trasformazioni di pre-elaborazione all’immagine.<\/p>\n\n\n\n L’output della funzione Lambda di pre-elaborazione verr\u00e0 salvato in un altro bucket S3, che attiver\u00e0 un’altra funzione Lambda per inviare l’immagine a Rekognition e salvare i risultati della funzionalit\u00e0 \u201cText detection\u201d in una tabella DynamoDB.<\/p>\n\n\n\n <\/p>\n\n\n\n <\/p>\n\n\n Innanzitutto, per raccogliere dati dalla nostra applicazione, dobbiamo attivare il tracciamento nelle sue funzioni Lambda.<\/p>\n\n\n\n Si pu\u00f2 fare:<\/p>\n\n\n\n <\/p>\n\n\n <\/p>\n\n\n\n <\/p>\n\n\n\n <\/p>\n\n\n\n <\/p>\n\n\n\n <\/p>\n\n\n\n Ora che il tracciamento della funzione Lambda \u00e8 abilitato, dobbiamo configurare AWS X-Ray nel nostro codice.<\/p>\n\n\n\n Un modo per farlo \u00e8 tramite la strumentazione manuale grazie all\u2019SDK di AWS X-Ray.<\/p>\n\n\n\n Le nostre funzioni Lambda vengono eseguite su Node.js e utilizzano SDK v3. Con l’SDK AWS v2, puoi attivare l’acquisizione di tutte le richieste in uscita effettuate dalla libreria. Poich\u00e9 l’SDK AWS V3 ha una struttura modulare, \u00e8 necessario acquisire ogni client utilizzato dall’applicazione. In questo modo, ogni volta che i client invieranno un comando, verr\u00e0 estratto un sottosegmento dal segmento di invocazione Lambda, dandoci una visione pi\u00f9 precisa di cosa \u00e8 successo durante l’esecuzione di quel comando e quanto tempo \u00e8 stato necessario per completarlo.<\/p>\n\n\n\n Puoi fare la stessa cosa con funzioni e metodi all’interno del tuo codice per sapere quanto \u00e8 durata ogni invocazione rispetto alla durata totale dell’esecuzione della funzione Lambda.<\/p>\n\n\n\n <\/p>\n\n\n <\/p>\n\n\n\n Nel caso della nostra funzione Lambda di pre-elaborazione, prevediamo che il segmento di invocazione sia suddiviso in tre sottosegmenti:<\/p>\n\n\n\n Di seguito \u00e8 riportato il risultato di un’invocazione della funzione:<\/p>\n\n\n\n <\/p>\n\n\n <\/p>\n\n\n\n Caricando alcune immagini nel bucket S3 di input, avremo una panoramica di come l’applicazione gestisce il carico di lavoro delle richieste.<\/p>\n\n\n\n <\/p>\n\n\n <\/p>\n\n\n <\/p>\n\n\n\n La trace map mostra che la funzione Lambda x-ray-process-image<\/strong> risponde con alcuni errori 4xx causati dalla limitazione della tabella DynamoDB.<\/p>\n\n\n\n Cliccando sull’icona di una risorsa si apre un menu laterale con tutti i tipi di informazioni sulla risorsa di interesse. Abbiamo potuto vedere rapidamente cosa stava causando l’errore facendo clic sulla scheda “Eccezioni”, che mostrava il seguente errore: “The level of configured provisioned throughput for the table was exceeded. Consider increasing your provisioning level with the UpdateTable API\u201d<\/em>\u201d.<\/p>\n\n\n\n Ho modificato la DynamoDB dalla modalit\u00e0 “provisioned”, con poche capacity units, alla modalit\u00e0 “on-demand”.<\/p>\n\n\n\n Con la nuova configurazione, l’applicazione ha sostenuto il traffico senza errori.<\/p>\n\n\n\n <\/p>\n\n\n <\/p>\n\n\n\n In un mondo in cui le applicazioni di microservizi crescono in numero e complessit\u00e0, AWS X-Ray fornisce potenti strumenti per il debug e l’analisi. Con questo articolo volevamo creare una piccola guida sui suoi fondamenti e su come abilitarlo nelle funzioni AWS Lambda.<\/p>\n\n\n\n La nostra applicazione di esempio utilizzava la strumentazione manuale poich\u00e9 era piccola e scritta per la guida, ma nel caso di applicazioni significative, la strumentazione automatica \u00e8 un’opzione pi\u00f9 rapida e semplice. <\/p>\n\n\n\n Avete gi\u00e0 utilizzato AWS X-Ray per il monitoring delle vostre applicazioni? Fateci sapere se volete saperne di pi\u00f9!<\/p>\n\n\n\nCos\u2019\u00e8 AWS X-Ray<\/h2>\n\n\n\n
\n
\n
Basi di AWS X-Ray<\/h2>\n\n\n\n
<\/figure><\/div>\n\n\n
<\/figure><\/div>\n\n\n
\n
Prezzi<\/h2>\n\n\n\n
\n
Applicazione di esempio<\/h2>\n\n\n\n
<\/figure><\/div>\n\n\n
\n
<\/figure><\/div>\n\n\n
<\/figure>\n\n\n\n
\n
aws lambda update-function-configuration --function-name my-function --tracing-config Mode=Active<\/pre>\n\n\n\n
\n
\n
<\/figure><\/div>\n\n\n
\n
<\/figure>\n\n\n\n
<\/figure><\/div>\n\n\n
\n
<\/figure><\/div>\n\n\n
<\/figure><\/div>\n\n\n
<\/figure><\/div>\n\n\n
<\/figure><\/div>\n\n\n
Conclusioni<\/h2>\n\n\n\n
About Proud2beCloud<\/h4>\n\n\n\n