Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Instrumentasi AWS Lambda fungsi
catatan
X-Ray SDK/Daemon Pemberitahuan Pemeliharaan — Pada 25 Februari 2026, AWS X-Ray SDKs/Daemon akan memasuki mode pemeliharaan, di mana AWS akan membatasi rilis X-Ray SDK dan Daemon untuk mengatasi masalah keamanan saja. Untuk informasi selengkapnya tentang garis waktu dukungan, lihatGaris waktu Dukungan X-Ray SDK dan Daemon. Kami merekomendasikan untuk bermigrasi ke OpenTelemetry. Untuk informasi selengkapnya tentang migrasi ke OpenTelemetry, lihat Migrasi dari X-Ray instrumentasi ke instrumentasi. OpenTelemetry
Scorekeep menggunakan dua AWS Lambda fungsi. Yang pertama adalah Node.js fungsi dari lambda cabang yang menghasilkan nama acak untuk pengguna baru. Ketika pengguna membuat sesi tanpa memasukkan nama, aplikasi memanggil fungsi bernama random-name dengan AWS SDK untuk Java. X-Ray SDK for Java mencatat informasi tentang panggilan ke Lambda di subsegmen seperti panggilan lain yang dibuat dengan klien SDK berinstrumen. AWS
catatan
Menjalankan fungsi Lambda random-name membutuhkan pembuatan sumber daya tambahan di luar lingkungan Elastic Beanstalk. Lihat readme untuk informasi selengkapnya dan petunjuk: Integrasi AWS
Lambda
Fungsi kedua, scorekeep-worker, adalah fungsi Python yang berjalan secara independen dari API Scorekeep. Saat game berakhir, API menulis ID sesi dan ID game ke antrean SQS. Fungsi pekerja membaca item dari antrean, dan memanggil API Scorekeep untuk membuat catatan lengkap dari setiap sesi game untuk penyimpanan di Amazon S3.
Scorekeep mencakup CloudFormation template dan skrip untuk membuat kedua fungsi. Karena Anda perlu menggabungkan X-Ray SDK dengan kode fungsi, template membuat fungsi tanpa kode apa pun. Ketika Anda men-deploy Scorekeep, file konfigurasi yang disertakan dalam folder .ebextensions membuat paket bundel sumber yang meliputi SDK, dan memperbarui kode fungsi dan konfigurasi dengan AWS Command Line Interface.
Nama acak
Scorekeep memanggil fungsi nama acak ketika pengguna memulai sesi game tanpa masuk atau menentukan nama pengguna. Ketika Lambda memproses panggilan kerandom-name, ia membaca header tracing, yang berisi ID jejak dan keputusan pengambilan sampel yang ditulis oleh SDK for X-Ray Java.
Untuk setiap permintaan sampel, Lambda menjalankan daemon X-Ray dan menulis dua segmen. Segmen pertama mencatat informasi tentang panggilan ke Lambda yang memanggil fungsi. Segmen ini berisi informasi yang sama dengan subsegmen yang dicatat oleh Scorekeep, namun dari sudut pandang Lambda. Segmen kedua menunjukkan pekerjaan yang dilakukan fungsi.
Lambda meneruskan segmen fungsi ke X-Ray SDK melalui konteks fungsi. Saat Anda menginstrumentasi fungsi Lambda, Anda tidak boleh menggunakan SDK untuk membuat segmen untuk permintaan masuk. Lambda menyediakan segmen tersebut, dan Anda menggunakan SDK untuk menginstrumentasi klien dan menulis subsegment.
random-nameFungsi ini diimplementasikan di Node.js. Ini menggunakan SDK for JavaScript in Node.js untuk mengirim notifikasi dengan Amazon SNS, dan X-Ray SDK Node.js untuk instrumen AWS klien SDK. Untuk menulis anotasi, fungsi membuat subsegmen kustom dengan AWSXRay.captureFunc, dan menulis anotasi dalam fungsi yang diinstrumentasi. Di Lambda, Anda tidak dapat menulis anotasi langsung ke segmen fungsi, namun hanya ke subsegmen yang Anda buat.
contoh function/index.js - Nama acak fungsi Lambda
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;Fungsi ini dibuat secara otomatis ketika Anda men-deploy aplikasi sampel ke Elastic Beanstalk. Cabang xray termasuk skrip untuk membuat fungsi Lambda kosong. File konfigurasi dalam .ebextensions folder membangun paket fungsi dengan npm install selama penerapan, dan kemudian memperbarui fungsi Lambda dengan CLI. AWS
Pekerja
Fungsi pekerja yang diinstrumentasi disediakan di cabangnya sendiri, xray-worker, karena tidak dapat berjalan kecuali Anda membuat fungsi pekerja dan sumber daya terkait terlebih dahulu. Lihat readme cabang
Fungsi ini dipicu oleh CloudWatch acara Amazon Events yang dibundel setiap 5 menit. Ketika berjalan, fungsi menarik item dari antrean Amazon SQS yang dikelola Scorekeep. Setiap pesan berisi informasi tentang game yang sudah selesai.
Pekerja menarik catatan dan dokumen game dari tabel lain tempat game mencatat referensi.. Misalnya, catatan game di DynamoDB meliputi daftar gerakan yang dieksekusi selama game berlangsung. Daftar tidak hanya berisi gerakan tersebut, melainkan ID gerakan yang disimpan dalam tabel terpisah.
Sesi, dan status juga disimpan sebagai referensi. Hal ini membuat entri dalam tabel game menjadi terlalu besar, tetapi membutuhkan panggilan tambahan untuk mendapatkan semua informasi tentang game. Pekerja melakukan deferensi pada semua entri ini dan membuat catatan lengkap game sebagai dokumen tunggal di Amazon S3. Saat Anda ingin melakukan analitik pada data, Anda dapat melakukan kueri langsung di atasnya di Amazon S3 dengan Amazon Athena tanpa menjalankan migrasi data baca-berat untuk mendapatkan data Anda dari DynamoDB.
Fungsi pekerja juga mengaktifkan pelacakan aktif dalam konfigurasinya di AWS Lambda. Tidak seperti fungsi nama acak, pekerja tidak menerima permintaan dari aplikasi yang diinstrumentasi, sehingga AWS Lambda tidak menerima header penelusuran. Dengan pelacakan aktif, Lambda membuat ID pelacakan dan membuat keputusan pengambilan sampel.
X-Ray SDK untuk Python hanyalah beberapa baris di bagian atas fungsi yang mengimpor SDK dan menjalankan patch_all fungsinya untuk menambal AWS SDK for Python (Boto) dan HttClients yang digunakannya untuk memanggil Amazon SQS dan Amazon S3. Ketika pekerja memanggil API Scorekeep, SDK menambahkan header pelacakan pada permintaan untuk melacak panggilan melalui API.
contoh_lambda/scorekeep- worker/scorekeep -worker.py - Fungsi Lambda Pekerja
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
)
...