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

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

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

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

はじめに

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

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

EUM 環境変数の追加

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

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

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

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

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

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

Amazon API ゲートウェイの各 ADRUM_n ヘッダーのヘッダーマッピングを追加します。Amazon API ゲートウェイで応答ヘッダーマッピングを設定するには、Amazon ドキュメントを参照してください。

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

応答ヘッダーマッピング値
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 メタデータを返す方法を示しています。

module.exports.myLambdaHandler = function (event, context, callback) {
  setTimeout(function () {
 
	////Call a transaction object
    let appDBusinessTxn = tracer.getCurrentTransaction();
 
	//Stop the transaction
    tracer.stopTransaction();
 
	//Return EUM Metadata
    let appDEumHeaders = tracer.getEumMetadata(appDBusinessTxn);
    callback(null, {
      eumMetadata: appDEumHeaders,
      data: 'Call to Lambda is a success'
    });
  }, 300);
}
JS


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

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

CORS 設定の有効化

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

CORS 設定を有効にするには、Amazon API ゲートウェイで必要な AWS 応答ヘッダーを定義します。

  • Access-Control-Expose-Headers :カスタム ADRUM ヘッダーをマッピングします。これらのヘッダーには、JavaScript エージェントと互換性を確保できるように ADRUM_0 ~ ADRUM_3 という名前を使用する必要があります。
  • Access-Control-Allow-Methods :適切なメソッドを使用してヘッダーを確認します
  • Access-Control-Allow-Origin スキーマ、ホスト名、ポートなど、要求を発信した web ページの完全な URL に設定します

詳細なヘッダーおよび追加情報については、AWS のドキュメントを参照してください。  

次のスクリーンショットは、Amazon API ゲートウェイで CORS を有効にする方法を示しています。

Enable Cross-Origin Resource Sharing

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

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`
(オプション)プロキシ統合を介して Amazon API ゲートウェイに関数を接続する場合は、関数コード内の CORS 応答ヘッダーマッピングを定義します。


//Return EUM Metadata
    let appDEumHeaders = tracer.getEumMetadata(appDBusinessTxn);
    let returnHeaders = {
      '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 のドキュメントには、トラブルシューティングの追加アドバイスが記載されています。