View a markdown version of this page

• Strumentazione AWS Lambda funzioni - AWS X-Ray

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 AWS Lambda funzioni

Nota

X-Ray SDK/Daemon Avviso di manutenzione — Il 25 febbraio 2026, AWS X-Ray SDKs/Daemon entrerà in modalità manutenzione, in cui AWS limiterà le versioni di X-Ray SDK e Daemon per risolvere solo i problemi di sicurezza. Per ulteriori informazioni sulla tempistica dell'assistenza, consulta. Cronologia di X-Ray SDK e Daemon Support Ti consigliamo di migrare a. OpenTelemetry Per ulteriori informazioni sulla migrazione a OpenTelemetry, vedere Migrazione dalla X-Ray strumentazione alla strumentazione. OpenTelemetry

AWS Lambda Scorekeep utilizza due funzioni. La prima è una Node.js funzione del lambda ramo che genera nomi casuali per i nuovi utenti. Quando un utente crea una sessione senza immettere un nome, l'applicazione chiama una funzione denominata random-name con il AWS SDK per Java. L' X-Ray SDK per Java registra le informazioni sulla chiamata a Lambda in un sottosegmento come qualsiasi altra chiamata effettuata con un client SDK AWS strumentato.

Nota

L'esecuzione della funzione random-name Lambda richiede la creazione di risorse aggiuntive al di fuori dell'ambiente Elastic Beanstalk. Per ulteriori informazioni e istruzioni, consulta il file readme: Lambda Integration. AWS

La seconda funzione, scorekeep-worker, è una funzione Python che viene eseguita indipendentemente dall'API Scorekeep. Quando una partita termina, l'API scrive l'ID della sessione e l'ID della partita su una coda SQS. La funzione worker legge gli elementi dalla coda e chiama l'API Scorekeep per creare record completi di ogni sessione di gioco per l'archiviazione in Amazon S3.

Scorekeep include CloudFormation modelli e script per creare entrambe le funzioni. Poiché è necessario raggruppare l' X-Ray SDK con il codice della funzione, i modelli creano le funzioni senza alcun codice. Quando distribuisci Scorekeep, un file di configurazione incluso nella cartella .ebextensions crea un pacchetto di codice sorgente che include l'SDK e aggiorna il codice della funzione e la configurazione con AWS Command Line Interface.

Nome casuale

Scorekeep richiama la funzione di generazione del nome casuale quando un utente avvia una sessione di gioco senza aver eseguito l'accesso oppure senza aver specificato un nome utente. Quando Lambda elabora la chiamata arandom-name, legge l'intestazione di tracciamento, che contiene l'ID di traccia e la decisione di campionamento scritti dall'SDK per Java. X-Ray

Per ogni richiesta campionata, Lambda esegue il demone e scrive due segmenti. X-Ray Il primo segmento registra le informazioni sulla chiamata a Lambda che richiama la funzione. Questo segmento contiene le stesse informazioni del sottosegmento registrato da Scorekeep, ma dal punto di vista Lambda. Il secondo segmento rappresenta l'attività svolta dalla funzione.

Lambda passa il segmento della funzione all' X-Ray SDK tramite il contesto della funzione. Quando si utilizza una funzione Lambda, non si utilizza l'SDK per creare un segmento per le richieste in arrivo. Lambda fornisce il segmento e tu usi l'SDK per strumentare i client e scrivere sottosegmenti.

Mappa di tracciamento che mostra come scorekeep chiama una funzione Lambda per ottenere nomi casuali per i nuovi utenti

La random-name funzione è implementata in. Node.js Utilizza l'SDK for JavaScript in per Node.js inviare notifiche con Amazon SNS e l' X-Ray SDK per Node.js strumentare il client SDK. AWS Per scrivere annotazioni, la funzione crea una sottosegmento personalizzato con AWSXRay.captureFunc e scrive le annotazioni nella funzione analizzata. In Lambda, non puoi scrivere annotazioni direttamente nel segmento di funzione, ma solo in un sottosegmento creato da te.

Esempio function/index.js -- Funzione Lambda con nome casuale
var AWSXRay = require('aws-xray-sdk-core'); var AWS = AWSXRay.captureAWS(require('aws-sdk')); AWS.config.update({region: process.env.AWS_REGION}); var Chance = require('chance'); var myFunction = function(event, context, callback) { var sns = new AWS.SNS(); var chance = new Chance(); var userid = event.userid; var name = chance.first(); AWSXRay.captureFunc('annotations', function(subsegment){ subsegment.addAnnotation('Name', name); subsegment.addAnnotation('UserID', event.userid); }); // Notify var params = { Message: 'Created randon name "' + name + '"" for user "' + userid + '".', Subject: 'New user: ' + name, TopicArn: process.env.TOPIC_ARN }; sns.publish(params, function(err, data) { if (err) { console.log(err, err.stack); callback(err); } else { console.log(data); callback(null, {"name": name}); } }); }; exports.handler = myFunction;

Questa funzione viene creata automaticamente quando distribuisci l'applicazione di esempio su Elastic Beanstalk. Il xray ramo include uno script per creare una funzione Lambda vuota. I file di configurazione presenti nella .ebextensions cartella generano il pacchetto di funzioni npm install durante la distribuzione, quindi aggiornano la funzione Lambda con la CLI. AWS

Worker

La funzione worker analizzata viene fornito nel suo ramo, xray-worker, poiché non può essere eseguita a meno che non si creino prima la funzione worker e le relative risorse. Per le istruzioni, consulta il readme del ramo.

La funzione viene attivata da un CloudWatch evento Amazon Events in bundle ogni 5 minuti. Quando viene eseguita, la funzione estrae un elemento da una coda Amazon SQS gestita da Scorekeep. Ogni messaggio contiene informazioni su una partita completata.

Il worker preleva il record della partita e i documenti dalle altre tabelle a cui il record della partita fa riferimento. Ad esempio, il record di gioco in DynamoDB include un elenco di mosse eseguite durante la partita. L'elenco non contiene le mosse, ma gli ID delle mosse che sono memorizzate in una tabella separata.

Anche le sessioni e gli stati sono memorizzati come riferimenti. In questo modo si evita che le voci nella tabella delle partite diventino troppo grandi ma sono necessarie chiamate aggiuntive per recuperare tutte le informazioni sulla partita. Il lavoratore dereferenzia tutte queste voci e crea un record completo del gioco come un unico documento in Amazon S3. Quando desideri eseguire analisi sui dati, puoi eseguire query su di essi direttamente in Amazon S3 con Amazon Athena senza eseguire migrazioni di dati ad alto volume di lettura per estrarli da DynamoDB.

Mappa di tracciamento che mostra come la funzione scorekeep worker utilizza Amazon SQS, Amazon S3 e l'API scorekeep.

La funzione worker dispone del tracciamento attivo abilitato nella sua configurazione in AWS Lambda. A differenza della funzione di nome casuale, il lavoratore non riceve una richiesta da un'applicazione strumentata, quindi AWS Lambda non riceve un'intestazione di tracciamento. Con il tracciamento attivo, Lambda crea l'ID di traccia e prende decisioni di campionamento.

L' X-Ray SDK per Python è composto da poche righe nella parte superiore della funzione che importa l'SDK ed esegue la sua patch_all funzione per applicare patch ai client HTTP e ai client HTTP utilizzati per chiamare Amazon SQS AWS SDK for Python (Boto) e Amazon S3. Quando il worker richiama l'API Scorekeep, l'SDK aggiunge l'intestazione di tracciamento alla richiesta per tracciare le chiamate tramite l'API.

Esempio_lambda/scorekeep- -worker.py worker/scorekeep -- Funzione Worker Lambda
import os import boto3 import json import requests import time from aws_xray_sdk.core import xray_recorder from aws_xray_sdk.core import patch_all patch_all() queue_url = os.environ['WORKER_QUEUE'] def lambda_handler(event, context): # Create SQS client sqs = boto3.client('sqs') s3client = boto3.client('s3') # Receive message from SQS queue response = sqs.receive_message( QueueUrl=queue_url, AttributeNames=[ 'SentTimestamp' ], MaxNumberOfMessages=1, MessageAttributeNames=[ 'All' ], VisibilityTimeout=0, WaitTimeSeconds=0 ) ...