Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Menelus TypeScript uri kode di AWS Lambda
Lambda terintegrasi dengan AWS X-Ray untuk membantu Anda melacak, men-debug, dan mengoptimalkan aplikasi Lambda. Anda dapat menggunakan X-Ray untuk melacak permintaan saat melintasi sumber daya dalam aplikasi Anda, yang mungkin termasuk fungsi Lambda dan layanan lainnya AWS .
Untuk mengirim data pelacakan ke X-Ray, Anda dapat menggunakan salah satu dari tiga pustaka SDK:
-
AWS Distro for OpenTelemetry (ADOT)
— Distribusi SDK (oTel) yang aman, AWS siap produksi, dan didukung. OpenTelemetry -
AWS X-Ray SDK untuk Node.js — SDK untuk menghasilkan dan mengirim data jejak ke X-Ray.
-
Powertools for AWS Lambda (TypeScript) — Toolkit pengembang untuk mengimplementasikan praktik terbaik Tanpa Server dan meningkatkan kecepatan pengembang.
Setiap SDK menawarkan cara untuk mengirim data telemetri Anda ke layanan. X-Ray Anda kemudian dapat menggunakannya X-Ray untuk melihat, memfilter, dan mendapatkan wawasan tentang metrik kinerja aplikasi Anda untuk mengidentifikasi masalah dan peluang untuk pengoptimalan.
penting
X-Ray dan Powertools untuk AWS Lambda SDK adalah bagian dari solusi instrumentasi terintegrasi yang ditawarkan oleh. AWS Lapisan ADOT Lambda adalah bagian dari standar industri untuk melacak instrumentasi yang mengumpulkan lebih banyak data secara umum, tetapi mungkin tidak cocok untuk semua kasus penggunaan. Anda dapat menerapkan pelacakan ujung ke ujung dalam X-Ray menggunakan salah satu solusi. Untuk mempelajari selengkapnya tentang memilih di antara keduanya, lihat Memilih antara AWS Distro untuk Telemetri Terbuka dan X-Ray SDK.
Bagian-bagian
Menggunakan Powertools untuk AWS Lambda (TypeScript) dan AWS SAM untuk menelusuri
Ikuti langkah-langkah di bawah ini untuk mengunduh, membangun, dan menerapkan contoh TypeScript aplikasi Hello World dengan modul Powertools for AWS Lambda (TypeScript) terintegrasi menggunakan. AWS SAM Aplikasi ini mengimplementasikan backend API dasar dan menggunakan Powertools untuk memancarkan log, metrik, dan jejak. Ini terdiri dari titik akhir Amazon API Gateway dan fungsi Lambda. Saat Anda mengirim permintaan GET ke titik akhir API Gateway, fungsi Lambda memanggil, mengirimkan log dan metrik menggunakan Format Metrik Tertanam ke CloudWatch, dan mengirimkan jejak ke. AWS X-Ray Fungsi mengembalikan hello world pesan.
Prasyarat
Untuk menyelesaikan langkah-langkah di bagian ini, Anda harus memiliki hal-hal berikut:
-
Node.js
-
AWS SAM CLI versi 1.75 atau yang lebih baru. Jika Anda memiliki versi C AWS SAM LI yang lebih lama, lihat Meng upgrade AWS SAM CLI.
Menyebarkan sampel AWS SAM application
-
Inisialisasi aplikasi menggunakan TypeScript template Hello World.
sam init --app-template hello-world-powertools-typescript --name sam-app --package-type Zip --runtime nodejs24.x --no-tracing -
Bangun aplikasi.
cd sam-app && sam build -
Terapkan aplikasi.
sam deploy --guided -
Ikuti petunjuk di layar. Untuk menerima opsi default yang disediakan dalam pengalaman interaktif, tekan
Enter.catatan
Karena HelloWorldFunction mungkin tidak memiliki otorisasi yang ditentukan, Apakah ini baik-baik saja? , pastikan untuk masuk
y. -
Dapatkan URL aplikasi yang digunakan:
aws cloudformation describe-stacks --stack-name sam-app --query 'Stacks[0].Outputs[?OutputKey==`HelloWorldApi`].OutputValue' --output text -
Memanggil titik akhir API:
curl<URL_FROM_PREVIOUS_STEP>Jika berhasil, Anda akan melihat respons ini:
{"message":"hello world"} -
Untuk mendapatkan jejak fungsi, jalankan sam tracing.
sam tracesOutput jejak terlihat seperti ini:
XRay Event [revision 1] at (2023-01-31T11:29:40.527000) with id (1-11a2222-111a222222cb33de3b95daf9) and duration (0.483s) - 0.425s - sam-app/Prod [HTTP: 200] - 0.422s - Lambda [HTTP: 200] - 0.406s - sam-app-HelloWorldFunction-Xyzv11a1bcde [HTTP: 200] - 0.172s - sam-app-HelloWorldFunction-Xyzv11a1bcde - 0.179s - Initialization - 0.112s - Invocation - 0.052s - ## app.lambdaHandler - 0.001s - ### MySubSegment - 0.059s - Overhead -
Ini adalah titik akhir API publik yang dapat diakses melalui internet. Kami menyarankan Anda menghapus titik akhir setelah pengujian.
sam delete
X-Ray tidak melacak semua permintaan ke aplikasi Anda. X-Ray menerapkan algoritma sampling untuk memastikan bahwa pelacakan efisien, sambil tetap memberikan sampel yang representatif dari semua permintaan. Tingkat pengambilan sampel adalah 1 permintaan per detik dan 5 persen dari permintaan tambahan. Anda tidak dapat mengonfigurasi la X-Ray ju pengambilan sampel untuk fungsi Anda.
Menggunakan Powertools untuk AWS Lambda (TypeScript) dan AWS CDK untuk menelusuri
Ikuti langkah-langkah di bawah ini untuk mengunduh, membangun, dan menerapkan contoh TypeScript aplikasi Hello World dengan modul Powertools for AWS Lambda (TypeScript) terintegrasi menggunakan. AWS CDK Aplikasi ini mengimplementasikan backend API dasar dan menggunakan Powertools untuk memancarkan log, metrik, dan jejak. Ini terdiri dari titik akhir Amazon API Gateway dan fungsi Lambda. Saat Anda mengirim permintaan GET ke titik akhir API Gateway, fungsi Lambda memanggil, mengirimkan log dan metrik menggunakan Format Metrik Tertanam ke CloudWatch, dan mengirimkan jejak ke. AWS X-Ray Fungsi mengembalikan hello world pesan.
Prasyarat
Untuk menyelesaikan langkah-langkah di bagian ini, Anda harus memiliki hal-hal berikut:
-
Node.js
-
AWS SAM CLI versi 1.75 atau yang lebih baru. Jika Anda memiliki versi C AWS SAM LI yang lebih lama, lihat Meng upgrade AWS SAM CLI.
Menyebarkan sampel AWS Cloud Development Kit (AWS CDK) application
-
Buat direktori proyek untuk aplikasi baru Anda.
mkdir hello-world cd hello-world -
Inisialisasi aplikasi.
cdk init app --language typescript -
Tambahkan paket
@ types/aws -lambda sebagai ketergantungan pengembangan. npm install -D @types/aws-lambda -
Instal utilitas Powertools Tracer.
npm install @aws-lambda-powertools/tracer -
Buka direktori lib. Anda akan melihat file bernama hello- world-stack.ts. Buat dua file baru di direktori ini: hello-world.function.ts dan hello-world.ts.
-
Buka hello-world.function.ts dan tambahkan kode berikut ke file. Ini adalah kode untuk fungsi Lambda.
import { APIGatewayEvent, APIGatewayProxyResult, Context } from 'aws-lambda'; import { Tracer } from '@aws-lambda-powertools/tracer'; const tracer = new Tracer(); export const handler = async (event: APIGatewayEvent, context: Context): Promise<APIGatewayProxyResult> => { // Get facade segment created by Lambda const segment = tracer.getSegment(); // Create subsegment for the function and set it as active const handlerSegment = segment.addNewSubsegment(`## ${process.env._HANDLER}`); tracer.setSegment(handlerSegment); // Annotate the subsegment with the cold start and serviceName tracer.annotateColdStart(); tracer.addServiceNameAnnotation(); // Add annotation for the awsRequestId tracer.putAnnotation('awsRequestId', context.awsRequestId); // Create another subsegment and set it as active const subsegment = handlerSegment.addNewSubsegment('### MySubSegment'); tracer.setSegment(subsegment); let response: APIGatewayProxyResult = { statusCode: 200, body: JSON.stringify({ message: 'hello world', }), }; // Close subsegments (the Lambda one is closed automatically) subsegment.close(); // (### MySubSegment) handlerSegment.close(); // (## index.handler) // Set the facade segment as active again (the one created by Lambda) tracer.setSegment(segment); return response; }; -
Buka hello-world.ts dan tambahkan kode berikut ke file. Ini berisi NodejsFunction konstruk, yang membuat fungsi Lambda, mengonfigurasi variabel lingkungan untuk Powertools, dan menetapkan retensi log ke satu minggu. Ini juga termasuk LambdaRestApi konstruk, yang menciptakan REST API.
import { Construct } from 'constructs'; import { NodejsFunction } from 'aws-cdk-lib/aws-lambda-nodejs'; import { LambdaRestApi } from 'aws-cdk-lib/aws-apigateway'; import { CfnOutput } from 'aws-cdk-lib'; import { Tracing } from 'aws-cdk-lib/aws-lambda'; export class HelloWorld extends Construct { constructor(scope: Construct, id: string) { super(scope, id); const helloFunction = new NodejsFunction(this, 'function', { environment: { POWERTOOLS_SERVICE_NAME: 'helloWorld', }, tracing: Tracing.ACTIVE, }); const api = new LambdaRestApi(this, 'apigw', { handler: helloFunction, }); new CfnOutput(this, 'apiUrl', { exportName: 'apiUrl', value: api.url, }); } } -
Buka hello- world-stack.ts. Ini adalah kode yang mendefinisikan AWS CDK tumpukan Anda. Ganti kode dengan yang berikut:
import { Stack, StackProps } from 'aws-cdk-lib'; import { Construct } from 'constructs'; import { HelloWorld } from './hello-world'; export class HelloWorldStack extends Stack { constructor(scope: Construct, id: string, props?: StackProps) { super(scope, id, props); new HelloWorld(this, 'hello-world'); } } -
Men-deploy aplikasi Anda.
cd .. cdk deploy -
Dapatkan URL aplikasi yang digunakan:
aws cloudformation describe-stacks --stack-name HelloWorldStack --query 'Stacks[0].Outputs[?ExportName==`apiUrl`].OutputValue' --output text -
Memanggil titik akhir API:
curl<URL_FROM_PREVIOUS_STEP>Jika berhasil, Anda akan melihat respons ini:
{"message":"hello world"} -
Untuk mendapatkan jejak fungsi, jalankan sam tracing.
sam tracesOutput jejak terlihat seperti ini:
XRay Event [revision 1] at (2023-01-31T11:50:06.997000) with id (1-11a2222-111a222222cb33de3b95daf9) and duration (0.449s) - 0.350s - HelloWorldStack-helloworldfunction111A2BCD-Xyzv11a1bcde [HTTP: 200] - 0.157s - HelloWorldStack-helloworldfunction111A2BCD-Xyzv11a1bcde - 0.169s - Initialization - 0.058s - Invocation - 0.055s - ## index.handler - 0.000s - ### MySubSegment - 0.099s - Overhead -
Ini adalah titik akhir API publik yang dapat diakses melalui internet. Kami menyarankan Anda menghapus titik akhir setelah pengujian.
cdk destroy
Menafsirkan X-Ray jejak
Setelah mengonfigurasi pelacakan aktif, Anda dapat mengamati permintaan tertentu melalui aplikasi Anda. Peta X-Ray jejak memberikan informasi tentang aplikasi Anda dan semua komponennya. Contoh berikut menunjukkan jejak dari aplikasi sampel: