View a markdown version of this page

TypeScript Code nachverfolgen in AWS Lambda - AWS Lambda

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:

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

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) -Modulen herunterzuladen, zu erstellen und bereitzustellen. Verwenden Sie dazu den. AWS SAM Diese Anwendung implementiert ein grundlegendes API-Backend und verwendet Powertools zum Ausgeben von Protokollen, Metriken und Traces. Es besteht aus einem Amazon-API-Gateway-Endpunkt und einer Lambda-Funktion. Wenn Sie eine GET-Anfrage an den API-Gateway-Endpunkt senden, ruft die Lambda-Funktion Logs und Metriken auf, sendet sie im Embedded Metric Format an CloudWatch und sendet Traces an. AWS X-Ray Die Funktion gibt eine hello world-Nachricht zurück.

Voraussetzungen

Zur Durchführung der Schritte in diesem Abschnitt benötigen Sie Folgendes:

Stellen Sie ein Beispiel bereit AWS SAM Anwendung
  1. 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
  2. Entwickeln Sie die App.

    cd sam-app && sam build
  3. Stellen Sie die Anwendung bereit.

    sam deploy --guided
  4. 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 eintreteny.

  5. 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
  6. 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"}
  7. Führen Sie sam traces aus, um die Traces für die Funktion zu erhalten.

    sam traces

    Das 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
  8. 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) -Modulen herunterzuladen, zu erstellen und bereitzustellen. Verwenden Sie dazu den. AWS CDK Diese Anwendung implementiert ein grundlegendes API-Backend und verwendet Powertools zum Ausgeben von Protokollen, Metriken und Traces. Es besteht aus einem Amazon-API-Gateway-Endpunkt und einer Lambda-Funktion. Wenn Sie eine GET-Anfrage an den API-Gateway-Endpunkt senden, ruft die Lambda-Funktion Logs und Metriken auf, sendet sie im Embedded Metric Format an CloudWatch und sendet Traces an. AWS X-Ray Die Funktion gibt eine hello world-Nachricht zurück.

Voraussetzungen

Zur Durchführung der Schritte in diesem Abschnitt benötigen Sie Folgendes:

Stellen Sie ein Beispiel bereit AWS Cloud Development Kit (AWS CDK) Anwendung
  1. Erstellen Sie ein Projektverzeichnis für Ihre neue Anwendung.

    mkdir hello-world cd hello-world
  2. Initialisieren Sie die App.

    cdk init app --language typescript
  3. Fügen Sie das @ types/aws -Lambda-Paket als Entwicklungsabhängigkeit hinzu.

    npm install -D @types/aws-lambda
  4. Installieren Sie das Tracer-Dienstprogramm von Powertools.

    npm install @aws-lambda-powertools/tracer
  5. Ö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.

  6. Ö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; };
  7. Ö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, }); } }
  8. Ö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'); } }
  9. Stellen Sie die Anwendung bereit.

    cd .. cdk deploy
  10. Rufen Sie die URL der bereitgestellten Anwendung ab:

    aws cloudformation describe-stacks --stack-name HelloWorldStack --query 'Stacks[0].Outputs[?ExportName==`apiUrl`].OutputValue' --output text
  11. 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"}
  12. Führen Sie sam traces aus, um die Traces für die Funktion zu erhalten.

    sam traces

    Das 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
  13. 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:

Die X-Ray Service Map für die Beispielanwendung