AWS Lambda 向けサーバレス APM は、既存のエンドユーザモニタリング(EUM)設定と統合できるように設計されています。EUM 統合は、web およびモバイルアプリケーションのパフォーマンスに対する完全なエンドツーエンドの可視性を確保し、エンドユーザデバイスからサーバレス機能を介してエンドユーザデバイスのコールを関連付け、ビジネストランザクションを続行します。

AWS Lambda 関数は、EUM と AWS Lambda によって発信されたビジネストランザクションを、次の EUM エージェントとともに関連付けることができます。

このドキュメントでは、Splunk AppDynamics エンドユーザーモニタリングに精通していることを前提としています。「エンドユーザモニタリング」を参照してください。

はじめに

展開に次のものを使用していることを確認します。

  • Python サーバレストレーサとともにインストゥルメント化された AWS Lambda 関数
  • アクティブな EUM ライセンスと JavaScript エージェント

EUM 環境変数の追加

デフォルトでは、Python サーバレストレーサの EUM 統合がオフになっています。 

EUM 統合を有効にするには、APPDYNAMICS_ENABLE_EUM 環境変数を true に設定します。詳細については、サーバレス APM 環境のセットアップを参照してください。 

応答ヘッダーマッピングの設定

応答ヘッダーマッピングを設定して、ADRUM_n ヘッダーをブラウザに戻します。応答ヘッダーマッピングを次のように設定できます。

  • AWS API ゲートウェイの使用
  • AWS Lambda プロキシ統合を介して直接渡す
  • 関数コードで EUM メタデータを返す

Amazon API ゲートウェイでの応答ヘッダーマッピング

Amazon API ゲートウェイの各 ADRUM_n ヘッダーのヘッダーマッピングを追加します。「Amazon API Gateway API request and response data mapping reference」を参照してください。

次の表に、必要な応答ヘッダーとそのマッピング値を示します。

応答ヘッダーマッピング値
ADRUM_3integration.response.body.headers.ADRUM_3
ADRUM_2integration.response.body.headers.ADRUM_2
ADRUM_1integration.response.body.headers.ADRUM_1
ADRUM_0integration.response.body.headers.ADRUM_0

AWS Lambda プロキシ統合での応答ヘッダーマッピング

カスタム統合の代わりに、AWS Lambda プロキシ統合により、クライアントはバックエンドの各機能を呼び出し、JSON 形式の出力を返すことができます。このような応答をマッピングするには、出力オブジェクトクラスのヘッダーフィールドに各シングル値 ADRUM_n ヘッダーを直接追加します。Amazon のマニュアルを参照してください。

すべての他の呼び出しの応答ヘッダーマッピング

EUM メタデータを収集するには、応答ヘッダーマッピングを設定する必要があります。次のコード例では、サーバレストレーサで appDEumHeaders メソッドを呼び出します。このメソッドは、ADRUM_n ヘッダーを含むオブジェクトを返します。ダウンストリームの JavaScript エージェントによって、消費用のダウンストリームサービスにこのオブジェクトを渡します。

次のコードスニペットは、EUM メタデータを返す方法を示しています。

@appdynamics.tracer
def my_lambda_handler(event, context):    


	#Get the current transaction object
    transaction = appdynamics.get_current_transaction()    


	#Stop the transaction
    appdynamics.stop_transaction()    


	#Return EUM metadata
    eum_headers = appdynamics.get_eum_metadata(transaction)
    return {
        "eum_metadata": eum_headers,
        "data": "call to Lambda is a success"
    }
PY

フロントエンド アプリケーションの更新

EUM と AWS Lambda で発信されたビジネストランザクション間の相関関係を表示するには、「JavaScript エージェントの挿入」で説明されているように、JavaScript エージェントをブラウザの HTML に挿入する必要があります。

CORS 設定の有効化

ブラウザには、ブラウザ要求からドメイン(基本ページのドメイン以外)の応答にアクセスする関数の Cross-Origin Resource Sharing(CORS)が必要です。クロスドメインのアクセス権を該当するすべての ADRUM_n ヘッダーに明示的に付与する必要があります。 

CORS 設定を有効にするには、次の手順を実行します。

  1. Amazon API ゲートウェイで必要な AWS 応答ヘッダーを定義します。詳細なヘッダーおよび追加情報については、AWS のドキュメントを参照してください
    • Access-Control-Expose-Headers :カスタム ADRUM ヘッダーをマッピングします。これらのヘッダーには、JavaScript エージェントと互換性を確保できるように ADRUM_0 ~ ADRUM_3 という名前を使用する必要があります。
    • Access-Control-Allow-Methods :適切なメソッドを使用してヘッダーを確認します。
    • Access-Control-Allow-Origin :スキーマ、ホスト名、ポートなど、リクエストを発信した Web ページの完全な URL に設定します。
  2. CORS を有効にした後、応答ヘッダーマッピングを定義する必要があります。Amazon API ゲートウェイで応答ヘッダーマッピングを設定するには、Amazon のマニュアルを参照してください。
    以下のリストに、応答ヘッダーと CORS 設定のマッピング値の例を示します。

    • Access-Control-Expose-Headers: `ADRUM_0,ADRUM_1,ADRUM_2,ADRUM_3`
    • Access-Control-Allow-Credentials: `true`
    • Access-Control-Allow-Methods: `POST,OPTIONS`
    • Access-Control-Allow-Origin: `http://my-saas-service.com:8000`
  3. (オプション)プロキシ統合を介して Amazon API ゲートウェイに関数を接続する場合は、関数コード内の CORS 応答ヘッダーマッピングを定義します。
    # Return EUM Metadata
    eum_headers = appdynamics.get_eum_metadata(transaction)
    	return_headers = {
          'Access-Control-Allow-Origin': 'http://my-saas-service.com:8000',
          'Access-Control-Allow-Credentials': True,
          'Access-Control-Expose-Headers': 'ADRUM_0,ADRUM_1,ADRUM_2,ADRUM_3'
    	}
    JS

EUM 統合のトラブルシューティング

EUM データとビジネストランザクションの間に相関関係が表示されない場合は、ブラウザでアクティビティをキャプチャする HTTP アーカイブ(HAR)ファイルを収集します。HAR ファイルを使用して、必要なすべての CORS ヘッダーが設定され、予想されるデータが ARUM_n ヘッダーに設定されていることを確認します。 

EUM のドキュメントには、トラブルシューティングの追加アドバイスが記載されています。

このページには、AWS のマニュアルへのリンクが含まれています。Amazon で自身のマニュアルを管理しているため、Splunk AppDynamics では Amazon のマニュアルの精度については一切保証しません。

これらのマニュアルで使用されている Amazon Web サービス、AWS ロゴ、AWS、およびその他の AWS マークは、米国およびその他の国における Amazon.com, Inc. またはその関連会社の商標です。