このページでは、Node.js サーバレストレーサ API を使用して構成を細かく調整する方法について説明します。

終了コールの作成または変更

関数が ES6 を使用している場合、または、HTTP コールまたは AWS Lambda 間のコール以外の exit コールが含まれている場合は、exit コールを作成する必要があります。

次のコードスニペットは、MySQL データベースを呼び出す AWS Lambda 関数の終了コールを作成する方法を示しています。

// Use the exit call API in your AWS Lambda handler function
 
module.exports.myLambdaHandler = async function () {
  const queryPromise = new Promise(function (resolve, reject) {
    const dbConfig = {
      host: '127.0.0.1', // The host where MySQL server runs
      port: 3306, // Note that this is not an identifying property. Identifying properties must be strings
      user: 'root',
      database: 'movies'
    };
    const mysql = require('mysql');
    const mysqlClient = mysql.createPool(dbConfig);
    mysqlClient.getConnection(function (err, connection) {
      if (err) {
        reject({
          statusCode: 500,
          body: 'Couldn\'t make the connection to mysql client.'
        });
        return;
      }
      // Create an Exit Call
      var exitCall = tracer.startExitCall({
        exitType: 'DB',
        exitSubType: 'DB',
        identifyingProperties: {
          'HOST': '127.0.0.1', // The host where MySQL server runs
          'PORT': '3306', 
          'DATABASE': 'movies',
          'VENDOR': 'MYSQL'
        }
      });
      connection.query('SELECT * FROM ClassicHits', function (err, results) {
        connection.release();
        if (err) {
          reject({
            statusCode: 500,
            body: 'Mysql query failed'
          });
          return;
        }
 
		// Stop the Exit Call
        tracer.stopExitCall(exitCall);
        resolve({
          statusCode: 200,
          body: JSON.stringify(results)
        });
      });
    });
  });
  return queryPromise;
}
JS

exit コールタイプおよび識別プロパティ

コントローラでは、すべての終了コールに個別のタイプがあり、一連の識別プロパティによって決定されます。終了コールのタイプ、サブタイプ、および識別プロパティを次に示します。終了コールサブタイプの場合、表に記載されている例を使用するか、空の文字列を使用できます。識別プロパティは文字列である必要があります。

終了コールタイプ

exit コールサブタイプ

識別プロパティ

HTTPHTTP

HOST

PORT

URL

QUERY STRING

DB

DB


URL

HOST

PORT

DATABASE

VERSION

VENDOR

キャッシュ

キャッシュ


VENDOR

SERVER POOL 

カスタム

CASSANDRA CQL

COUCHBASE

AMAZON WEB SERVICES

MONGODB


ユーザ定義のプロパティセット。

次のインターセプタがサポートされており、CommonJS での手動でのインストゥルメンテーションは必要ありません。

  • lambda.invoke および lambda.invokeAsyncaws_sdk
  • http および https ライブラリ

API 定義の出口によるトランザクション相関

Node.js サーバレストレーサの終了コールを手動で作成する場合は、相関ヘッダーを見つける必要があります。これは、関数が HTTP または AWS Lambda 間の終了コールを使用しない場合に必要です。 

次のコードスニペットは、相関ヘッダーを作成する方法を示しています。

module.exports.myLambdaHandler = function () {
    // Start Exit Call
    var exitCall = tracer.startExitCall({
      // Fill in with the exit call information
    });

    //Get your correlation header
    if (exitCall) {
        var correlationHeader = tracer.createCorrelationInfo(exitCall);
    }

    /*
     * Your exit call code. 
     * Pass the correlation header in the exit call for downstream correlation.
     */

    // Stop the exit call
    if (exitCall) {
        tracer.stopExitCall(exitCall);
    }
}
JS


トランザクション エラー レポート

デフォルトでは、トレーサによって例外が自動的に検出されます。ビジネスロジックで他の何らかの理由でトランザクションがエラーとして定義されている場合は、エラーレポートメソッドをカスタマイズして、トランザクションにエラーがあるとマークすることができます。 

次のコードスニペットは、トランザクション エラー レポートを作成する方法を示しています。

// Transaction Error Report
module.exports.apiTransactionErrorReport = function(event, context, callback) {
  setTimeout(function () {
    tracer.reportTransactionError(new Error('API Error'));
    callback(null, {
      statusCode: 200,
      body: 'Transaction Error Reported'
    });
  }, 100);
}

JS

終了コールエラーレポート

デフォルトでは、トレーサは、HTTP または AWS Lambda 間のコールを介して渡された終了コールを自動的に検出します。reportExitCallError メソッドを使用し、終了コール実行時に発生するエラーおよび例外を報告します。

次のコードスニペットは、終了コールエラーレポートを作成する方法を示しています。

// Use the Exit Call API in your AWS Lambda handler function
  
module.exports.myLambdaHandler = async function () {
  const queryPromise = new Promise(function (resolve, reject) {
    const dbConfig = {
      host: '127.0.0.1', // The host where your MySQL server runs
      port: 3306, // Note that this is not an identifying property. Identifying properties must be strings
      user: 'root',
      database: 'movies'
    };
    const mysql = require('mysql');
    const mysqlClient = mysql.createPool(dbConfig);
    mysqlClient.getConnection(function (err, connection) {
      if (err) {
        reject({
          statusCode: 500,
          body: 'Couldn\'t make the connection to mysql client.'
        });
        return;
      }
      // Create an Exit Call
      var exitCall = tracer.startExitCall({
        exitType: 'DB',
        exitSubType: 'DB',
        identifyingProperties: {
          'HOST': '127.0.0.1', // The host where your MySQL server runs
          'PORT': '3306',
          'DATABASE': 'movies',
          'VENDOR': 'MYSQL'
        }
      });
      connection.query('SELECT * FROM ClassicHits', function (err, results) {
        connection.release();
 
		//Create an Exit Call error report
        if (err) {
          tracer.reportExitCallError(exitCall, 'MYSql error', 'Failed in making the query');
          reject({
            statusCode: 500,
            body: 'Mysql query failed'
          });
          return;
        }
        resolve({
          statusCode: 200,
          body: JSON.stringify(results)
        });
      });
    });
  });
  return queryPromise;
}
JS

トレーサのデフォルトの動作のオーバーライド

関数/ビジネストランザクション名をカスタマイズするか、ソースコードでトレーサ設定を維持する場合は、環境変数をオーバーライドして、必要なソースから実行時に値を取得できるようにします。

次のコードスニペットは、トレーサのデフォルト動作をオーバーライドする方法について説明します。

tracer.init({
  controllerHostName: 'controllerHost',
  controllerPort: 8080,
  accountAccessKey: 'controllerAccountAccessKey',
  accountName: 'controllerAccountName',
  applicationName: 'applicationName',
  tierName: 'tierName',
  serverlessApiEndpoint: 'serverlessApiEndpoint',
  proxyHost: 'proxyHost',
  proxyPort: '80',
  proxyUser: 'proxyUser',
  proxyPassword: 'proxyPassword',
  certificateFile: 'proxyCertFile',
  debug: true
});
JS


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