Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
TypeScript Code nachverfolgen in AWS Lambda
Lambda lässt sich integrieren AWS X-Ray , um Ihnen zu helfen, Lambda-Anwendungen zu verfolgen, zu debuggen und zu optimieren. Sie können es verwenden X-Ray, um eine Anfrage zu verfolgen, während sie Ressourcen in Ihrer Anwendung durchquert, zu denen Lambda-Funktionen und andere AWS Dienste gehören können.
Um Ablaufverfolgungsdaten an zu senden X-Ray, können Sie eine von drei SDK-Bibliotheken verwenden:
-
AWS Distribution for OpenTelemetry (ADOT)
— Eine sichere, produktionsbereite und AWS unterstützte Distribution des (OTel) SDK. OpenTelemetry -
AWS X-Ray SDK für Node.js — Ein SDK zum Generieren und Senden von Trace-Daten an. X-Ray
-
Powertools for AWS Lambda (TypeScript) — Ein Entwickler-Toolkit zur Implementierung von Best Practices für Serverless und zur Steigerung der Entwicklergeschwindigkeit.
Jedes der SDKs bietet Möglichkeiten, Ihre Telemetriedaten an den Dienst zu senden. X-Ray Anschließend können Sie X-Ray die Leistungskennzahlen Ihrer Anwendung anzeigen, filtern und Einblicke in sie gewinnen, um Probleme und Optimierungsmöglichkeiten zu identifizieren.
Wichtig
Die SDKs X-Ray und Powertools für AWS Lambda SDKs sind Teil einer eng integrierten Instrumentierungslösung, die von angeboten wird. AWS Die ADOT Lambda Layers sind Teil eines branchenweiten Standards für die Verfolgung von Instrumenten, die im Allgemeinen mehr Daten erfassen, aber möglicherweise nicht für alle Anwendungsfälle geeignet sind. Sie können mit beiden Lösungen eine durchgängige Ablaufverfolgung implementieren. X-Ray Weitere Informationen zur Auswahl zwischen beiden finden Sie unter Auswahl zwischen der AWS Distribution for Open Telemetry und SDKs. X-Ray
Sections
Verwenden von Powertools für AWS Lambda (TypeScript) und AWS SAM zur Rückverfolgung
Gehen Sie wie folgt vor, um eine Hello TypeScript World-Beispielanwendung mit integrierten Powertools for AWS Lambda (TypeScript)hello world-Nachricht zurück.
Voraussetzungen
Zur Durchführung der Schritte in diesem Abschnitt benötigen Sie Folgendes:
-
Node.js
-
AWS SAM CLI Version 1.75 oder höher. Wenn Sie eine ältere Version der AWS SAM CLI haben, finden Sie weitere Informationen unter Upgrade der AWS SAM CLI.
Stellen Sie ein Beispiel bereit AWS SAM Anwendung
-
Initialisieren Sie die Anwendung mithilfe der Hello TypeScript World-Vorlage.
sam init --app-template hello-world-powertools-typescript --name sam-app --package-type Zip --runtime nodejs24.x --no-tracing -
Entwickeln Sie die App.
cd sam-app && sam build -
Stellen Sie die Anwendung bereit.
sam deploy --guided -
Folgen Sie den Anweisungen auf dem Bildschirm. Um die im interaktiven Erlebnis bereitgestellten Standardoptionen zu akzeptieren, drücken Sie
Enter.Anmerkung
Für ist HelloWorldFunction möglicherweise keine Autorisierung definiert. Ist das in Ordnung? , stellen Sie sicher, dass Sie eintreten
y. -
Rufen Sie die URL der bereitgestellten Anwendung ab:
aws cloudformation describe-stacks --stack-name sam-app --query 'Stacks[0].Outputs[?OutputKey==`HelloWorldApi`].OutputValue' --output text -
Rufen Sie den API-Endpunkt auf:
curl<URL_FROM_PREVIOUS_STEP>Wenn der Link erfolgreich ausgeführt wurde, sehen Sie die folgende Antwort:
{"message":"hello world"} -
Führen Sie sam traces aus, um die Traces für die Funktion zu erhalten.
sam tracesDas Nachverfolgungsergebnis sieht folgendermaßen aus:
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 -
Dies ist ein öffentlicher API-Endpunkt, der über das Internet zugänglich ist. Es wird empfohlen, dass Sie den Endpunkt nach dem Testen löschen.
sam delete
X-Ray verfolgt nicht alle Anfragen bis zu Ihrer Anwendung. X-Ray wendet einen Stichprobenalgorithmus an, um sicherzustellen, dass die Rückverfolgung effizient ist und gleichzeitig eine repräsentative Stichprobe aller Anfragen bereitgestellt wird. Die Samplingrate beträgt 1 Anforderung pro Sekunde und 5 Prozent aller weiteren Anforderungen. Sie können die X-Ray Samplingrate für Ihre Funktionen nicht konfigurieren.
Verwenden Sie Powertools für AWS Lambda (TypeScript) und die AWS CDK zur Rückverfolgung
Gehen Sie wie folgt vor, um eine Hello TypeScript World-Beispielanwendung mit integrierten Powertools for AWS Lambda (TypeScript)hello world-Nachricht zurück.
Voraussetzungen
Zur Durchführung der Schritte in diesem Abschnitt benötigen Sie Folgendes:
-
Node.js
-
AWS SAM CLI Version 1.75 oder höher. Wenn Sie eine ältere Version der AWS SAM CLI haben, finden Sie weitere Informationen unter Upgrade der AWS SAM CLI.
Stellen Sie ein Beispiel bereit AWS Cloud Development Kit (AWS CDK) Anwendung
-
Erstellen Sie ein Projektverzeichnis für Ihre neue Anwendung.
mkdir hello-world cd hello-world -
Initialisieren Sie die App.
cdk init app --language typescript -
Fügen Sie das @ types/aws -Lambda-Paket
als Entwicklungsabhängigkeit hinzu. npm install -D @types/aws-lambda -
Installieren Sie das Tracer-Dienstprogramm von Powertools.
npm install @aws-lambda-powertools/tracer -
Öffnen Sie das lib-Verzeichnis. Sie sollten eine Datei mit dem Namen hello-world-stack.ts sehen. Erstellen Sie neue zwei neue Dateien in diesem Verzeichnis: hello-world.function.ts und hello-world.ts.
-
Öffnen Sie hello-world.function.ts und fügen Sie den folgenden Code in die Datei ein. Dies ist der Code für die Lambda-Funktion.
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; }; -
Öffnen Sie hello-world.ts und fügen Sie den folgenden Code in die Datei ein. Dies enthält das NodejsFunction Konstrukt, das die Lambda-Funktion erstellt, Umgebungsvariablen für Powertools konfiguriert und die Protokollspeicherung auf eine Woche festlegt. Es beinhaltet auch das LambdaRestApi Konstrukt, das die REST-API erstellt.
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, }); } } -
Öffnen Sie hello-world-stack.ts. Dies ist der Code, der Ihren AWS CDK -Stack definiert. Ersetzen Sie den Code mit Folgendem:
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'); } } -
Stellen Sie die Anwendung bereit.
cd .. cdk deploy -
Rufen Sie die URL der bereitgestellten Anwendung ab:
aws cloudformation describe-stacks --stack-name HelloWorldStack --query 'Stacks[0].Outputs[?ExportName==`apiUrl`].OutputValue' --output text -
Rufen Sie den API-Endpunkt auf:
curl<URL_FROM_PREVIOUS_STEP>Wenn der Link erfolgreich ausgeführt wurde, sehen Sie die folgende Antwort:
{"message":"hello world"} -
Führen Sie sam traces aus, um die Traces für die Funktion zu erhalten.
sam tracesDas Nachverfolgungsergebnis sieht folgendermaßen aus:
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 -
Dies ist ein öffentlicher API-Endpunkt, der über das Internet zugänglich ist. Es wird empfohlen, dass Sie den Endpunkt nach dem Testen löschen.
cdk destroy
Interpretation einer X-Ray Ablaufverfolgung
Nachdem Sie die aktive Nachverfolgung konfiguriert haben, können Sie bestimmte Anfragen über Ihre Anwendung beobachten. Die X-Ray Trace-Map enthält Informationen über Ihre Anwendung und all ihre Komponenten. Das folgende Beispiel zeigt eine Nachverfolgung aus der Beispielanwendung: