AWS X-Ray で AWS Lambda を使用する - AWS Lambda

AWS X-Ray で AWS Lambda を使用する

AWS X-Ray を使用して、アプリケーションのコンポーネントの視覚化、パフォーマンスのボトルネックの特定、およびエラーの原因となったリクエストのトラブルシューティングを行うことができます。Lambda 関数はトレースデータを X-Ray に送信し、X-Ray はデータを処理してサービスマップと検索可能なトレースサマリーを生成します。


      Lambda 関数、X-Ray、Amazon S3 および CloudWatch Logs のノードを示すサービスマップ

関数を呼び出すサービスで X-Ray のトレースを有効にすると、トレースは X-Ray から Lambda に自動的に送信されます。Amazon API Gateway などのアップストリームサービスや、X-Ray SDK でインストルメントされた Amazon EC2 でホストされているアプリケーションは、着信リクエストをサンプリングし、トレースを送信するかどうかを Lambda に指示するトレースヘッダーを追加します。

トレースヘッダーがないリクエストをトレースするには、関数の設定でアクティブトレースを有効にします。

アクティブトレースを有効にするには

  1. Lambda コンソール (関数ページ) を開きます。

  2. 関数を選択します。

  3. [AWS X-Ray] で、[アクティブトレース] を選択します。

  4. [Save] を選択します。

料金

X-Ray には期限なしの無料利用枠があります。無料利用枠のしきい値を超えると、X-Ray ではトレースのストレージと取得に課金されます。詳細については、「AWS X-Ray 料金表」を参照してください。

関数には、トレースデータを X-Ray にアップロードするためのアクセス許可が必要です。Lambda コンソールでアクティブトレースを有効にすると、Lambda によって関数の実行ロールに必要なアクセス許可が追加されます。それ以外の場合は、AWSXRayDaemonWriteAccess ポリシーを実行ロールに追加します。

X-Ray はサンプリングアルゴリズムを適用することで、トレースを効率的にしつつ、アプリケーションが処理するリクエストの代表的なサンプルを提供できるようにします。デフォルトのサンプリングルールは 1 秒あたり 1 回のリクエストおよび追加リクエストの 5 パーセントです。このサンプリングレートは、Lambda 関数には設定できません。

X-Ray では、トレースは 1 つ以上のサービスによって処理されるリクエストに関する情報を記録します。サービスは、サブセグメントのレイヤーを含むセグメントを記録します。Lambda は、呼び出しリクエストを処理する Lambda サービスのセグメントと、関数によって行われた作業用のセグメントを記録します。関数セグメントには InitializationInvocation および Overhead のサブセグメントが含まれます。

次の例は、2 つのセグメントのあるトレースを示しています。どちらも my-function という名前ですが、1 つは AWS::Lambda 型で、もう 1 つは AWS::Lambda::Function 型です。関数セグメントを拡張して、そのサブセグメントを表示します。

重要

Lambda では、X-Ray SDK を使用して、ダウンストリーム呼び出し、注釈、およびメタデータ用の追加のサブセグメントで、Invocation サブセグメントを拡張できます。関数セグメントに直接アクセスしたり、ハンドラーの呼び出しスコープの外で行われた作業を記録したりすることはできません。

Lambda のトレースに関する言語固有の概要については、次のトピックを参照してください。

アクティブなインストルメンテーションをサポートするサービスの詳細なリストについては、AWS X-Ray 開発者ガイドの「サポートされている AWS のサービス」を参照してください。

実行ロールのアクセス許可

Lambda には、トレースデータを X-Ray に送信するために次のアクセス許可が必要です。これを関数の実行ロールに追加します。

これらのアクセス許可は、AWSXRayDaemonWriteAccess 管理ポリシーに含まれています。

AWS X-Ray デーモン

トレースデータを X-Ray API に直接送信する代わりに、X-Ray SDK はデーモンプロセスを使用します。AWS X-Ray デーモンは、Lambda 環境で実行され、セグメントとサブセグメントを含む UDP トラフィックをリッスンするアプリケーションです。受信データをバッファリングし、バッチで X-Ray に書き込みます。これにより、呼び出しのトレースに必要な処理とメモリのオーバーヘッドが削減されます。

Lambda ランタイムでは、デーモンは関数の設定されているメモリの 3% または 16 MB のいずれか大きい方まで使用することができます。呼び出し中に関数のメモリが不足すると、ランタイムはデーモンプロセスを最初に終了してメモリを解放します。

デーモンプロセスは、Lambda によるフルマネージドプロセスであり、ユーザーが設定することはできません。関数呼び出しによって生成されたすべてのセグメントは、Lambda 関数と同じアカウントに記録されます。デーモンは、他のアカウントにリダイレクトするように設定できません。

詳細については、X-Ray 開発者ガイドの「X-Ray デーモン」を参照してください。

Lambda API でのアクティブトレースの有効化

AWS CLI または AWS SDK を使用してトレース設定を管理するには、以下の API オペレーションを使用します。

以下の例の AWS CLI コマンドは、my-function という名前の関数でアクティブトレースを有効にします。

$ aws lambda update-function-configuration --function-name my-function \ --tracing-config Mode=Active

トレースモードは、関数のバージョンの公開時にロックされるバージョン固有の設定に含まれます。公開後のバージョンのトレースモードを変更することはできません。

AWS CloudFormation でのアクティブトレースの有効化

AWS CloudFormation テンプレートで AWS::Lambda::Function リソースに対してアクティブトレースを有効にするには、TracingConfig プロパティを使用します。

function-inline.yml – トレース設定

Resources: function: Type: AWS::Lambda::Function Properties: TracingConfig: Mode: Active ...

AWS サーバーレスアプリケーションモデル (AWS SAM) AWS::Serverless::Function リソースに、Tracing プロパティを使用します。

template.yml – トレース設定

Resources: function: Type: AWS::Serverless::Function Properties: Tracing: Active ...