AWS Lambda
開発者ガイド

AWS X-Ray を使用する

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

関数を呼び出すサービスで X-Ray のトレースを有効にすると、トレースは X-Ray から Lambda に自動的に送信されます。Amazon API Gateway などのアップストリームサービスや、X-Ray SDK でインストルメントされた Amazon EC2 でホストされているアプリケーションは、着信リクエストをサンプリングし、トレースを送信するかどうかを Lambda に指示するトレースヘッダーを追加します。アクティブなインストルメンテーションをサポートするサービスの詳細なリストについては、AWS X-Ray 開発者ガイドの「サポートされている AWS のサービス」を参照してください。

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

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

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

  2. 関数を選択します。

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

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

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

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

環境変数を使用した AWS X-Ray との通信

AWS Lambda は、X-Ray デーモンとの通信を容易にするために環境変数を使用して、X-Ray SDK を設定します。

  • _X_AMZN_TRACE_ID: サンプリングデシジョン、トレース ID および親セグメント ID が含まれるトレースヘッダーが含まれます。(これらのプロパティの詳細については、トレースヘッダーを参照してください。) 関数が呼び出されたときに Lambda がトレースヘッダーを受信すると、ヘッダーは _X_AMZN_TRACE_ID 環境変数の入力に使用されます。トレースヘッダーが受信されない場合、Lambda がそれを生成します。

  • AWS_XRAY_CONTEXT_MISSING: X-Ray SDK はこの変数を使用して、関数が X-Ray データを記録しようとしたがトレーシングヘッダーを使用できない場合の動作を決定します。Lambda はデフォルトでこの値を LOG_ERROR に設定します。

  • AWS_XRAY_DAEMON_ADDRESS: この環境変数は、X-Ray デーモンのアドレスを IP_ADDRESS:PORT 形式で表示します。X-Ray デーモンのアドレスを使用して、X-Ray SDK を使用せず X-Ray デーモンにトレースデータを直接送信できます。

AWS X-Ray コンソールでの Lambda トレース: 例

以下に、2 つの異なる Lambda 関数の Lambda トレースを示します。各トレースで、異なる呼び出しタイプ (同期と非同期) のトレース構造を説明します。

  • 非同期 – 以下は、正常呼び出し 1 回および DynamoDB へのダウンストリーム呼び出し 1 回を行う非同期 Lambda リクエストの例です。

    Lambda サービスセグメントは応答時間をカプセル化します。応答時間とは、クライアントにレスポンス (例: 202) を返すまでにかかった時間です。これには、Lambda サービスキューで経過した時間 (ドウェル時間) および各呼び出し試行のサブセグメントが含まれます。(前述の例では呼び出し試行は 1 つのみ表示されています。) サービスセグメント内の各試行サブセグメントには、対応するユーザー関数セグメントがあります。この例では、ユーザー関数セグメントには 2 つのサブセグメントがあります。ハンドラ前に実行される関数の初期化コードを表す初期化サブセグメントと、DynamoDB への ListTables 呼び出しを表すダウンストリーム呼び出しサブセグメントです。

    各呼び出しセグメントおよび各ダウンストリーム呼び出しごとにステータスコードおよびエラーメッセージが表示されます。

  • 同期 – 以下に Amazon S3 へのダウンストリーム呼び出し 1 回を行う同期リクエストの例を示します。

    Lambda サービスセグメントはリクエストが Lambda サービスで経過した時間全体をキャプチャします。サービスセグメントには、対応するユーザー関数セグメントがあります。この例では、ユーザー関数セグメントに関数の初期化コード (ハンドラ前に実行されるコード) を表すサブセグメントおよび Amazon S3 への PutObject 呼び出しを表すサブセグメントが含まれます。

注記

HTTP 呼び出しをトレースする場合は、HTTP クライアントを使用する必要があります。詳細については、「X-Ray SDK for Java を使用してダウンストリーム HTTP ウェブサービスの呼び出しをトレースする」または「X-Ray SDK for Node.js を使用してダウンストリーム HTTP ウェブサービスの呼び出しをトレースする」を参照してください。