Ihre Anwendungen auf Lambda aktivieren - Amazon CloudWatch

Ihre Anwendungen auf Lambda aktivieren

Sie können Application Signals für Ihre Lambda-Funktionen aktivieren. Application Signals instrumentiert Ihre Lambda-Funktionen automatisch mithilfe erweiterter AWS Distro for OpenTelemetry (ADOT)-Bibliotheken, die über eine Lambda-Schicht bereitgestellt werden. Dieser AWS-Lambda-Schicht für OpenTelemetry bündelt und stellt die Bibliotheken bereit, die für die automatische Instrumentierung von Application Signals erforderlich sind.

Diese Lambda-Schicht unterstützt nicht nur Application Signals, sondern ist auch Bestandteil der Lambda-OpenTelemetry-Unterstützung und bietet Nachverfolgungsfunktionen.

Sie können die Lambda-Beobachtbarkeit auch verbessern, indem Sie die Transaktionssuche verwenden, die die Erfassung von Ablaufverfolgungs-Spans für den Lambda-Funktionsaufruf ohne Sampling ermöglicht. Mit diesem Feature können Sie Spans für Ihre Funktionen erfassen, unabhängig vom sampled-Flag bei der Übertragung des Ablaufverfolgungskontexts. Dadurch wird sichergestellt, dass keine zusätzlichen Auswirkungen auf nachgelagerte abhängige Services entstehen. Durch die Aktivierung der Transaktionssuche auf Lambda erhalten Sie einen vollständigen Überblick über die Leistung Ihrer Funktionen und können selten auftretende Probleme beheben. Um zu beginnen, siehe Transaktionssuche

Erste Schritte

Es gibt drei Methoden, Application Signals für Ihre Lambda-Funktionen zu aktivieren.

Nachdem Sie Application Signals für eine Lambda-Funktion aktiviert haben, dauert es einige Minuten, bis die Telemetrie dieser Funktion in der Application-Signals-Konsole angezeigt wird.

  • Die CloudWatch-Application-Signals-Konsole verwenden

  • Die Lambda-Konsole verwenden

  • Fügen Sie die AWS-Lambda-Schicht für OpenTelemetry manuell zu Ihrer Lambda-Funktionslaufzeit hinzu.

Jede dieser Methoden fügt Ihrer Funktion die AWS-Lambda-Schicht für OpenTelemetry hinzu.

Die CloudWatch-Application-Signals-Konsole verwenden

Gehen Sie wie folgt vor, um mit der Application-Signals-Konsole Application Signals für eine Lambda-Funktion zu aktivieren.

  1. Öffnen Sie die CloudWatch-Konsole unter https://console.aws.amazon.com/cloudwatch/.

  2. Wählen Sie im Navigationsbereich Application Signals, Services.

  3. Wählen Sie im Listenbereich Services die Option Application Signals aktivieren aus.

  4. Wählen Sie die Kachel Lambda aus.

  5. Wählen Sie jede Funktion aus, die Sie für Application Signals aktivieren möchten, und klicken Sie dann auf Fertig.

Die Lambda-Konsole verwenden

Gehen Sie wie folgt vor, um mit der Lambda-Konsole Application Signals für eine Lambda-Funktion zu aktivieren.

  1. Öffnen Sie die AWS Lambda-Konsole unter https://console.aws.amazon.com/lambda/.

  2. Wählen Sie im Navigationsbereich Funktionen aus und wählen Sie dann den Namen der Funktion aus, die Sie aktivieren möchten.

  3. Wählen Sie Konfiguration und dann Überwachungs- und Produktionstools.

  4. Wählen Sie Bearbeiten aus.

  5. Wählen Sie im Abschnitt CloudWatch Application Signals und X-Ray sowohl Anwendungs-Ablaufverfolgungen als auch Standardanwendungsmetriken mit Application Signals automatisch erfassen und Lambda-Serviceablaufverfolgungen für durchgängige Transparenz mit X-Ray aus.

  6. Wählen Sie Speichern.

Aktivieren Sie Application Signals auf Lambda mit AWS CDK

Wenn Sie Application Signals in diesem Konto noch nicht aktiviert haben, müssen Sie Application Signals die Berechtigungen gewähren, die es benötigt, um Ihre Services zu erkennen. Weitere Informationen finden Sie unter Application Signals in Ihrem Konto aktivieren.

  1. Aktivieren Sie Application Signals für Ihre Anwendungen

    import { aws_applicationsignals as applicationsignals } from 'aws-cdk-lib'; const cfnDiscovery = new applicationsignals.CfnDiscovery(this, 'ApplicationSignalsServiceRole', { } );

    Die Discovery-CloudFormation-Ressource gewährt Application Signals die folgenden Berechtigungen:

    • xray:GetServiceGraph

    • logs:StartQuery

    • logs:GetQueryResults

    • cloudwatch:GetMetricData

    • cloudwatch:ListMetrics

    • tag:GetResources

    Weitere Informationen über diese Rolle finden Sie unter Serviceverknüpfte Rollenberechtigungen für CloudWatch Application Signals.

  2. Die IAM-Richtlinie CloudWatchLambdaApplicationSignalsExecutionRolePolicy zur Lambda-Funktion hinzufügen.

    const fn = new Function(this, 'DemoFunction', { code: Code.fromAsset('$YOUR_LAMBDA.zip'), runtime: Runtime.PYTHON_3_12, handler: '$YOUR_HANDLER' }) fn.role?.addManagedPolicy(ManagedPolicy.fromAwsManagedPolicyName('CloudWatchLambdaApplicationSignalsExecutionRolePolicy'));
  3. Ersetzen Sie $AWS_LAMBDA_LAYER_FOR_OTEL_ARN durch den tatsächlichen AWS-Lambda-Layer für OpenTelemetry ARN in der entsprechenden Region.

    fn.addLayers(LayerVersion.fromLayerVersionArn( this, 'AwsLambdaLayerForOtel', '$AWS_LAMBDA_LAYER_FOR_OTEL_ARN' )) fn.addEnvironment("AWS_LAMBDA_EXEC_WRAPPER", "/opt/otel-instrument");

(Optional) Überwachen Sie den Zustand Ihrer Anwendung

Sobald Sie Ihre Anwendungen auf Lambda aktiviert haben, können Sie den Zustand Ihrer Anwendung überwachen. Weitere Informationen finden Sie unter Den Betriebsstatus Ihrer Anwendungen mit Application Signals überwachen.

Application Signals manuell aktivieren.

Verwenden Sie diese Schritte, um Application Signals für eine Lambda-Funktion manuell zu aktivieren.

  1. Fügen Sie den AWS-Lambda-Layer für OpenTelemetry zu Ihrer Lambda-Laufzeit hinzu. Informationen zum Suchen des Layer-ARN finden Sie unter AWS-Lambda-Schicht für OpenTelemetry-ARNs.

  2. Fügen Sie die Umgebungsvariable AWS_LAMBDA_EXEC_WRAPPER=/opt/otel-instrument hinzu

    Fügen Sie die Umgebungsvariable LAMBDA_APPLICATION_SIGNALS_REMOTE_ENVIRONMENT hinzu, um benutzerdefinierte Lambda-Umgebungen zu konfigurieren. Standardmäßig sind Lambda-Umgebungen für lambda:default konfiguriert.

  3. Hängen Sie die AWS-verwaltete IAM-Richtlinie CloudWatchLambdaApplicationSignalsExecutionRolePolicy an die Lambda-Ausführungsrolle an.

  4. (Optional) Wir empfehlen, für ein besseres Ablaufverfolgungserlebnis die aktive Lambda-Ablaufverfolgung zu aktivieren. Weitere Informationen finden Sie unter Visualisieren von Lambda-Funktionsaufrufen mit AWS X-Ray.

Application Signals manuell deaktivieren

Um Application Signals für eine Lambda-Funktion manuell zu deaktivieren, entfernen Sie die AWS-Lambda-Schicht für OpenTelemetry aus Ihrer Lambda-Laufzeit und entfernen Sie die Umgebungsvariable AWS_LAMBDA_EXEC_WRAPPER=/opt/otel-instrument.

Konfigurieren von Application Signals

In diesem Abschnitt können Sie Application Signals in Lambda konfigurieren.

Gruppierung mehrerer Lambda-Funktionen in einem Service

Die Umgebungsvariable OTEL_SERVICE_NAME legt den Namen des Services fest. Dies wird in den Dashboards von Application Signals als Servicename der Anwendung angezeigt. Sie können mehreren Lambda-Funktionen denselben Servicenamen zuweisen, und sie werden in Application Signals zu einem einzigen Service zusammengeführt. Wenn Sie keinen Wert für diesen Schlüssel angeben, wird der Standardname der Lambda-Funktion verwendet.

Sampling

Standardmäßig basiert die Ablaufverfolgungs-Sampling-Strategie auf der übergeordneten Komponente. Sie können die Sampling-Strategie anpassen, indem Sie Umgebungsvariablen OTEL_TRACES_SAMPLER festlegen.

Legen Sie beispielsweise die Rate für das Ablaufverfolgungssampling auf 30 % fest.

OTEL_TRACES_SAMPLER=traceidratio OTEL_TRACES_SAMPLER_ARG=0.3

Weitere Informationen finden Sie unter Umgebungsvariablen-Spezifikation für OpenTelemetry.

Aktivierung aller Bibliotheksinstrumentierungen

Um Lambda-Kaltstarts zu reduzieren, sind standardmäßig nur AWS-SDK- und HTTP-Instrumentierungen für Python, Node und Java aktiviert. Sie können Umgebungsvariablen festlegen, um die Instrumentierung für andere Bibliotheken zu aktivieren, die in Ihrer Lambda-Funktion verwendet werden.

  • Python – OTEL_PYTHON_DISABLED_INSTRUMENTATIONS=none

  • Knoten – OTEL_NODE_DISABLED_INSTRUMENTATIONS=none

  • Java – OTEL_INSTRUMENTATION_COMMON_DEFAULT_ENABLED=true

AWS-Lambda-Schicht für OpenTelemetry-ARNs

In den folgenden Tabellen sind die ARNs für die Verwendung der AWS-Lambda-Schicht für OpenTelemetry für jede Region aufgeführt, in der sie unterstützt wird.

Python
Region ARN

USA Ost (Nord-Virginia)

arn:aws:lambda:us-east-1:615299751070:layer:AWSOpenTelemetryDistroPython:18

USA Ost (Ohio)

arn:aws:lambda:us-east-2:615299751070:layer:AWSOpenTelemetryDistroPython:15

USA West (Nordkalifornien)

arn:aws:lambda:us-west-1:615299751070:layer:AWSOpenTelemetryDistroPython:22

USA West (Oregon)

arn:aws:lambda:us-west-2:615299751070:layer:AWSOpenTelemetryDistroPython:22

Africa (Cape Town)

arn:aws:lambda:af-south-1:904233096616:layer:AWSOpenTelemetryDistroPython:12

Asien-Pazifik (Hongkong)

arn:aws:lambda:ap-east-1:888577020596:layer:AWSOpenTelemetryDistroPython:12

Asien-Pazifik (Hyderabad)

arn:aws:lambda:ap-south-2:796973505492:layer:AWSOpenTelemetryDistroPython:12

Asien-Pazifik (Jakarta)

arn:aws:lambda:ap-southeast-3:039612877180:layer:AWSOpenTelemetryDistroPython:12

Asien-Pazifik (Melbourne)

arn:aws:lambda:ap-southeast-4:713881805771:layer:AWSOpenTelemetryDistroPython:12

Asien-Pazifik (Malaysia)

arn:aws:lambda:ap-southeast-5:152034782359:layer:AWSOpenTelemetryDistroPython:3

Asien-Pazifik (Thailand)

arn:aws:lambda:ap-southeast-7:980416031188:layer:AWSOpenTelemetryDistroPython:3

Asien-Pazifik (Mumbai)

arn:aws:lambda:ap-south-1:615299751070:layer:AWSOpenTelemetryDistroPython:15

Asien-Pazifik (Osaka)

arn:aws:lambda:ap-northeast-3:615299751070:layer:AWSOpenTelemetryDistroPython:14

Asien-Pazifik (Seoul)

arn:aws:lambda:ap-northeast-2:615299751070:layer:AWSOpenTelemetryDistroPython:15

Asien-Pazifik (Singapur)

arn:aws:lambda:ap-southeast-1:615299751070:layer:AWSOpenTelemetryDistroPython:14

Asien-Pazifik (Sydney)

arn:aws:lambda:ap-southeast-2:615299751070:layer:AWSOpenTelemetryDistroPython:15

Asien-Pazifik (Tokio)

arn:aws:lambda:ap-northeast-1:615299751070:layer:AWSOpenTelemetryDistroPython:15

Canada (Central)

arn:aws:lambda:ca-central-1:615299751070:layer:AWSOpenTelemetryDistroPython:15

Kanada West (Calgary)

arn:aws:lambda:ca-west-1:595944127152:layer:AWSOpenTelemetryDistroPython:3

Europe (Frankfurt)

arn:aws:lambda:eu-central-1:615299751070:layer:AWSOpenTelemetryDistroPython:15

Europa (Irland)

arn:aws:lambda:eu-west-1:615299751070:layer:AWSOpenTelemetryDistroPython:15

Europa (London)

arn:aws:lambda:eu-west-2:615299751070:layer:AWSOpenTelemetryDistroPython:15

Europa (Milan)

arn:aws:lambda:eu-south-1:257394471194:layer:AWSOpenTelemetryDistroPython:12

Europa (Paris)

arn:aws:lambda:eu-west-3:615299751070:layer:AWSOpenTelemetryDistroPython:15

Europa (Spain)

arn:aws:lambda:eu-south-2:490004653786:layer:AWSOpenTelemetryDistroPython:12

Europa (Stockholm)

arn:aws:lambda:eu-north-1:615299751070:layer:AWSOpenTelemetryDistroPython:15

Europa (Zürich)

arn:aws:lambda:eu-central-2:156041407956:layer:AWSOpenTelemetryDistroPython:12

Israel (Tel Aviv)

arn:aws:lambda:il-central-1:746669239226:layer:AWSOpenTelemetryDistroPython:12

Naher Osten (Bahrain)

arn:aws:lambda:me-south-1:980921751758:layer:AWSOpenTelemetryDistroPython:12

Naher Osten (VAE)

arn:aws:lambda:me-central-1:739275441131:layer:AWSOpenTelemetryDistroPython:12

Südamerika (São Paulo)

arn:aws:lambda:sa-east-1:615299751070:layer:AWSOpenTelemetryDistroPython:15

Mexiko (Zentral)

arn:aws:lambda:mx-central-1:610118373846:layer:AWSOpenTelemetryDistroPython:3

Node.js
Region ARN

USA Ost (Nord-Virginia)

arn:aws:lambda:us-east-1:615299751070:layer:AWSOpenTelemetryDistroJs:9

USA Ost (Ohio)

arn:aws:lambda:us-east-2:615299751070:layer:AWSOpenTelemetryDistroJs:9

USA West (Nordkalifornien)

arn:aws:lambda:us-west-1:615299751070:layer:AWSOpenTelemetryDistroJs:9

USA West (Oregon)

arn:aws:lambda:us-west-2:615299751070:layer:AWSOpenTelemetryDistroJs:9

Africa (Cape Town)

arn:aws:lambda:af-south-1:904233096616:layer:AWSOpenTelemetryDistroJs:9

Asien-Pazifik (Hongkong)

arn:aws:lambda:ap-east-1:888577020596:layer:AWSOpenTelemetryDistroJs:9

Asien-Pazifik (Hyderabad)

arn:aws:lambda:ap-south-2:796973505492:layer:AWSOpenTelemetryDistroJs:9

Asien-Pazifik (Jakarta)

arn:aws:lambda:ap-southeast-3:039612877180:layer:AWSOpenTelemetryDistroJs:9

Asien-Pazifik (Melbourne)

arn:aws:lambda:ap-southeast-4:713881805771:layer:AWSOpenTelemetryDistroJs:9

Asien-Pazifik (Malaysia)

arn:aws:lambda:ap-southeast-5:152034782359:layer:AWSOpenTelemetryDistroJs:2

Asien-Pazifik (Thailand)

arn:aws:lambda:ap-southeast-7:980416031188:layer:AWSOpenTelemetryDistroJs:2

Asien-Pazifik (Mumbai)

arn:aws:lambda:ap-south-1:615299751070:layer:AWSOpenTelemetryDistroJs:9

Asien-Pazifik (Osaka)

arn:aws:lambda:ap-northeast-3:615299751070:layer:AWSOpenTelemetryDistroJs:9

Asien-Pazifik (Seoul)

arn:aws:lambda:ap-northeast-2:615299751070:layer:AWSOpenTelemetryDistroJs:9

Asien-Pazifik (Singapur)

arn:aws:lambda:ap-southeast-1:615299751070:layer:AWSOpenTelemetryDistroJs:9

Asien-Pazifik (Sydney)

arn:aws:lambda:ap-southeast-2:615299751070:layer:AWSOpenTelemetryDistroJs:9

Asien-Pazifik (Tokio)

arn:aws:lambda:ap-northeast-1:615299751070:layer:AWSOpenTelemetryDistroJs:9

Canada (Central)

arn:aws:lambda:ca-central-1:615299751070:layer:AWSOpenTelemetryDistroJs:9

Kanada West (Calgary)

arn:aws:lambda:ca-west-1:595944127152:layer:AWSOpenTelemetryDistroJs:2

Europe (Frankfurt)

arn:aws:lambda:eu-central-1:615299751070:layer:AWSOpenTelemetryDistroJs:9

Europa (Irland)

arn:aws:lambda:eu-west-1:615299751070:layer:AWSOpenTelemetryDistroJs:9

Europa (London)

arn:aws:lambda:eu-west-2:615299751070:layer:AWSOpenTelemetryDistroJs:9

Europa (Milan)

arn:aws:lambda:eu-south-1:257394471194:layer:AWSOpenTelemetryDistroJs:9

Europa (Paris)

arn:aws:lambda:eu-west-3:615299751070:layer:AWSOpenTelemetryDistroJs:9

Europa (Spain)

arn:aws:lambda:eu-south-2:490004653786:layer:AWSOpenTelemetryDistroJs:9

Europa (Stockholm)

arn:aws:lambda:eu-north-1:615299751070:layer:AWSOpenTelemetryDistroJs:9

Europa (Zürich)

arn:aws:lambda:eu-central-2:156041407956:layer:AWSOpenTelemetryDistroJs:9

Israel (Tel Aviv)

arn:aws:lambda:il-central-1:746669239226:layer:AWSOpenTelemetryDistroJs:9

Naher Osten (Bahrain)

arn:aws:lambda:me-south-1:980921751758:layer:AWSOpenTelemetryDistroJs:9

Naher Osten (VAE)

arn:aws:lambda:me-central-1:739275441131:layer:AWSOpenTelemetryDistroJs:9

Südamerika (São Paulo)

arn:aws:lambda:sa-east-1:615299751070:layer:AWSOpenTelemetryDistroJs:9

Mexiko (Zentral)

arn:aws:lambda:mx-central-1:610118373846:layer:AWSOpenTelemetryDistroJs:2

.Net
Region ARN

USA Ost (Nord-Virginia)

arn:aws:lambda:us-east-1:615299751070:layer:AWSOpenTelemetryDistroDotNet:6

USA Ost (Ohio)

arn:aws:lambda:us-east-2:615299751070:layer:AWSOpenTelemetryDistroDotNet:5

USA West (Nordkalifornien)

arn:aws:lambda:us-west-1:615299751070:layer:AWSOpenTelemetryDistroDotNet:5

USA West (Oregon)

arn:aws:lambda:us-west-2:615299751070:layer:AWSOpenTelemetryDistroDotNet:5

Africa (Cape Town)

arn:aws:lambda:af-south-1:904233096616:layer:AWSOpenTelemetryDistroDotNet:5

Asien-Pazifik (Hongkong)

arn:aws:lambda:ap-east-1:888577020596:layer:AWSOpenTelemetryDistroDotNet:5

Asien-Pazifik (Hyderabad)

arn:aws:lambda:ap-south-2:796973505492:layer:AWSOpenTelemetryDistroDotNet:5

Asien-Pazifik (Jakarta)

arn:aws:lambda:ap-southeast-3:039612877180:layer:AWSOpenTelemetryDistroDotNet:5

Asien-Pazifik (Melbourne)

arn:aws:lambda:ap-southeast-4:713881805771:layer:AWSOpenTelemetryDistroDotNet:5

Asien-Pazifik (Malaysia)

arn:aws:lambda:ap-southeast-5:152034782359:layer:AWSOpenTelemetryDistroDotNet:1

Asien-Pazifik (Thailand)

arn:aws:lambda:ap-southeast-7:980416031188:layer:AWSOpenTelemetryDistroDotNet:1

Asien-Pazifik (Mumbai)

arn:aws:lambda:ap-south-1:615299751070:layer:AWSOpenTelemetryDistroDotNet:5

Asien-Pazifik (Osaka)

arn:aws:lambda:ap-northeast-3:615299751070:layer:AWSOpenTelemetryDistroDotNet:5

Asien-Pazifik (Seoul)

arn:aws:lambda:ap-northeast-2:615299751070:layer:AWSOpenTelemetryDistroDotNet:5

Asien-Pazifik (Singapur)

arn:aws:lambda:ap-southeast-1:615299751070:layer:AWSOpenTelemetryDistroDotNet:5

Asien-Pazifik (Sydney)

arn:aws:lambda:ap-southeast-2:615299751070:layer:AWSOpenTelemetryDistroDotNet:5

Asien-Pazifik (Tokio)

arn:aws:lambda:ap-northeast-1:615299751070:layer:AWSOpenTelemetryDistroDotNet:5

Canada (Central)

arn:aws:lambda:ca-central-1:615299751070:layer:AWSOpenTelemetryDistroDotNet:5

Kanada West (Calgary)

arn:aws:lambda:ca-west-1:595944127152:layer:AWSOpenTelemetryDistroDotNet:1

Europe (Frankfurt)

arn:aws:lambda:eu-central-1:615299751070:layer:AWSOpenTelemetryDistroDotNet:5

Europa (Irland)

arn:aws:lambda:eu-west-1:615299751070:layer:AWSOpenTelemetryDistroDotNet:5

Europa (London)

arn:aws:lambda:eu-west-2:615299751070:layer:AWSOpenTelemetryDistroDotNet:5

Europa (Milan)

arn:aws:lambda:eu-south-1:257394471194:layer:AWSOpenTelemetryDistroDotNet:5

Europa (Paris)

arn:aws:lambda:eu-west-3:615299751070:layer:AWSOpenTelemetryDistroDotNet:5

Europa (Spain)

arn:aws:lambda:eu-south-2:490004653786:layer:AWSOpenTelemetryDistroDotNet:5

Europa (Stockholm)

arn:aws:lambda:eu-north-1:615299751070:layer:AWSOpenTelemetryDistroDotNet:5

Europa (Zürich)

arn:aws:lambda:eu-central-2:156041407956:layer:AWSOpenTelemetryDistroDotNet:5

Israel (Tel Aviv)

arn:aws:lambda:il-central-1:746669239226:layer:AWSOpenTelemetryDistroDotNet:5

Naher Osten (Bahrain)

arn:aws:lambda:me-south-1:980921751758:layer:AWSOpenTelemetryDistroDotNet:5

Naher Osten (VAE)

arn:aws:lambda:me-central-1:739275441131:layer:AWSOpenTelemetryDistroDotNet:5

Südamerika (São Paulo)

arn:aws:lambda:sa-east-1:615299751070:layer:AWSOpenTelemetryDistroDotNet:5

Mexiko (Zentral)

arn:aws:lambda:mx-central-1:610118373846:layer:AWSOpenTelemetryDistroDotNet:1

Java
Region ARN

USA Ost (Nord-Virginia)

arn:aws:lambda:us-east-1:615299751070:layer:AWSOpenTelemetryDistroJava:5

USA Ost (Ohio)

arn:aws:lambda:us-east-2:615299751070:layer:AWSOpenTelemetryDistroJava:5

USA West (Nordkalifornien)

arn:aws:lambda:us-west-1:615299751070:layer:AWSOpenTelemetryDistroJava:5

USA West (Oregon)

arn:aws:lambda:us-west-2:615299751070:layer:AWSOpenTelemetryDistroJava:5

Africa (Cape Town)

arn:aws:lambda:af-south-1:904233096616:layer:AWSOpenTelemetryDistroJava:5

Asien-Pazifik (Hongkong)

arn:aws:lambda:ap-east-1:888577020596:layer:AWSOpenTelemetryDistroJava:5

Asien-Pazifik (Hyderabad)

arn:aws:lambda:ap-south-2:796973505492:layer:AWSOpenTelemetryDistroJava:5

Asien-Pazifik (Jakarta)

arn:aws:lambda:ap-southeast-3:039612877180:layer:AWSOpenTelemetryDistroJava:5

Asien-Pazifik (Melbourne)

arn:aws:lambda:ap-southeast-4:713881805771:layer:AWSOpenTelemetryDistroJava:5

Asien-Pazifik (Malaysia)

arn:aws:lambda:ap-southeast-5:152034782359:layer:AWSOpenTelemetryDistroJava:2

Asien-Pazifik (Thailand)

arn:aws:lambda:ap-southeast-7:980416031188:layer:AWSOpenTelemetryDistroJava:2

Asien-Pazifik (Mumbai)

arn:aws:lambda:ap-south-1:615299751070:layer:AWSOpenTelemetryDistroJava:5

Asien-Pazifik (Osaka)

arn:aws:lambda:ap-northeast-3:615299751070:layer:AWSOpenTelemetryDistroJava:5

Asien-Pazifik (Seoul)

arn:aws:lambda:ap-northeast-2:615299751070:layer:AWSOpenTelemetryDistroJava:5

Asien-Pazifik (Singapur)

arn:aws:lambda:ap-southeast-1:615299751070:layer:AWSOpenTelemetryDistroJava:5

Asien-Pazifik (Sydney)

arn:aws:lambda:ap-southeast-2:615299751070:layer:AWSOpenTelemetryDistroJava:5

Asien-Pazifik (Tokio)

arn:aws:lambda:ap-northeast-1:615299751070:layer:AWSOpenTelemetryDistroJava:5

Canada (Central)

arn:aws:lambda:ca-central-1:615299751070:layer:AWSOpenTelemetryDistroJava:5

Kanada West (Calgary)

arn:aws:lambda:ca-west-1:595944127152:layer:AWSOpenTelemetryDistroJava:2

Europe (Frankfurt)

arn:aws:lambda:eu-central-1:615299751070:layer:AWSOpenTelemetryDistroJava:5

Europa (Irland)

arn:aws:lambda:eu-west-1:615299751070:layer:AWSOpenTelemetryDistroJava:5

Europa (London)

arn:aws:lambda:eu-west-2:615299751070:layer:AWSOpenTelemetryDistroJava:5

Europa (Milan)

arn:aws:lambda:eu-south-1:257394471194:layer:AWSOpenTelemetryDistroJava:5

Europa (Paris)

arn:aws:lambda:eu-west-3:615299751070:layer:AWSOpenTelemetryDistroJava:5

Europa (Spain)

arn:aws:lambda:eu-south-2:490004653786:layer:AWSOpenTelemetryDistroJava:5

Europa (Stockholm)

arn:aws:lambda:eu-north-1:615299751070:layer:AWSOpenTelemetryDistroJava:5

Europa (Zürich)

arn:aws:lambda:eu-central-2:156041407956:layer:AWSOpenTelemetryDistroJava:5

Israel (Tel Aviv)

arn:aws:lambda:il-central-1:746669239226:layer:AWSOpenTelemetryDistroJava:5

Naher Osten (Bahrain)

arn:aws:lambda:me-south-1:980921751758:layer:AWSOpenTelemetryDistroJava:5

Naher Osten (VAE)

arn:aws:lambda:me-central-1:739275441131:layer:AWSOpenTelemetryDistroJava:5

Mexiko (Zentral)

arn:aws:lambda:mx-central-1:610118373846:layer:AWSOpenTelemetryDistroJava:2

Südamerika (São Paulo)

arn:aws:lambda:sa-east-1:615299751070:layer:AWSOpenTelemetryDistroJava:5

Stellen Sie Lambda-Funktionen mithilfe des Amazon-ECR-Containers bereit

Lambda-Funktionen, die als Container-Images bereitgestellt werden, unterstützen Lambda-Schichten nicht auf herkömmliche Weise. Wenn Sie Container-Images verwenden, können Sie keine Schicht anhängen, wie dies bei anderen Lambda-Bereitstellungsmethoden der Fall wäre. Stattdessen müssen Sie den Inhalt der Schicht während des Erstellungsprozesses manuell in Ihr Container-Image integrieren.

Java

Sie können lernen, wie Sie die AWS-Lambda-Schicht für OpenTelemetry in Ihre containerisierte Java-Lambda-Funktion integrieren, das layer.zip-Artefakt herunterladen und in Ihren Java-Lambda-Funktionscontainer integrieren, um die Überwachung von Application Signals zu ermöglichen.

Voraussetzungen

  • AWS CLI mit Ihren Anmeldeinformationen konfiguriert

  • Docker installiert

  • Bei dieser Anleitung wird davon ausgegangen, dass Sie sich auf x86_64-Plattform befinden

  1. Die Projektstruktur einrichten

    Erstellen Sie ein Verzeichnis für Ihre Lambda-Funktion

    mkdir java-appsignals-container-lambda && \ cd java-appsignals-container-lambda

    Erstellen Sie eine Maven-Projektstruktur

    mkdir -p src/main/java/com/example/java/lambda mkdir -p src/main/resources
  2. Docker-Datei erstellen

    Laden Sie die OpenTelemetry-Schicht mit Application-Signals-Unterstützung herunter und integrieren Sie sie direkt in Ihr Lambda-Container-Image. Zu diesem Zweck wird die Dockerfile-Datei erstellt.

    FROM public.ecr.aws/lambda/java:21 # Install utilities RUN dnf install -y unzip wget maven # Download the OpenTelemetry Layer with AppSignals Support RUN wget https://github.com/aws-observability/aws-otel-java-instrumentation/releases/latest/download/layer.zip -O /tmp/layer.zip # Extract and include Lambda layer contents RUN mkdir -p /opt && \ unzip /tmp/layer.zip -d /opt/ && \ chmod -R 755 /opt/ && \ rm /tmp/layer.zip # Copy and build function code COPY pom.xml ${LAMBDA_TASK_ROOT} COPY src ${LAMBDA_TASK_ROOT}/src RUN mvn clean package -DskipTests # Copy the JAR file to the Lambda runtime directory (from inside the container) RUN mkdir -p ${LAMBDA_TASK_ROOT}/lib/ RUN cp ${LAMBDA_TASK_ROOT}/target/function.jar ${LAMBDA_TASK_ROOT}/lib/ # Set the handler CMD ["com.example.java.lambda.App::handleRequest"]
    Anmerkung

    Die layer.zip-Datei enthält die OpenTelemetry-Instrumentierung, die für die Unterstützung von AWS-Application-Signals zur Überwachung Ihrer Lambda-Funktion erforderlich ist.

    Die Schritte zur Schichtextraktion stellen Folgendes sicher:

    • Der Inhalt von layer.zip wird ordnungsgemäß in das /opt/ directory extrahiert

    • Das otel-instrument-Skript erhält die richtigen Ausführungsberechtigungen

    • Die temporäre Datei layer.zip wurde entfernt, um die Bildgröße zu verringern

  3. Lambda-Funktionscode – Erstellen Sie eine Java-Datei für Ihren Lambda-Handler unter src/main/java/com/example/lambda/App.java:

    Ihr Projekt sollte in etwa wie folgt aussehen:

    . ├── Dockerfile ├── pom.xml └── src └── main ├── java │ └── com │ └── example │ └── java │ └── lambda │ └── App.java └── resources
  4. Container-Image erstellen und bereitstellen

    Umgebungsvariablen festlegen

    AWS_ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text) AWS_REGION=$(aws configure get region) # For fish shell users: # set AWS_ACCOUNT_ID (aws sts get-caller-identity --query Account --output text) # set AWS_REGION (aws configure get region)

    Mit ECR authentifizieren

    Zuerst mit öffentlichem ECR (für das Basis-Image):

    aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws

    Dann mit Ihrem privaten ECR:

    aws ecr get-login-password --region $AWS_REGION | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com

    Image erstellen, mit Tags versehen und übertragen

    # Build the Docker image docker build -t lambda-appsignals-demo . # Tag the image docker tag lambda-appsignals-demo:latest $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/lambda-appsignals-demo:latest # Push the image docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/lambda-appsignals-demo:latest
  5. Die Lambda-Funktion erstellen und konfigurieren

    Erstellen Sie eine neue Funktion mit der Lambda-Konsole.

    Wählen Sie Container-Image als Bereitstellungsoption aus.

    Wählen Sie Images durchsuchen, um Ihr Amazon-EC-Image auszuwählen.

  6. Testen und Verifizierungen – Testen Sie Ihr Lambda mit einem einfachen Ereignis. Wenn die Schichtintegration erfolgreich ist, wird Ihr Lambda unter der Application-Signals-Service-Übersicht angezeigt.

    Sie sehen Ablaufverfolgungen und Metriken für Ihre Lambda-Funktion in der CloudWatch-Konsole.

Fehlersuche

Wenn Application Signals nicht funktioniert, überprüfen Sie Folgendes:

  • Überprüfen Sie die Funktionsprotokolle auf Fehler im Zusammenhang mit der OpenTelemetry-Instrumentierung

  • Überprüfen Sie, ob die Umgebungsvariable AWS_LAMBDA_EXEC_WRAPPER richtig festgelegt ist

  • Stellen Sie sicher, dass die Schichtextraktion in der Docker-Datei erfolgreich abgeschlossen wurde

  • Vergewissern Sie sich, dass die IAM-Berechtigungen ordnungsgemäß angehängt sind

  • Erhöhen Sie bei Bedarf die Timeout- und Speichereinstellungen in der allgemeinen Konfiguration der Lambda-Funktion

.Net

Sie können lernen, wie Sie die OpenTelemetry-Schicht mit Application-Signals-Unterstützung in Ihre containerisierte .Net Lambda-Funktion integrieren, das layer.zip-Artefakt herunterladen und es in Ihre .Net Lambda-Funktion integrieren, um die Überwachung von Application Signals zu ermöglichen.

Voraussetzungen

  • AWS CLI mit Ihren Anmeldeinformationen konfiguriert

  • Docker installiert

  • .Net-8-SDK

  • Bei dieser Anleitung wird davon ausgegangen, dass Sie sich auf der x86_64-Plattform befinden

  1. Die Projektstruktur einrichten

    Erstellen Sie ein Verzeichnis für Ihr Lambda-Funktionscontainer-Image

    mkdir dotnet-appsignals-container-lambda && \ cd dotnet-appsignals-container-lambda
  2. Docker-Datei erstellen

    Laden Sie die OpenTelemetry-Schicht mit Application-Signals-Unterstützung herunter und integrieren Sie sie direkt in Ihr Lambda-Container-Image. Zu diesem Zweck wird die Dockerfile-Datei erstellt.

    FROM public.ecr.aws/lambda/dotnet:8 # Install utilities RUN dnf install -y unzip wget dotnet-sdk-8.0 which # Add dotnet command to docker container's PATH ENV PATH="/usr/lib64/dotnet:${PATH}" # Download the OpenTelemetry Layer with AppSignals Support RUN wget https://github.com/aws-observability/aws-otel-dotnet-instrumentation/releases/latest/download/layer.zip -O /tmp/layer.zip # Extract and include Lambda layer contents RUN mkdir -p /opt && \ unzip /tmp/layer.zip -d /opt/ && \ chmod -R 755 /opt/ && \ rm /tmp/layer.zip WORKDIR ${LAMBDA_TASK_ROOT} # Copy the project files COPY dotnet-lambda-function/src/dotnet-lambda-function/*.csproj ${LAMBDA_TASK_ROOT}/ COPY dotnet-lambda-function/src/dotnet-lambda-function/Function.cs ${LAMBDA_TASK_ROOT}/ COPY dotnet-lambda-function/src/dotnet-lambda-function/aws-lambda-tools-defaults.json ${LAMBDA_TASK_ROOT}/ # Install dependencies and build the application RUN dotnet restore # Use specific runtime identifier and disable ReadyToRun optimization RUN dotnet publish -c Release -o out --self-contained false /p:PublishReadyToRun=false # Copy the published files to the Lambda runtime directory RUN cp -r out/* ${LAMBDA_TASK_ROOT}/ CMD ["dotnet-lambda-function::dotnet_lambda_function.Function::FunctionHandler"]
    Anmerkung

    Die layer.zip-Datei enthält die OpenTelemetry-Instrumentierung, die für die Unterstützung von AWS-Application-Signals zur Überwachung Ihrer Lambda-Funktion erforderlich ist.

    Die Schritte zur Schichtextraktion stellen Folgendes sicher:

    • Der Inhalt von layer.zip wird ordnungsgemäß in das /opt/ directory extrahiert

    • Das otel-instrument-Skript erhält die richtigen Ausführungsberechtigungen

    • Die temporäre Datei layer.zip wurde entfernt, um die Bildgröße zu verringern

  3. Lambda-Funktionscode – Initialisieren Sie Ihr Lambda-Projekt mit der AWS-Lambda-.NET-Vorlage:

    # Install the Lambda templates if you haven't already dotnet new -i Amazon.Lambda.Templates # Create a new Lambda project dotnet new lambda.EmptyFunction -n dotnet-lambda-function

    Ihr Projekt sollte in etwa wie folgt aussehen:

    . ├── Dockerfile └── dotnet-lambda-function ├── src │ └── dotnet-lambda-function │ ├── Function.cs │ ├── Readme.md │ ├── aws-lambda-tools-defaults.json │ └── dotnet-lambda-function.csproj └── test └── dotnet-lambda-function.Tests ├── FunctionTest.cs └── dotnet-lambda-function.Tests.csproj
  4. Container-Image erstellen und bereitstellen

    Umgebungsvariablen festlegen

    AWS_ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text) AWS_REGION=$(aws configure get region) # For fish shell users: # set AWS_ACCOUNT_ID (aws sts get-caller-identity --query Account --output text) # set AWS_REGION (aws configure get region)

    Aktualisieren Sie den Function.cs-Code auf:

    Aktualisieren Sie den dotnet-lambda-function.csproj-Code auf:

    <Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>net8.0>/TargetFramework> <ImplicitUsings>enable</ImplicitUsings> <Nullable>enable</Nullable> <GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles> <AWSProjectType>Lambda</AWSProjectType> <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies> <PublishReadyToRun>true</PublishReadyToRun> </PropertyGroup> <ItemGroup> <PackageReference Include="Amazon.Lambda.Core" Version="2.5.0" /> <PackageReference Include="Amazon.Lambda.Serialization.SystemTextJson" Version="2.4.4" /> <PackageReference Include="AWSSDK.S3" Version="3.7.305.23" /> </ItemGroup> </Project>
  5. Container-Image erstellen und bereitstellen

    Umgebungsvariablen festlegen

    AWS_ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text) AWS_REGION=$(aws configure get region) # For fish shell users: # set AWS_ACCOUNT_ID (aws sts get-caller-identity --query Account --output text) # set AWS_REGION (aws configure get region)

    Authentifizieren Sie sich mit öffentlichem Amazon ECR

    aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws

    Authentifizieren Sie sich mit privatem Amazon ECR

    aws ecr get-login-password --region $AWS_REGION | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com

    Amazon-ECR-Repository erstellen (falls erforderlich)

    aws ecr create-repository \ --repository-name lambda-appsignals-demo \ --region $AWS_REGION

    Image erstellen, mit Tags versehen und übertragen

    # Build the Docker image docker build -t lambda-appsignals-demo . # Tag the image docker tag lambda-appsignals-demo:latest $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/lambda-appsignals-demo:latest # Push the image docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/lambda-appsignals-demo:latest 5. Create and Configure the Lambda Function
  6. Die Lambda-Funktion erstellen und konfigurieren

    Erstellen Sie eine neue Funktion mit der Lambda-Konsole.

    Wählen Sie Container-Image als Bereitstellungsoption aus.

    Wählen Sie Images durchsuchen, um Ihr Amazon-EC-Image auszuwählen.

  7. Testen und Verifizierungen – Testen Sie Ihr Lambda mit einem einfachen Ereignis. Wenn die Schichtintegration erfolgreich ist, wird Ihr Lambda unter der Application-Signals-Service-Übersicht angezeigt.

    Sie sehen Ablaufverfolgungen und Metriken für Ihre Lambda-Funktion in der CloudWatch-Konsole.

Fehlersuche

Wenn Application Signals nicht funktioniert, überprüfen Sie Folgendes:

  • Überprüfen Sie die Funktionsprotokolle auf Fehler im Zusammenhang mit der OpenTelemetry-Instrumentierung

  • Überprüfen Sie, ob die Umgebungsvariable AWS_LAMBDA_EXEC_WRAPPER richtig festgelegt ist

  • Stellen Sie sicher, dass die Schichtextraktion in der Docker-Datei erfolgreich abgeschlossen wurde

  • Vergewissern Sie sich, dass die IAM-Berechtigungen ordnungsgemäß angehängt sind

  • Erhöhen Sie bei Bedarf die Timeout- und Speichereinstellungen in der allgemeinen Konfiguration der Lambda-Funktion

Node.js

Sie können lernen, wie Sie die OpenTelemetry-Schicht mit Application-Signals-Unterstützung in Ihre containerisierte Node.js-Lambda-Funktion integrieren, das layer.zip-Artefakt herunterladen und es in Ihre Node.js-Lambda-Funktion integrieren, um die Überwachung von Application Signals zu ermöglichen.

Voraussetzungen

  • AWS CLI mit Ihren Anmeldeinformationen konfiguriert

  • Docker installiert

  • Bei dieser Anleitung wird davon ausgegangen, dass Sie sich auf der x86_64-Plattform befinden

  1. Die Projektstruktur einrichten

    Erstellen Sie ein Verzeichnis für Ihr Lambda-Funktionscontainer-Image

    mkdir nodejs-appsignals-container-lambda &&\ cd nodejs-appsignals-container-lambda
  2. Docker-Datei erstellen

    Laden Sie die OpenTelemetry-Schicht mit Application-Signals-Unterstützung herunter und integrieren Sie sie direkt in Ihr Lambda-Container-Image. Zu diesem Zweck wird die Dockerfile-Datei erstellt.

    # Dockerfile FROM public.ecr.aws/lambda/nodejs:22 # Install utilities RUN dnf install -y unzip wget # Download the OpenTelemetry Layer with AppSignals Support RUN wget https://github.com/aws-observability/aws-otel-js-instrumentation/releases/latest/download/layer.zip -O /tmp/layer.zip # Extract and include Lambda layer contents RUN mkdir -p /opt && \ unzip /tmp/layer.zip -d /opt/ && \ chmod -R 755 /opt/ && \ rm /tmp/layer.zip # Install npm dependencies RUN npm init -y RUN npm install # Copy function code COPY *.js ${LAMBDA_TASK_ROOT}/ # Set the CMD to your handler CMD [ "index.handler" ]
    Anmerkung

    Die layer.zip-Datei enthält die OpenTelemetry-Instrumentierung, die für die Unterstützung von AWS-Application-Signals zur Überwachung Ihrer Lambda-Funktion erforderlich ist.

    Die Schritte zur Schichtextraktion stellen Folgendes sicher:

    • Der Inhalt von layer.zip wird ordnungsgemäß in das /opt/ directory extrahiert

    • Das otel-instrument-Skript erhält die richtigen Ausführungsberechtigungen

    • Die temporäre Datei layer.zip wurde entfernt, um die Bildgröße zu verringern

  3. Lambda-Funktionscode

    Erstellen Sie eine Datei index.js, mit folgendem Inhalt:

    const { S3Client, ListBucketsCommand } = require('@aws-sdk/client-s3'); // Initialize S3 client const s3Client = new S3Client({ region: process.env.AWS_REGION }); exports.handler = async function(event, context) { console.log('Received event:', JSON.stringify(event, null, 2)); console.log('Handler initializing:', exports.handler.name); const response = { statusCode: 200, body: {} }; try { // List S3 buckets const command = new ListBucketsCommand({}); const data = await s3Client.send(command); // Extract bucket names const bucketNames = data.Buckets.map(bucket => bucket.Name); response.body = { message: 'Successfully retrieved buckets', buckets: bucketNames }; } catch (error) { console.error('Error listing buckets:', error); response.statusCode = 500; response.body = { message: `Error listing buckets: ${error.message}` }; } return response; };

    Ihre Projektstruktur sollte in etwa wie folgt aussehen:

    . ├── Dockerfile └── index.js
  4. Container-Image erstellen und bereitstellen

    Umgebungsvariablen festlegen

    AWS_ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text) AWS_REGION=$(aws configure get region) # For fish shell users: # set AWS_ACCOUNT_ID (aws sts get-caller-identity --query Account --output text) # set AWS_REGION (aws configure get region)

    Authentifizieren Sie sich mit öffentlichem Amazon ECR

    aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws

    Authentifizieren Sie sich mit privatem Amazon ECR

    aws ecr get-login-password --region $AWS_REGION | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com

    Amazon-ECR-Repository erstellen (falls erforderlich)

    aws ecr create-repository \ --repository-name lambda-appsignals-demo \ --region $AWS_REGION

    Image erstellen, mit Tags versehen und übertragen

    # Build the Docker image docker build -t lambda-appsignals-demo . # Tag the image docker tag lambda-appsignals-demo:latest $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/lambda-appsignals-demo:latest # Push the image docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/lambda-appsignals-demo:latest 5. Create and Configure the Lambda Function
  5. Die Lambda-Funktion erstellen und konfigurieren

    Erstellen Sie eine neue Funktion mit der Lambda-Konsole.

    Wählen Sie Container-Image als Bereitstellungsoption aus.

    Wählen Sie Images durchsuchen, um Ihr Amazon-EC-Image auszuwählen.

  6. Testen und Verifizierungen – Testen Sie Ihr Lambda mit einem einfachen Ereignis. Wenn die Schichtintegration erfolgreich ist, wird Ihr Lambda unter der Application-Signals-Service-Übersicht angezeigt.

    Sie sehen Ablaufverfolgungen und Metriken für Ihre Lambda-Funktion in der CloudWatch-Konsole.

Fehlersuche

Wenn Application Signals nicht funktioniert, überprüfen Sie Folgendes:

  • Überprüfen Sie die Funktionsprotokolle auf Fehler im Zusammenhang mit der OpenTelemetry-Instrumentierung

  • Überprüfen Sie, ob die Umgebungsvariable AWS_LAMBDA_EXEC_WRAPPER richtig festgelegt ist

  • Stellen Sie sicher, dass die Schichtextraktion in der Docker-Datei erfolgreich abgeschlossen wurde

  • Vergewissern Sie sich, dass die IAM-Berechtigungen ordnungsgemäß angehängt sind

  • Erhöhen Sie bei Bedarf die Timeout- und Speichereinstellungen in der allgemeinen Konfiguration der Lambda-Funktion

Python

Sie können lernen, wie Sie die OpenTelemetry-Schicht mit Application-Signals-Unterstützung in Ihre containerisierte Python-Lambda-Funktion integrieren, das layer.zip-Artefakt herunterladen und es in Ihre Python-Lambda-Funktion integrieren, um die Überwachung von Application Signals zu ermöglichen.

Voraussetzungen

  • AWS CLI mit Ihren Anmeldeinformationen konfiguriert

  • Docker installiert

  • Bei dieser Anleitung wird davon ausgegangen, dass Sie sich auf der x86_64-Plattform befinden

  1. Die Projektstruktur einrichten

    Erstellen Sie ein Verzeichnis für Ihr Lambda-Funktionscontainer-Image

    mkdir python-appsignals-container-lambda &&\ cd python-appsignals-container-lambda
  2. Docker-Datei erstellen

    Laden Sie die OpenTelemetry-Schicht mit Application-Signals-Unterstützung herunter und integrieren Sie sie direkt in Ihr Lambda-Container-Image. Zu diesem Zweck wird die Dockerfile-Datei erstellt.

    Anmerkung

    Die layer.zip-Datei enthält die OpenTelemetry-Instrumentierung, die für die Unterstützung von AWS-Application-Signals zur Überwachung Ihrer Lambda-Funktion erforderlich ist.

    Die Schritte zur Schichtextraktion stellen Folgendes sicher:

    • Der Inhalt von layer.zip wird ordnungsgemäß in das /opt/ directory extrahiert

    • Das otel-instrument-Skript erhält die richtigen Ausführungsberechtigungen

    • Die temporäre Datei layer.zip wurde entfernt, um die Bildgröße zu verringern

  3. Lambda-Funktionscode

    Erstellen Sie Ihre Lambda-Funktion in einer app.py-Datei:

    import json import boto3 def lambda_handler(event, context): """ Sample Lambda function that can be used in a container image. Parameters: ----------- event: dict Input event data context: LambdaContext Lambda runtime information Returns: __ dict Response object """ print("Received event:", json.dumps(event, indent=2)) # Create S3 client s3 = boto3.client('s3') try: # List buckets response = s3.list_buckets() # Extract bucket names buckets = [bucket['Name'] for bucket in response['Buckets']] return { 'statusCode': 200, 'body': json.dumps({ 'message': 'Successfully retrieved buckets', 'buckets': buckets }) } except Exception as e: print(f"Error listing buckets: {str(e)}") return { 'statusCode': 500, 'body': json.dumps({ 'message': f'Error listing buckets: {str(e)}' }) }

    Ihre Projektstruktur sollte in etwa wie folgt aussehen:

    . ├── Dockerfile ├── app.py └── instructions.md
  4. Container-Image erstellen und bereitstellen

    Umgebungsvariablen festlegen

    AWS_ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text) AWS_REGION=$(aws configure get region) # For fish shell users: # set AWS_ACCOUNT_ID (aws sts get-caller-identity --query Account --output text) # set AWS_REGION (aws configure get region)

    Authentifizieren Sie sich mit öffentlichem Amazon ECR

    aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws

    Authentifizieren Sie sich mit privatem Amazon ECR

    aws ecr get-login-password --region $AWS_REGION | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com

    Amazon-ECR-Repository erstellen (falls erforderlich)

    aws ecr create-repository \ --repository-name lambda-appsignals-demo \ --region $AWS_REGION

    Image erstellen, mit Tags versehen und übertragen

    # Build the Docker image docker build -t lambda-appsignals-demo . # Tag the image docker tag lambda-appsignals-demo:latest $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/lambda-appsignals-demo:latest # Push the image docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/lambda-appsignals-demo:latest 5. Create and Configure the Lambda Function
  5. Die Lambda-Funktion erstellen und konfigurieren

    Erstellen Sie eine neue Funktion mit der Lambda-Konsole.

    Wählen Sie Container-Image als Bereitstellungsoption aus.

    Wählen Sie Images durchsuchen, um Ihr Amazon-EC-Image auszuwählen.

  6. Testen und Verifizierungen – Testen Sie Ihr Lambda mit einem einfachen Ereignis. Wenn die Schichtintegration erfolgreich ist, wird Ihr Lambda unter der Application-Signals-Service-Übersicht angezeigt.

    Sie sehen Ablaufverfolgungen und Metriken für Ihre Lambda-Funktion in der CloudWatch-Konsole.

Fehlersuche

Wenn Application Signals nicht funktioniert, überprüfen Sie Folgendes:

  • Überprüfen Sie die Funktionsprotokolle auf Fehler im Zusammenhang mit der OpenTelemetry-Instrumentierung

  • Überprüfen Sie, ob die Umgebungsvariable AWS_LAMBDA_EXEC_WRAPPER richtig festgelegt ist

  • Stellen Sie sicher, dass die Schichtextraktion in der Docker-Datei erfolgreich abgeschlossen wurde

  • Vergewissern Sie sich, dass die IAM-Berechtigungen ordnungsgemäß angehängt sind

  • Erhöhen Sie bei Bedarf die Timeout- und Speichereinstellungen in der allgemeinen Konfiguration der Lambda-Funktion