View a markdown version of this page

Strumentazione del codice Ruby in AWS Lambda - AWS Lambda

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Strumentazione del codice Ruby in AWS Lambda

Lambda si integra con AWS X-Ray per consentirti di tracciare, eseguire il debug e ottimizzare le applicazioni Lambda. Puoi utilizzare X-Ray per tracciare una richiesta mentre attraversa le risorse nell'applicazione, dall'API di front-end allo storage e al database di back-end. Aggiungendo semplicemente la libreria X-Ray SDK alla configurazione di build, è possibile registrare errori e latenza per ogni chiamata effettuata dalla funzione a un servizio. AWS

Dopo aver configurato il tracciamento attivo, è possibile osservare richieste specifiche tramite l'applicazione. Il grafico dei X-Ray servizi mostra informazioni sull'applicazione e su tutti i suoi componenti. Il seguente esempio mostra un'applicazione con due funzioni. La funzione principale elabora gli eventi e talvolta restituisce errori. La seconda funzione in alto elabora gli errori che compaiono nel gruppo di log della prima e utilizza l' AWS SDK per chiamare X-Ray Amazon Simple Storage Service (Amazon S3) e Amazon Logs. CloudWatch

Un diagramma che mostra due applicazioni separate e le rispettive mappe dei servizi in X-Ray

Per attivare il tracciamento attivo sulla tua Lambda Event Function con la console, segui questi passaggi:

Per attivare il tracciamento attivo
  1. Apri la pagina Event Functions della console Lambda.

  2. Scegliete una funzione di evento.

  3. Scegliere Configuration (Configurazione) e quindi Monitoring and operations tools (Strumenti di monitoraggio e operazioni).

  4. In Strumenti di monitoraggio aggiuntivi scegli Modifica.

  5. In CloudWatch Application Signals e AWS X-Ray, scegli Enable for Lambda service trace.

  6. Selezionare Salva.

Prezzi

Puoi utilizzare il X-Ray tracciamento gratuitamente ogni mese fino a un determinato limite come parte del piano AWS gratuito. Oltre tale soglia, verranno X-Ray addebitati i costi per l'archiviazione e il recupero delle tracce. Per ulteriori informazioni, consulta Prezzi di AWS X-Ray.

La tua Event Function richiede l'autorizzazione per caricare i dati di traccia su. X-Ray Quando attivi il tracciamento nella console Lambda, Lambda aggiunge le autorizzazioni richieste al ruolo di esecuzione della tua Event Function. Altrimenti, aggiungi la AWSXRayDaemonWriteAccesspolicy al ruolo di esecuzione.

X-Ray non traccia tutte le richieste alla tua applicazione. X-Ray applica un algoritmo di campionamento per garantire che il tracciamento sia efficiente, pur fornendo un campione rappresentativo di tutte le richieste. La frequenza di campionamento è di una richiesta al secondo e del 5% delle altre richieste. Non puoi configurare la frequenza di X-Ray campionamento per le tue funzioni.

In X-Ray, una traccia registra le informazioni su una richiesta che viene elaborata da uno o più servizi. Lambda registra 2 segmenti per traccia, che creano due nodi sul grafico del servizio. L'immagine seguente evidenzia questi due nodi:

Una mappa dei X-Ray servizi con una sola funzione.

Il primo nodo a sinistra rappresenta il servizio Lambda che riceve la richiesta di chiamata. Il secondo nodo rappresenta la specifica funzione Lambda. L'esempio seguente mostra una traccia con questi 2 segmenti. Entrambi sono nominati my-function, ma uno ha l'origine AWS::Lambda e l'altro ha l'origine AWS::Lambda::Function. Se il segmento AWS::Lambda mostra un errore, il servizio Lambda ha avuto un problema. Se il AWS::Lambda::Function segmento mostra un errore, la funzione ha avuto un problema.

Una X-Ray traccia che mostra la latenza in ogni sottosegmento di una chiamata Lambda specifica.

Questo esempio espande il segmento AWS::Lambda::Function per visualizzare i relativi tre sottosegmenti.

Nota

AWS sta attualmente implementando modifiche al servizio Lambda. A causa di queste modifiche, potresti notare piccole differenze tra la struttura e il contenuto dei messaggi di registro di sistema e dei segmenti di traccia emessi da diverse funzioni di evento Lambda nel tuo. Account AWS

La traccia di esempio mostrata qui illustra il segmento di funzione vecchio stile. Le differenze tra i segmenti vecchio e nuovo stile sono descritte nei paragrafi seguenti.

Queste modifiche verranno implementate nelle prossime settimane e tutte le funzioni, Regioni AWS ad eccezione della Cina e delle GovCloud regioni, passeranno all'utilizzo dei messaggi di registro e dei segmenti di traccia di nuovo formato.

Il segmento di funzioni vecchio stile contiene i seguenti sottosegmenti:

  • Inizializzazione – Rappresenta il tempo trascorso a caricare la funzione e ad eseguire il codice di inizializzazione. Questo sottosegmento viene visualizzato solo per il primo evento che viene elaborato da ogni istanza della funzione.

  • Chiamata: rappresenta il tempo impiegato per eseguire il codice del gestore.

  • Overhead: rappresenta il tempo impiegato dal runtime Lambda per prepararsi a gestire l'evento successivo.

Il segmento di funzione di nuovo stile non contiene un sottosegmento Invocation. I sottosegmenti dei clienti sono invece collegati direttamente al segmento di funzioni. Per ulteriori informazioni sulla struttura dei segmenti di funzioni vecchio e nuovo stile, consulta Comprendere le tracce X-Ray.

È possibile strumentare il codice del gestore per registrare i metadati e tracciare le chiamate a valle. Per registrare i dettagli delle chiamate effettuate dal gestore verso altre risorse e servizi, utilizzate l' X-Ray SDK for Ruby. Per ottenere l'SDK, aggiungere il pacchetto aws-xray-sdk alle dipendenze dell'applicazione.

Esempio vuoto- /Gemfile ruby/function
# Gemfile source 'https://rubygems.org' gem 'aws-xray-sdk', '0.11.4' gem 'aws-sdk-lambda', '1.39.0' gem 'test-unit', '3.3.5'

Per i client Instrument AWS SDK, richiedi il aws-xray-sdk/lambda modulo dopo aver creato un client nel codice di inizializzazione.

Esempio blank- /lambda_function.rb ruby/function — Tracciamento di un AWS Client SDK
# lambda_function.rb require 'logger' require 'json' require 'aws-sdk-lambda' $client = Aws::Lambda::Client.new() $client.get_account_settings() require 'aws-xray-sdk/lambda' def lambda_handler(event:, context:) logger = Logger.new($stdout) ...

In X-Ray, una traccia registra le informazioni su una richiesta che viene elaborata da uno o più servizi. Lambda registra 2 segmenti per traccia, che creano due nodi sul grafico del servizio. L'immagine seguente evidenzia questi due nodi:

Una mappa dei X-Ray servizi con una sola funzione.

Il primo nodo a sinistra rappresenta il servizio Lambda che riceve la richiesta di chiamata. Il secondo nodo rappresenta la specifica funzione Lambda. L'esempio seguente mostra una traccia con questi 2 segmenti. Entrambi sono nominati my-function, ma uno ha l'origine AWS::Lambda e l'altro ha l'origine AWS::Lambda::Function. Se il segmento AWS::Lambda mostra un errore, il servizio Lambda ha avuto un problema. Se il AWS::Lambda::Function segmento mostra un errore, la funzione ha avuto un problema.

Una X-Ray traccia che mostra la latenza in ogni sottosegmento di una chiamata Lambda specifica.

Questo esempio espande il segmento AWS::Lambda::Function per visualizzare i relativi tre sottosegmenti.

Nota

AWS sta attualmente implementando modifiche al servizio Lambda. A causa di queste modifiche, potresti notare piccole differenze tra la struttura e il contenuto dei messaggi di registro di sistema e dei segmenti di traccia emessi da diverse funzioni di evento Lambda nel tuo. Account AWS

La traccia di esempio mostrata qui illustra il segmento di funzione vecchio stile. Le differenze tra i segmenti vecchio e nuovo stile sono descritte nei paragrafi seguenti.

Queste modifiche verranno implementate nelle prossime settimane e tutte le funzioni, Regioni AWS ad eccezione della Cina e delle GovCloud regioni, passeranno all'utilizzo dei messaggi di registro e dei segmenti di traccia di nuovo formato.

Il segmento di funzioni vecchio stile contiene i seguenti sottosegmenti:

  • Inizializzazione – Rappresenta il tempo trascorso a caricare la funzione e ad eseguire il codice di inizializzazione. Questo sottosegmento viene visualizzato solo per il primo evento che viene elaborato da ogni istanza della funzione.

  • Chiamata: rappresenta il tempo impiegato per eseguire il codice del gestore.

  • Overhead: rappresenta il tempo impiegato dal runtime Lambda per prepararsi a gestire l'evento successivo.

Il segmento di funzione di nuovo stile non contiene un sottosegmento Invocation. I sottosegmenti dei clienti sono invece collegati direttamente al segmento di funzioni. Per ulteriori informazioni sulla struttura dei segmenti di funzioni vecchio e nuovo stile, consulta Comprendere le tracce X-Ray.

È inoltre possibile strumentare i client HTTP, registrare query SQL e creare segmenti secondari personalizzati con annotazioni e metadati. Per ulteriori informazioni, consulta The X-Ray SDK for Ruby AWS X-Ray nella Developer Guide.

Abilitazione del tracciamento attivo con l'API Lambda

Per gestire la configurazione di tracciamento con AWS CLI o AWS SDK, utilizza le seguenti operazioni API:

Il AWS CLI comando di esempio seguente abilita il tracciamento attivo su una funzione denominata my-function.

aws lambda update-function-configuration --function-name my-function \ --tracing-config Mode=Active

La modalità di tracciamento fa parte della configurazione specifica della versione quando si pubblica una versione della funzione. Non è possibile modificare la modalità di tracciamento in una versione pubblicata.

Abilitazione del tracciamento attivo con CloudFormation

Per attivare il tracciamento su una AWS::Lambda::Function risorsa in un CloudFormation modello, utilizzate la TracingConfig proprietà.

Esempio function-inline.yml — Configurazione di tracciamento
Resources: function: Type: AWS::Lambda::Function Properties: TracingConfig: Mode: Active ...

Per una AWS::Serverless::Function risorsa AWS Serverless Application Model (AWS SAM), utilizzate la Tracing proprietà.

Esempio template.yml — Configurazione di tracciamento
Resources: function: Type: AWS::Serverless::Function Properties: Tracing: Active ...

Memorizzazione delle dipendenze di runtime in un layer

Se utilizzi l' X-Ray SDK per strumentare i client AWS SDK del codice della funzione, il pacchetto di distribuzione può diventare piuttosto grande. Per evitare di caricare le dipendenze di runtime ogni volta che aggiorni il codice della funzione, impacchetta l' X-Ray SDK in un livello Lambda.

L'esempio seguente mostra una AWS::Serverless::LayerVersion risorsa che memorizza X-Ray SDK for Ruby.

Esempio template.yml — Livello delle dipendenze
Resources: function: Type: AWS::Serverless::Function Properties: CodeUri: function/. Tracing: Active Layers: - !Ref libs ... libs: Type: AWS::Serverless::LayerVersion Properties: LayerName: blank-ruby-lib Description: Dependencies for the blank-ruby sample app. ContentUri: lib/. CompatibleRuntimes: - ruby2.5

Con questa configurazione, si aggiorna il livello della libreria solo se si modificano le dipendenze di runtime. Poiché il pacchetto di implementazione della funzione contiene solo il codice, questo può contribuire a ridurre i tempi di caricamento.

La creazione di un livello per le dipendenze richiede modifiche alla build per generare l'archivio dei livelli prima della distribuzione. Per un esempio funzionante, vedere l'applicazione di esempio blank-ruby .