Lambda でアプリケーションを有効にする
Lambda 関数で Application Signals を有効にできます。Application Signals は、Lambda レイヤーを介して提供される拡張 AWS Distro for OpenTelemetry (ADOT) ライブラリを使用して、Lambda 関数を自動的に計測します。この AWS Lambda Layer for OpenTelemetry は、Application Signals の自動計測に必要なライブラリをパッケージ化してデプロイします。
Application Signals のサポートに加え、この Lambda レイヤーは Lambda OpenTelemetry サポートのコンポーネントでもあり、トレース機能を提供します。
また、トランザクション検索を使用して Lambda オブザーバビリティを強化することもできます。これにより、サンプリングなしで Lambda 関数呼び出しのトレーススパンをキャプチャできるようになります。この機能を使用すると、トレースコンテキストの伝播で sampled
フラグの影響を受けることなく、関数のスパンを収集できます。これにより、ダウンストリームの依存サービスにそれ以上の影響がありません。Lambda でトランザクション検索を有効にすることにより、関数のパフォーマンスを完全に可視化でき、まれに発生する問題をトラブルシューティングできます。開始するには、「トランザクション検索」を参照してください。
トピック
入門
Lambda 関数で Application Signals を有効にするには、3 つの方法があります。
Lambda 関数で Application Signals を有効にしたら、その関数からのテレメトリが Application Signals コンソールに表示されるまでに数分かかります。
-
CloudWatch Application Signals コンソールの使用
-
Lambda のコンソールを開く
-
AWS Lambda Layer for OpenTelemetry を Lambda 関数ランタイムに手動で追加します。
これらの各メソッドは、AWS Lambda Layer for OpenTelemetry を関数に追加します。
CloudWatch Application Signals コンソールの使用
次の手順に従って Application Signals コンソールを使用し、Lambda 関数で Application Signals を有効にします。
CloudWatch コンソールの https://console.aws.amazon.com/cloudwatch/
を開いてください。 -
ナビゲーションペインで、[Application Signals]、[サービス] の順に選択します。
-
[サービス] リスト領域で、[Application Signals の有効化] を選択します。
-
[Lambda] タブを選択します。
-
Application Signals で有効にする各関数を選択したら、[完了] を選択します。
Lambda のコンソールを開く
次の手順に従って Lambda コンソールを使用し、Lambda 関数で Application Signals を有効にします。
AWS Lambda コンソールの https://console.aws.amazon.com/lambda/
を開いてください。 -
ナビゲーションペインで [関数] を選択したら、有効にする関数の名前を選択します。
-
[設定] タブを選択したら、[モニタリングと運用ツール] を選択します。
-
[編集] を選択します。
-
[CloudWatch Application Signals と X-Ray] セクションで、[Application Signals を使用してアプリケーショントレースと標準アプリケーションメトリクスを自動的に収集] および [X-Ray を使用してエンドツーエンドの可視性を実現する Lambda サービストレースを自動的に収集] の両方を選択します。
-
[保存] を選択します。
AWS CDK を使用して Lambda で Application Signals を有効にする
このアカウントで Application Signals をまだ有効にしていない場合は、サービスの検出に必要なアクセス権限を Application Signals に付与する必要があります。詳細については、「アカウントで Application Signals を有効にする」を参照してください。
-
アプリケーション向けに Application Signals を有効にする
import { aws_applicationsignals as applicationsignals } from 'aws-cdk-lib'; const cfnDiscovery = new applicationsignals.CfnDiscovery(this, 'ApplicationSignalsServiceRole', { } );
Discovery CloudFormation リソースは、Application Signals に次のアクセス許可を付与します。
-
xray:GetServiceGraph
-
logs:StartQuery
-
logs:GetQueryResults
-
cloudwatch:GetMetricData
-
cloudwatch:ListMetrics
-
tag:GetResources
このロールの詳細については、「CloudWatch Application Signals のサービスリンクロールのアクセス許可」を参照してください。
-
-
Lambda 関数に IAM ポリシー
CloudWatchLambdaApplicationSignalsExecutionRolePolicy
を追加します。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'));
-
$AWS_LAMBDA_LAYER_FOR_OTEL_ARN
を対応するリージョンの実際の AWS Lambda Layer for OpenTelemetry ARN で置き換えます。fn.addLayers(LayerVersion.fromLayerVersionArn( this, 'AwsLambdaLayerForOtel', '$AWS_LAMBDA_LAYER_FOR_OTEL_ARN' )) fn.addEnvironment("AWS_LAMBDA_EXEC_WRAPPER", "/opt/otel-instrument");
(オプション) アプリケーションの状態をモニタリングする
Lambda でアプリケーションを有効にすると、アプリケーションの状態をモニタリングできます。詳細については、「Application Signals を使用したアプリケーションの運用状態のモニタリング」を参照してください。
Application Signals を手動で有効にします。
Lambda 関数の Application Signals を手動で有効にするには、次の手順に従います。
-
AWS Lambda Layer for OpenTelemetry を Lambda ランタイムに追加します。レイヤー ARN を確認するには、「AWS Lambda Layer for OpenTelemetry ARN」を参照してください。
-
AWS_LAMBDA_EXEC_WRAPPER=/opt/otel-instrument
環境変数の追加環境変数
LAMBDA_APPLICATION_SIGNALS_REMOTE_ENVIRONMENT
を追加してカスタム Lambda 環境を設定します。デフォルトでは、Lambda 環境はlambda:default
に設定されています。 -
AWS マネージド IAM ポリシー [CloudWatchLambdaApplicationSignalsExecutionRolePolicy] を Lambda 実行ロールにアタッチします。
-
(オプション) Lambda アクティブトレースを有効にし、トレースエクスペリエンスの向上を実現することをお勧めします。詳細については、「AWS X-Ray を使用して Lambda 関数の呼び出しの視覚化」を参照してください。
Application Signals を手動で無効化
Lambda 関数で Application Signals を手動で無効にするには、Lambda ランタイムから AWS Lambda Layer for OpenTelemetry を削除し、AWS_LAMBDA_EXEC_WRAPPER=/opt/otel-instrument
環境変数を削除します。
Application Signals を設定する
このセクションを使用して、Lambda で Application Signals を設定できます。
複数の Lambda 関数を 1 つのサービスにグループ化する
環境変数 OTEL_SERVICE_NAME
はサービスの名前を設定します。これは、Application Signals ダッシュボードにアプリケーションのサービス名として表示されます。同じサービス名を複数の Lambda 関数に割り当てることができ、それらは Application Signals の単一のサービスにマージされます。このキーの値を指定しない場合はデフォルトの Lambda 関数の名前が使用されます。
サンプリング
デフォルトでは、トレースサンプリング戦略は親ベースとなります。環境変数 OTEL_TRACES_SAMPLER
を設定することで、サンプリング戦略を調整できます。
例えば、トレースサンプリングレートを 30% に設定します。
OTEL_TRACES_SAMPLER=traceidratio OTEL_TRACES_SAMPLER_ARG=0.3
詳細については、「OpenTelemetry 環境変数の仕様
すべてのライブラリ計測を有効にする
Lambda コールドスタートを減らすために、デフォルトでは、Python、Node、Java に対して AWS SDK と HTTP の計測のみが有効になっています。環境変数を設定して、Lambda 関数で使用される他のライブラリの計測を有効にできます。
-
Python –
OTEL_PYTHON_DISABLED_INSTRUMENTATIONS=none
-
Node –
OTEL_NODE_DISABLED_INSTRUMENTATIONS=none
-
Java –
OTEL_INSTRUMENTATION_COMMON_DEFAULT_ENABLED=true
AWS Lambda Layer for OpenTelemetry ARN
次の表に、サポートされている各リージョンの AWS Lambda Layer for OpenTelemetry を使用する ARN を示します。
- Python
-
リージョン ARN 米国東部 (バージニア北部)
arn:aws:lambda:us-east-1:615299751070:layer:AWSOpenTelemetryDistroPython:16
米国東部 (オハイオ)
arn:aws:lambda:us-east-2:615299751070:layer:AWSOpenTelemetryDistroPython:13
米国西部 (北カリフォルニア)
arn:aws:lambda:us-west-1:615299751070:layer:AWSOpenTelemetryDistroPython:20
米国西部 (オレゴン)
arn:aws:lambda:us-west-2:615299751070:layer:AWSOpenTelemetryDistroPython:20
アフリカ (ケープタウン)
arn:aws:lambda:af-south-1:904233096616:layer:AWSOpenTelemetryDistroPython:10
アジアパシフィック (香港)
arn:aws:lambda:ap-east-1:888577020596:layer:AWSOpenTelemetryDistroPython:10
アジアパシフィック (ハイデラバード)
arn:aws:lambda:ap-south-2:796973505492:layer:AWSOpenTelemetryDistroPython:10
アジアパシフィック (ジャカルタ)
arn:aws:lambda:ap-southeast-3:039612877180:layer:AWSOpenTelemetryDistroPython:10
アジアパシフィック (メルボルン)
arn:aws:lambda:ap-southeast-4:713881805771:layer:AWSOpenTelemetryDistroPython:10
アジアパシフィック (ムンバイ)
arn:aws:lambda:ap-south-1:615299751070:layer:AWSOpenTelemetryDistroPython:13
アジアパシフィック (大阪)
arn:aws:lambda:ap-northeast-3:615299751070:layer:AWSOpenTelemetryDistroPython:12
アジアパシフィック (ソウル)
arn:aws:lambda:ap-northeast-2:615299751070:layer:AWSOpenTelemetryDistroPython:13
アジアパシフィック (シンガポール)
arn:aws:lambda:ap-southeast-1:615299751070:layer:AWSOpenTelemetryDistroPython:12
アジアパシフィック (シドニー)
arn:aws:lambda:ap-southeast-2:615299751070:layer:AWSOpenTelemetryDistroPython:13
アジアパシフィック (東京)
arn:aws:lambda:ap-northeast-1:615299751070:layer:AWSOpenTelemetryDistroPython:13
カナダ (中部)
arn:aws:lambda:ca-central-1:615299751070:layer:AWSOpenTelemetryDistroPython:13
欧州 (フランクフルト)
arn:aws:lambda:eu-central-1:615299751070:layer:AWSOpenTelemetryDistroPython:13
欧州 (アイルランド)
arn:aws:lambda:eu-west-1:615299751070:layer:AWSOpenTelemetryDistroPython:13
欧州 (ロンドン)
arn:aws:lambda:eu-west-2:615299751070:layer:AWSOpenTelemetryDistroPython:13
欧州 (ミラノ)
arn:aws:lambda:eu-south-1:257394471194:layer:AWSOpenTelemetryDistroPython:10
欧州 (パリ)
arn:aws:lambda:eu-west-3:615299751070:layer:AWSOpenTelemetryDistroPython:13
欧州 (スペイン)
arn:aws:lambda:eu-south-2:490004653786:layer:AWSOpenTelemetryDistroPython:10
欧州 (ストックホルム)
arn:aws:lambda:eu-north-1:615299751070:layer:AWSOpenTelemetryDistroPython:13
欧州 (チューリッヒ)
arn:aws:lambda:eu-central-2:156041407956:layer:AWSOpenTelemetryDistroPython:10
イスラエル (テルアビブ)
arn:aws:lambda:il-central-1:746669239226:layer:AWSOpenTelemetryDistroPython:10
中東 (バーレーン)
arn:aws:lambda:me-south-1:980921751758:layer:AWSOpenTelemetryDistroPython:10
中東 (アラブ首長国連邦)
arn:aws:lambda:me-central-1:739275441131:layer:AWSOpenTelemetryDistroPython:10
南米 (サンパウロ)
arn:aws:lambda:sa-east-1:615299751070:layer:AWSOpenTelemetryDistroPython:13
- Node.js
-
リージョン ARN 米国東部 (バージニア北部)
arn:aws:lambda:us-east-1:615299751070:layer:AWSOpenTelemetryDistroJs:8
米国東部 (オハイオ)
arn:aws:lambda:us-east-2:615299751070:layer:AWSOpenTelemetryDistroJs:8
米国西部 (北カリフォルニア)
arn:aws:lambda:us-west-1:615299751070:layer:AWSOpenTelemetryDistroJs:8
米国西部 (オレゴン)
arn:aws:lambda:us-west-2:615299751070:layer:AWSOpenTelemetryDistroJs:8
アフリカ (ケープタウン)
arn:aws:lambda:af-south-1:904233096616:layer:AWSOpenTelemetryDistroJs:8
アジアパシフィック (香港)
arn:aws:lambda:ap-east-1:888577020596:layer:AWSOpenTelemetryDistroJs:8
アジアパシフィック (ハイデラバード)
arn:aws:lambda:ap-south-2:796973505492:layer:AWSOpenTelemetryDistroJs:6
アジアパシフィック (ジャカルタ)
arn:aws:lambda:ap-southeast-3:039612877180:layer:AWSOpenTelemetryDistroJs:8
アジアパシフィック (メルボルン)
arn:aws:lambda:ap-southeast-4:713881805771:layer:AWSOpenTelemetryDistroJs:8
アジアパシフィック (ムンバイ)
arn:aws:lambda:ap-south-1:615299751070:layer:AWSOpenTelemetryDistroJs:8
アジアパシフィック (大阪)
arn:aws:lambda:ap-northeast-3:615299751070:layer:AWSOpenTelemetryDistroJs:8
アジアパシフィック (ソウル)
arn:aws:lambda:ap-northeast-2:615299751070:layer:AWSOpenTelemetryDistroJs:8
アジアパシフィック (シンガポール)
arn:aws:lambda:ap-southeast-1:615299751070:layer:AWSOpenTelemetryDistroJs:8
アジアパシフィック (シドニー)
arn:aws:lambda:ap-southeast-2:615299751070:layer:AWSOpenTelemetryDistroJs:8
アジアパシフィック (東京)
arn:aws:lambda:ap-northeast-1:615299751070:layer:AWSOpenTelemetryDistroJs:8
カナダ (中部)
arn:aws:lambda:ca-central-1:615299751070:layer:AWSOpenTelemetryDistroJs:8
欧州 (フランクフルト)
arn:aws:lambda:eu-central-1:615299751070:layer:AWSOpenTelemetryDistroJs:8
欧州 (アイルランド)
arn:aws:lambda:eu-west-1:615299751070:layer:AWSOpenTelemetryDistroJs:8
欧州 (ロンドン)
arn:aws:lambda:eu-west-2:615299751070:layer:AWSOpenTelemetryDistroJs:8
欧州 (ミラノ)
arn:aws:lambda:eu-south-1:257394471194:layer:AWSOpenTelemetryDistroJs:8
欧州 (パリ)
arn:aws:lambda:eu-west-3:615299751070:layer:AWSOpenTelemetryDistroJs:8
欧州 (スペイン)
arn:aws:lambda:eu-south-2:490004653786:layer:AWSOpenTelemetryDistroJs:8
欧州 (ストックホルム)
arn:aws:lambda:eu-north-1:615299751070:layer:AWSOpenTelemetryDistroJs:8
欧州 (チューリッヒ)
arn:aws:lambda:eu-central-2:156041407956:layer:AWSOpenTelemetryDistroJs:8
イスラエル (テルアビブ)
arn:aws:lambda:il-central-1:746669239226:layer:AWSOpenTelemetryDistroJs:8
中東 (バーレーン)
arn:aws:lambda:me-south-1:980921751758:layer:AWSOpenTelemetryDistroJs:8
中東 (アラブ首長国連邦)
arn:aws:lambda:me-central-1:739275441131:layer:AWSOpenTelemetryDistroJs:8
南米 (サンパウロ)
arn:aws:lambda:sa-east-1:615299751070:layer:AWSOpenTelemetryDistroJs:8
- .Net
-
リージョン ARN 米国東部 (バージニア北部)
arn:aws:lambda:us-east-1:615299751070:layer:AWSOpenTelemetryDistroDotNet:6
米国東部 (オハイオ)
arn:aws:lambda:us-east-2:615299751070:layer:AWSOpenTelemetryDistroDotNet:5
米国西部 (北カリフォルニア)
arn:aws:lambda:us-west-1:615299751070:layer:AWSOpenTelemetryDistroDotNet:5
米国西部 (オレゴン)
arn:aws:lambda:us-west-2:615299751070:layer:AWSOpenTelemetryDistroDotNet:5
アフリカ (ケープタウン)
arn:aws:lambda:af-south-1:904233096616:layer:AWSOpenTelemetryDistroDotNet:5
アジアパシフィック (香港)
arn:aws:lambda:ap-east-1:888577020596:layer:AWSOpenTelemetryDistroDotNet:5
アジアパシフィック (ハイデラバード)
arn:aws:lambda:ap-south-2:796973505492:layer:AWSOpenTelemetryDistroDotNet:5
アジアパシフィック (ジャカルタ)
arn:aws:lambda:ap-southeast-3:039612877180:layer:AWSOpenTelemetryDistroDotNet:5
アジアパシフィック (メルボルン)
arn:aws:lambda:ap-southeast-4:713881805771:layer:AWSOpenTelemetryDistroDotNet:5
アジアパシフィック (ムンバイ)
arn:aws:lambda:ap-south-1:615299751070:layer:AWSOpenTelemetryDistroDotNet:5
アジアパシフィック (大阪)
arn:aws:lambda:ap-northeast-3:615299751070:layer:AWSOpenTelemetryDistroDotNet:5
アジアパシフィック (ソウル)
arn:aws:lambda:ap-northeast-2:615299751070:layer:AWSOpenTelemetryDistroDotNet:5
アジアパシフィック (シンガポール)
arn:aws:lambda:ap-southeast-1:615299751070:layer:AWSOpenTelemetryDistroDotNet:5
アジアパシフィック (シドニー)
arn:aws:lambda:ap-southeast-2:615299751070:layer:AWSOpenTelemetryDistroDotNet:5
アジアパシフィック (東京)
arn:aws:lambda:ap-northeast-1:615299751070:layer:AWSOpenTelemetryDistroDotNet:5
カナダ (中部)
arn:aws:lambda:ca-central-1:615299751070:layer:AWSOpenTelemetryDistroDotNet:5
欧州 (フランクフルト)
arn:aws:lambda:eu-central-1:615299751070:layer:AWSOpenTelemetryDistroDotNet:5
欧州 (アイルランド)
arn:aws:lambda:eu-west-1:615299751070:layer:AWSOpenTelemetryDistroDotNet:5
欧州 (ロンドン)
arn:aws:lambda:eu-west-2:615299751070:layer:AWSOpenTelemetryDistroDotNet:5
欧州 (ミラノ)
arn:aws:lambda:eu-south-1:257394471194:layer:AWSOpenTelemetryDistroDotNet:5
欧州 (パリ)
arn:aws:lambda:eu-west-3:615299751070:layer:AWSOpenTelemetryDistroDotNet:5
欧州 (スペイン)
arn:aws:lambda:eu-south-2:490004653786:layer:AWSOpenTelemetryDistroDotNet:5
欧州 (ストックホルム)
arn:aws:lambda:eu-north-1:615299751070:layer:AWSOpenTelemetryDistroDotNet:5
欧州 (チューリッヒ)
arn:aws:lambda:eu-central-2:156041407956:layer:AWSOpenTelemetryDistroDotNet:5
イスラエル (テルアビブ)
arn:aws:lambda:il-central-1:746669239226:layer:AWSOpenTelemetryDistroDotNet:5
中東 (バーレーン)
arn:aws:lambda:me-south-1:980921751758:layer:AWSOpenTelemetryDistroDotNet:5
中東 (アラブ首長国連邦)
arn:aws:lambda:me-central-1:739275441131:layer:AWSOpenTelemetryDistroDotNet:5
南米 (サンパウロ)
arn:aws:lambda:sa-east-1:615299751070:layer:AWSOpenTelemetryDistroDotNet:5
- Java
-
リージョン ARN 米国東部 (バージニア北部)
arn:aws:lambda:us-east-1:615299751070:layer:AWSOpenTelemetryDistroJava:5
米国東部 (オハイオ)
arn:aws:lambda:us-east-2:615299751070:layer:AWSOpenTelemetryDistroJava:5
米国西部 (北カリフォルニア)
arn:aws:lambda:us-west-1:615299751070:layer:AWSOpenTelemetryDistroJava:5
米国西部 (オレゴン)
arn:aws:lambda:us-west-2:615299751070:layer:AWSOpenTelemetryDistroJava:5
アフリカ (ケープタウン)
arn:aws:lambda:af-south-1:904233096616:layer:AWSOpenTelemetryDistroJava:5
アジアパシフィック (香港)
arn:aws:lambda:ap-east-1:888577020596:layer:AWSOpenTelemetryDistroJava:5
アジアパシフィック (ハイデラバード)
arn:aws:lambda:ap-south-2:796973505492:layer:AWSOpenTelemetryDistroJava:5
アジアパシフィック (ジャカルタ)
arn:aws:lambda:ap-southeast-3:039612877180:layer:AWSOpenTelemetryDistroJava:5
アジアパシフィック (メルボルン)
arn:aws:lambda:ap-southeast-4:713881805771:layer:AWSOpenTelemetryDistroJava:5
アジアパシフィック (ムンバイ)
arn:aws:lambda:ap-south-1:615299751070:layer:AWSOpenTelemetryDistroJava:5
アジアパシフィック (大阪)
arn:aws:lambda:ap-northeast-3:615299751070:layer:AWSOpenTelemetryDistroJava:5
アジアパシフィック (ソウル)
arn:aws:lambda:ap-northeast-2:615299751070:layer:AWSOpenTelemetryDistroJava:5
アジアパシフィック (シンガポール)
arn:aws:lambda:ap-southeast-1:615299751070:layer:AWSOpenTelemetryDistroJava:5
アジアパシフィック (シドニー)
arn:aws:lambda:ap-southeast-2:615299751070:layer:AWSOpenTelemetryDistroJava:5
アジアパシフィック (東京)
arn:aws:lambda:ap-northeast-1:615299751070:layer:AWSOpenTelemetryDistroJava:5
カナダ (中部)
arn:aws:lambda:ca-central-1:615299751070:layer:AWSOpenTelemetryDistroJava:5
欧州 (フランクフルト)
arn:aws:lambda:eu-central-1:615299751070:layer:AWSOpenTelemetryDistroJava:5
欧州 (アイルランド)
arn:aws:lambda:eu-west-1:615299751070:layer:AWSOpenTelemetryDistroJava:5
欧州 (ロンドン)
arn:aws:lambda:eu-west-2:615299751070:layer:AWSOpenTelemetryDistroJava:5
欧州 (ミラノ)
arn:aws:lambda:eu-south-1:257394471194:layer:AWSOpenTelemetryDistroJava:5
欧州 (パリ)
arn:aws:lambda:eu-west-3:615299751070:layer:AWSOpenTelemetryDistroJava:5
欧州 (スペイン)
arn:aws:lambda:eu-south-2:490004653786:layer:AWSOpenTelemetryDistroJava:5
欧州 (ストックホルム)
arn:aws:lambda:eu-north-1:615299751070:layer:AWSOpenTelemetryDistroJava:5
欧州 (チューリッヒ)
arn:aws:lambda:eu-central-2:156041407956:layer:AWSOpenTelemetryDistroJava:5
イスラエル (テルアビブ)
arn:aws:lambda:il-central-1:746669239226:layer:AWSOpenTelemetryDistroJava:5
中東 (バーレーン)
arn:aws:lambda:me-south-1:980921751758:layer:AWSOpenTelemetryDistroJava:5
中東 (アラブ首長国連邦)
arn:aws:lambda:me-central-1:739275441131:layer:AWSOpenTelemetryDistroJava:5
南米 (サンパウロ)
arn:aws:lambda:sa-east-1:615299751070:layer:AWSOpenTelemetryDistroJava:5
Amazon ECR コンテナを使用して Lambda 関数をデプロイする
コンテナイメージとしてデプロイされた Lambda 関数は、従来の方法の Lambda レイヤーをサポートしていません。コンテナイメージを使用する場合、他の Lambda デプロイ方法と同様にレイヤーをアタッチすることはできません。代わりに、ビルドプロセス中にレイヤーの内容をコンテナイメージに手動で組み込む必要があります。
- Java
-
AWS Lambda Layer for OpenTelemetry をコンテナ化された Java Lambda 関数に統合し、
layer.zip
アーティファクトをダウンロードして、それを Java Lambda 関数コンテナに統合することによって Application Signals モニタリングを有効にする方法について説明します。前提条件
-
認証情報を使って設定した AWS CLI
-
インストールされている Docker
-
これらの手順は、x86_64 プラットフォームを使用していることを前提としています。
-
プロジェクト構造のセットアップ
Lambda 関数用のディレクトリを作成する
mkdir java-appsignals-container-lambda && \ cd java-appsignals-container-lambda
Maven プロジェクトの構造を作成する
mkdir -p src/main/java/com/example/java/lambda mkdir -p src/main/resources
-
Dockerfile を作成する
OpenTelemetry Layer と Application Signals のサポートをダウンロードして、Lambda コンテナイメージに直接統合します。これを行うために、
Dockerfile
ファイルが作成されます。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"]
注記
layer.zip
ファイルには、Lambda 関数をモニタリングする AWS Application Signals のサポートに必要な OpenTelemetry 計測が含まれています。レイヤー抽出ステップにより、以下が保証されます。
-
layer.zip のコンテンツが
/opt/ directory
に適切に抽出される -
otel-instrument
スクリプトに適切な実行アクセス許可が付与される -
イメージサイズを小さく保つために一時 Layer.zip ファイルが削除される
-
-
Lambda 関数コード –
src/main/java/com/example/lambda/App.java:
で Lambda ハンドラーの Java ファイルを作成しますプロジェクトは次のようになります。
. ├── Dockerfile ├── pom.xml └── src └── main ├── java │ └── com │ └── example │ └── java │ └── lambda │ └── App.java └── resources
-
コンテナイメージをビルドしてデプロイする
環境変数をセットアップする
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)
ECR で認証する
最初にパブリック ECR で認証 (ベースイメージ用):
aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws
次にプライベート ECR で認証:
aws ecr get-login-password --region $AWS_REGION | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com
イメージをビルド、タグ付け、プッシュする
# 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
-
Lambda 関数を作成して設定する
Lambda コンソールを使用して関数を新規作成します。
デプロイオプションとして [コンテナイメージ] を選択します。
[イメージを参照] を選択して、Amazon ECR イメージを選択します。
-
テストと検証 – シンプルなイベントで Lambda をテストします。レイヤーの統合に成功すると、Lambda が Application Signals サービスマップの下に表示されます。
CloudWatch コンソールに Lambda 関数のトレースとメトリクスが表示されます。
トラブルシューティング
Application Signals が機能しない場合は、以下を確認してください。
-
OpenTelemetry 計測に関連するエラーがないか関数ログを確認する
-
環境変数
AWS_LAMBDA_EXEC_WRAPPER
が正しく設定されているかどうかを確認する -
Docker ファイル内のレイヤー抽出が正常に完了していることを確認する
-
IAM アクセス許可が正しくアタッチされているかどうかを確認する
-
必要に応じて、Lambda 関数の全般設定にある [タイムアウトとメモリ] の設定を増やします
-
- .Net
-
OpenTelemetry Layer と Application Signals のサポートをコンテナ化された .Net Lambda 関数に統合し、
layer.zip
アーティファクトをダウンロードして、それを .Net Lambda 関数コンテナに統合することによって Application Signals モニタリングを有効にする方法について説明します。前提条件
-
認証情報を使って設定した AWS CLI
-
インストールされている Docker
-
.Net 8 SDK
-
これらの手順は、x86_64 プラットフォームを使用していることを前提としています。
-
プロジェクト構造のセットアップ
Lambda 関数コンテナイメージ用のディレクトリを作成する
mkdir dotnet-appsignals-container-lambda && \ cd dotnet-appsignals-container-lambda
-
Dockerfile を作成する
OpenTelemetry Layer と Application Signals のサポートをダウンロードして、Lambda コンテナイメージに直接統合します。これを行うために、
Dockerfile
ファイルが作成されます。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"]
注記
layer.zip
ファイルには、Lambda 関数をモニタリングする AWS Application Signals のサポートに必要な OpenTelemetry 計測が含まれています。レイヤー抽出ステップにより、以下が保証されます。
-
layer.zip のコンテンツが
/opt/ directory
に適切に抽出される -
otel-instrument
スクリプトに適切な実行アクセス許可が付与される -
イメージサイズを小さく保つために一時 Layer.zip ファイルが削除される
-
-
Lambda 関数コード – AWS Lambda .NET テンプレートを使用して Lambda プロジェクトを初期化します。
# 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
プロジェクトは次のようになります。
. ├── 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
-
コンテナイメージをビルドしてデプロイする
環境変数をセットアップする
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)
Function.cs
コードを次のように更新します。dotnet-lambda-function.csproj
コードを次のように更新します。<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>
-
コンテナイメージをビルドしてデプロイする
環境変数をセットアップする
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)
パブリック Amazon ECR を使用して認証する
aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws
プライベート 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 リポジトリを作成する (必要に応じて)
aws ecr create-repository \ --repository-name lambda-appsignals-demo \ --region $AWS_REGION
イメージをビルド、タグ付け、プッシュする
# 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
-
Lambda 関数を作成して設定する
Lambda コンソールを使用して関数を新規作成します。
デプロイオプションとして [コンテナイメージ] を選択します。
[イメージを参照] を選択して、Amazon ECR イメージを選択します。
-
テストと検証 – シンプルなイベントで Lambda をテストします。レイヤーの統合に成功すると、Lambda が Application Signals サービスマップの下に表示されます。
CloudWatch コンソールに Lambda 関数のトレースとメトリクスが表示されます。
トラブルシューティング
Application Signals が機能しない場合は、以下を確認してください。
-
OpenTelemetry 計測に関連するエラーがないか関数ログを確認する
-
環境変数
AWS_LAMBDA_EXEC_WRAPPER
が正しく設定されているかどうかを確認する -
Docker ファイル内のレイヤー抽出が正常に完了していることを確認する
-
IAM アクセス許可が正しくアタッチされているかどうかを確認する
-
必要に応じて、Lambda 関数の全般設定にある [タイムアウトとメモリ] の設定を増やします
-
- Node.js
-
OpenTelemetry Layer と Application Signals のサポートをコンテナ化された Node.js Lambda 関数に統合し、
layer.zip
アーティファクトをダウンロードして、それを Node.js Lambda 関数コンテナに統合することによって Application Signals モニタリングを有効にする方法について説明します。前提条件
-
認証情報を使って設定した AWS CLI
-
インストールされている Docker
-
これらの手順は、x86_64 プラットフォームを使用していることを前提としています。
-
プロジェクト構造のセットアップ
Lambda 関数コンテナイメージ用のディレクトリを作成する
mkdir nodejs-appsignals-container-lambda &&\ cd nodejs-appsignals-container-lambda
-
Dockerfile を作成する
OpenTelemetry Layer と Application Signals のサポートをダウンロードして、Lambda コンテナイメージに直接統合します。これを行うために、
Dockerfile
ファイルが作成されます。# 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" ]
注記
layer.zip
ファイルには、Lambda 関数をモニタリングする AWS Application Signals のサポートに必要な OpenTelemetry 計測が含まれています。レイヤー抽出ステップにより、以下が保証されます。
-
layer.zip のコンテンツが
/opt/ directory
に適切に抽出される -
otel-instrument
スクリプトに適切な実行アクセス許可が付与される -
イメージサイズを小さく保つために一時 Layer.zip ファイルが削除される
-
-
Lambda 関数コード
以下のコンテンツを含む
index.js
ファイルを作成します。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; };
プロジェクト構造は次のようになります。
. ├── Dockerfile └── index.js
-
コンテナイメージをビルドしてデプロイする
環境変数をセットアップする
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)
パブリック Amazon ECR を使用して認証する
aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws
プライベート 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 リポジトリを作成する (必要に応じて)
aws ecr create-repository \ --repository-name lambda-appsignals-demo \ --region $AWS_REGION
イメージをビルド、タグ付け、プッシュする
# 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
-
Lambda 関数を作成して設定する
Lambda コンソールを使用して関数を新規作成します。
デプロイオプションとして [コンテナイメージ] を選択します。
[イメージを参照] を選択して、Amazon ECR イメージを選択します。
-
テストと検証 – シンプルなイベントで Lambda をテストします。レイヤーの統合に成功すると、Lambda が Application Signals サービスマップの下に表示されます。
CloudWatch コンソールに Lambda 関数のトレースとメトリクスが表示されます。
トラブルシューティング
Application Signals が機能しない場合は、以下を確認してください。
-
OpenTelemetry 計測に関連するエラーがないか関数ログを確認する
-
環境変数
AWS_LAMBDA_EXEC_WRAPPER
が正しく設定されているかどうかを確認する -
Docker ファイル内のレイヤー抽出が正常に完了していることを確認する
-
IAM アクセス許可が正しくアタッチされているかどうかを確認する
-
必要に応じて、Lambda 関数の全般設定にある [タイムアウトとメモリ] の設定を増やします
-
- Python
-
OpenTelemetry Layer と Application Signals のサポートをコンテナ化された Python Lambda 関数に統合し、
layer.zip
アーティファクトをダウンロードして、それを Python Lambda 関数コンテナに統合することによって Application Signals モニタリングを有効にする方法について説明します。前提条件
-
認証情報を使って設定した AWS CLI
-
インストールされている Docker
-
これらの手順は、x86_64 プラットフォームを使用していることを前提としています。
-
プロジェクト構造のセットアップ
Lambda 関数コンテナイメージ用のディレクトリを作成する
mkdir python-appsignals-container-lambda &&\ cd python-appsignals-container-lambda
-
Dockerfile を作成する
OpenTelemetry Layer と Application Signals のサポートをダウンロードして、Lambda コンテナイメージに直接統合します。これを行うために、
Dockerfile
ファイルが作成されます。注記
layer.zip
ファイルには、Lambda 関数をモニタリングする AWS Application Signals のサポートに必要な OpenTelemetry 計測が含まれています。レイヤー抽出ステップにより、以下が保証されます。
-
layer.zip のコンテンツが
/opt/ directory
に適切に抽出される -
otel-instrument
スクリプトに適切な実行アクセス許可が付与される -
イメージサイズを小さく保つために一時 Layer.zip ファイルが削除される
-
-
Lambda 関数コード
app.py
ファイルに Lambda 関数を作成します。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)}' }) }
プロジェクト構造は次のようになります。
. ├── Dockerfile ├── app.py └── instructions.md
-
コンテナイメージをビルドしてデプロイする
環境変数をセットアップする
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)
パブリック Amazon ECR を使用して認証する
aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws
プライベート 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 リポジトリを作成する (必要に応じて)
aws ecr create-repository \ --repository-name lambda-appsignals-demo \ --region $AWS_REGION
イメージをビルド、タグ付け、プッシュする
# 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
-
Lambda 関数を作成して設定する
Lambda コンソールを使用して関数を新規作成します。
デプロイオプションとして [コンテナイメージ] を選択します。
[イメージを参照] を選択して、Amazon ECR イメージを選択します。
-
テストと検証 – シンプルなイベントで Lambda をテストします。レイヤーの統合に成功すると、Lambda が Application Signals サービスマップの下に表示されます。
CloudWatch コンソールに Lambda 関数のトレースとメトリクスが表示されます。
トラブルシューティング
Application Signals が機能しない場合は、以下を確認してください。
-
OpenTelemetry 計測に関連するエラーがないか関数ログを確認する
-
環境変数
AWS_LAMBDA_EXEC_WRAPPER
が正しく設定されているかどうかを確認する -
Docker ファイル内のレイヤー抽出が正常に完了していることを確認する
-
IAM アクセス許可が正しくアタッチされているかどうかを確認する
-
必要に応じて、Lambda 関数の全般設定にある [タイムアウトとメモリ] の設定を増やします
-