Download PDF
Download page Node.js サーバレストレーサ API.
Node.js サーバレストレーサ API
このページでは、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;
}
exit コールタイプおよび識別プロパティ
コントローラでは、すべての終了コールに個別のタイプがあり、一連の識別プロパティによって決定されます。終了コールのタイプ、サブタイプ、および識別プロパティを次に示します。終了コールサブタイプの場合、表に記載されている例を使用するか、空の文字列を使用できます。識別プロパティは文字列である必要があります。
終了コールタイプ | exit コールサブタイプ | 識別プロパティ |
---|---|---|
HTTP | HTTP |
|
DB | DB |
|
キャッシュ | キャッシュ |
|
カスタム | CASSANDRA CQL COUCHBASE AMAZON WEB SERVICES MONGODB | ユーザ定義のプロパティセット。 |
次のインターセプタがサポートされており、CommonJS での手動でのインストゥルメンテーションは必要ありません。
lambda.invoke
およびlambda.invokeAsync
のaws_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);
}
}
トランザクション エラー レポート
デフォルトでは、トレーサによって例外が自動的に検出されます。ビジネスロジックで他の何らかの理由でトランザクションがエラーとして定義されている場合は、エラーレポートメソッドをカスタマイズして、トランザクションにエラーがあるとマークすることができます。
次のコードスニペットは、トランザクション エラー レポートを作成する方法を示しています。
// 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);
}
終了コールエラーレポート
デフォルトでは、トレーサは、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;
}
トレーサのデフォルトの動作のオーバーライド
関数/ビジネストランザクション名をカスタマイズするか、ソースコードでトレーサ設定を維持する場合は、環境変数をオーバーライドして、必要なソースから実行時に値を取得できるようにします。
次のコードスニペットは、トレーサのデフォルト動作をオーバーライドする方法について説明します。
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
});
これらのマニュアルで使用されている Amazon Web サービス、AWS ロゴ、AWS、およびその他の AWS マークは、米国およびその他の国における Amazon.com, Inc. またはその関連会社の商標です。