コンテンツにスキップ

AWS Lambda Tracing

設定

現在、AWS Lambda はトレース情報を接続する方法として 2 通りをサポートしています。

  • DDTrace
  • Opentelemetry

DDTrace 接続

Lambda Layer の準備

以下の 2 つの Layer を追加する必要があります。

  • DataDog Layer: トレースのインストルメンテーションに使用
  • DataKit Layer: DataDog Layer のオブザーバビリティデータを受信するために使用

DataKit Layer の追加

参考:AWS Lambda 拡張 > DataKit Layer の追加

DataDog Layer の追加

  • AWS グローバルリージョン

適切な ARN を選択してください。

# Use this format for x86-based Lambda deployed in AWS commercial regions
arn:aws:lambda:<AWS_REGION>:464622532012:layer:Datadog-<RUNTIME>:118

# Use this format for arm64-based Lambda deployed in AWS commercial regions
arn:aws:lambda:<AWS_REGION>:464622532012:layer:Datadog-<RUNTIME>-ARM:118

# Use this format for x86-based Lambda deployed in AWS GovCloud regions
arn:aws-us-gov:lambda:<AWS_REGION>:002406178527:layer:Datadog-<RUNTIME>:118

# Use this format for arm64-based Lambda deployed in AWS GovCloud regions
arn:aws-us-gov:lambda:<AWS_REGION>:002406178527:layer:Datadog-<RUNTIME>-ARM:118

<AWS_REGION> を有効な AWS リージョン、たとえば us-east-1 に置き換えてください。利用可能な <RUNTIME> オプションは Python38、Python39、Python310、Python311、Python312、Python313 です。

  • AWS 中国リージョン

Datadog は中国リージョン向けの datadog-lambda-python Layer を提供していないため、pip を使って datadog-lambda パッケージとその依存関係をローカルで関数プロジェクトのフォルダにインストールします。

pip install datadog-lambda -t ./
注意datadog-lambda は ddtrace に依存しており、ddtrace はネイティブ拡張を使用します。そのため、正しいアーキテクチャ(x86_64 または arm64)の Linux 環境でインストールおよびコンパイルする必要があります。

関数の「ランタイム-ハンドラー」を datadog_lambda.handler.handler に設定します。

環境変数の設定

  • DD_TRACE_ENABLED: 分散トレースを有効化。デフォルトは true
  • DD_LAMBDA_HANDLER: 元のハンドラーを設定。例:lambda_function.lambda_handler
  • DD_TRACE_AGENT_URL:http://localhost:9529
  • DD_TRACE_DEBUG:ログ出力。デフォルトは無効
  • ENV_DATAWAY:レポート先の DataWay アドレス(token はワークスペースから取得)

設定後、テストをクリックすると、プラットフォームにログインしてトレースデータを確認できます。

Opentelemetry 接続

Lambda Layer の準備

以下の 2 つの Layer を追加する必要があります。 - Opentelemetry Layer:トレースのインストルメンテーションに使用 - DataKit Layer: Opentelemetry のオブザーバビリティを受信するために使用

DataKit Layer の追加

参考:AWS Lambda 拡張 > DataKit Layer の追加

Opentelemetry Layer の追加

OpenTelemetry の自動インストルメンテーションを使うと、Python コードに手を入れずにトレースを実現できます。ここでは OpenTelemetry を layer として Lambda 関数の内部にアタッチできます。

AWS 寧夏ノードでは OpenTelemetry layer を手動でビルドする必要があります。その他のノードでは対応する arn を直接使用できます。ここでは主に手動ビルドの方法を紹介します。

  1. ソースをダウンロード
git clone https://github.com/open-telemetry/opentelemetry-lambda.git
  1. ビルド

ビルド前に、関連する aws ツールを主にインストールする必要があります。リポジトリの README を参照してください。関連ツールはすでにインストール済みであると仮定し、以下の操作でビルドします。

cd python/src
./run.sh -r cn-northwest-1

ビルド時のログは以下のとおりです。

running...
Invoked with: -r cn-northwest-1
sam building...
run.sh: Starting sam build.
Starting Build inside a container                                                                                                                               
Building layer 'OTelLayer'                                                                                                                                      
For container layer build, first compatible runtime is chosen as build target for container.                                                                    

Fetching public.ecr.aws/sam/build-python3.9:latest-x86_64 Docker container image......
Mounting /home/liurui/code/opentelemetry-lambda/python/src/otel as /tmp/samcli/source:ro,delegated, inside runtime container       


Successfully created/updated stack - otel-stack in cn-northwest-1


OTel Lambda layer ARN:
arn:aws-cn:lambda:cn-northwest-1:888888888:layer:otel-layer:2

ビルドが成功すると、otel-layer が自動的に AWS Layer にアップロードされます。現在の arn をコピーしておき、後続の操作で使用します。

環境変数の設定

対応する関数の設定に追加します。

# otel lambda handler
AWS_LAMBDA_EXEC_WRAPPER = /opt/python/otel-handler
# ゲートウェイアドレス
ENV_DATAWAY = http://open****?token=xxxxxxx
# otel のレポート先、調整不要
OTEL_EXPORTER_OTLP_ENDPOINT = http://localhost:9529/otel
  • テスト

テストボタンをクリックしてテストします。成功後、プラットフォームにログインしてトレースデータを確認できます。

フィードバック

このページは役に立ちましたか?