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 パッケージとその依存関係をローカルで関数プロジェクトのフォルダにインストールします。
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 を直接使用できます。ここでは主に手動ビルドの方法を紹介します。
- ソースをダウンロード
- ビルド
ビルド前に、関連する aws ツールを主にインストールする必要があります。リポジトリの README を参照してください。関連ツールはすでにインストール済みであると仮定し、以下の操作でビルドします。
ビルド時のログは以下のとおりです。
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
- テスト
テストボタンをクリックしてテストします。成功後、プラットフォームにログインしてトレースデータを確認できます。