AWS Lambdaと使用するAWS X-Ray - AWS Lambda

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

AWS Lambdaと使用するAWS X-Ray

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

関数を呼び出すサービスで X-Ray のトレースを有効にすると、トレースは Lambda から自動的に X-Ray に送信されます。Amazon API Gateway などのアップストリームサービスや、X-Ray SDK でインストルメントされた Amazon EC2 でホストされているアプリケーションは、着信リクエストをサンプリングし、トレースを送信するかどうかを Lambda に指示するトレースヘッダーを追加します。Amazon SQS などのアップストリームメッセージプロデューサーからのトレースは、ダウンストリーム Lambda 関数からのトレースに自動的にリンクされ、アプリケーション全体の end-to-end ビューが作成されます。詳細については、「AWS X-Ray デベロッパーガイド」の「イベント駆動型アプリケーションのトレース」を参照してください。

注記

X-Ray トレースは、現在、Amazon Managed Streaming for Apache Kafka (Amazon MSK)、セルフマネージド Apache Kafka、ActiveMQ と RabbitMQ 向けの Amazon MQ、または Amazon DocumentDB イベントソースマッピングを備えた Lambda 関数ではサポートされていません。

コンソールを使用して、Lambda 関数のアクティブトレースをオンにするには、次のステップに従います。

アクティブトレースをオンにするには
  1. Lambda コンソールの [関数ページ] を開きます。

  2. 関数を選択します。

  3. [設定] を選択してから、[モニタリングおよび運用ツール] を選択します。

  4. [編集] を選択します。

  5. [X-Ray] で、[アクティブトレース] をオンに切り替えます。

  6. [保存] をクリックします。

料金

X-Ray トレースは、毎月、AWS 無料利用枠で設定された一定限度まで無料で利用できます。X-Ray の利用がこの上限を超えた場合は、トレースによる保存と取得に対する料金が発生します。詳細については、「AWS X-Ray 料金表」を参照してください。

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

X-Ray は、アプリケーションへのすべてのリクエストをトレースするわけではありません。X-Ray は、サンプリングアルゴリズムを適用することで効率的なトレースを行うと同時に、すべてのリクエストについての代表的なサンプルを示します。サンプルレートは 1 秒あたり 1 回のリクエストで、追加リクエストの 5% です。

注記

関数の X-Ray サンプルレートは設定することはできません。

X-Ray では、トレースは 1 つ以上のサービスによって処理されるリクエストに関する情報を記録します。サービスは、サブセグメントのレイヤーを含むセグメントを記録します。Lambda は、Lambda サービスのセグメントと、関数によって行われた作業用のセグメントを記録します。関数セグメントには InitializationInvocationRestore、(Lambda SnapStart のみ)、および Overhead のサブセグメントが含まれます。詳細については、「 Lambda 実行環境のライフサイクル」を参照してください。

注記

X-Ray は、Lambda 関数内の未処理の例外を Error ステータスとして扱います。X-Ray が Fault ステータスを記録するのは、Lambda で内部サーバーエラーが発生した場合のみです。詳細については、「X-Ray Developer Guide」(X-Ray デベロッパーガイド) の「Errors, faults, and exceptions」(エラー、障害、および例外) を参照してください。

Initialization サブセグメントは、Lambda 実行環境ライフサイクルの初期フェーズを表します。このフェーズ中、Lambda は、設定したリソースを使用して実行環境を作成またはフリーズ解除し、関数コードとすべてのレイヤーをダウンロードして、拡張機能とランタイムの初期化、関数の初期化コードを実行します。

Invocation サブセグメントは呼び出しフェーズを現し、Lambda は関数ハンドラーを呼び出します。これはランタイムと拡張機能の登録から始まり、ランタイムが応答を送信する準備ができたら完了します。

(Lambda SnapStart のみ) Restore サブセグメントは、Lambda がスナップショットを復元し、ランタイム (JVM) をロードして、afterRestore ランタイムフックを実行するのにかかる時間を表しています。スナップショットを復元するプロセスには、MicroVM 外部でのアクティビティに費やす時間が含まれる場合があります。この時間は、Restore サブセグメントで報告されます。MicroVM 外部でスナップショットの復元に費やした時間については課金されません。

Overhead サブセグメントは、ランタイムが応答を送信してから、次の呼び出しのシグナルを送信するまでの間に発生するフェーズを表します。この間、ランタイムは呼び出しに関連するすべてのタスクを終了し、サンドボックスをフリーズする準備をします。

注記

時折、X-Ray トレースの関数初期化フェーズと呼び出しフェーズの間に大きなギャップがあることに気付くことがあります。プロビジョニングされた同時実行を使用する関数の場合、これが発生するのは Lambda が呼び出しに先立って関数インスタンスを初期化するからです。予約されていない (オンデマンド) 同時実行を使用する関数の場合、Lambda は、呼び出しがない場合でも先を見越して関数インスタンスを初期化することがあります。視覚的には、これらのケースの両方が、初期化フェーズと呼び出しフェーズ間における時間のギャップとして表示されます。

重要

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

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

アクティブなインストルメンテーションをサポートするサービスの詳細なリストについては、AWS X-Ray デベロッパーガイドの Supported AWS services を参照してください。

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

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 デベロッパーガイド の The X-Ray daemon を参照してください。

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 Serverless Application Model (AWS SAM) AWS::Serverless::Function リソースに、Tracing プロパティを使用します。

template.yml - トレース設定
Resources: function: Type: AWS::Serverless::Function Properties: Tracing: Active ...