自動トレーサ インストゥルメンテーションは、次の手順で構成されます。

  1. トレーサのインスタンス化
  2. (オプション)相関ヘッダーメソッドのオーバーライド
  3. トランザクション オブジェクトの取得
  4. 外部終了コールの作成

Java サーバレストレーサのインスタンス化

自動インスタンス化は RequestStreamHandler インターフェイスと互換性があります。他のすべてのインターフェイスでは、手動でのインスタンス化が必要です。

RequestStreamHandlerは、AWS によって提供される事前定義されたハンドラです。詳細については、AWS マニュアルを参照してください。

トレーサを自動的にインスタンス化する場合:

  1. 現在のハンドラクラスを AppDynamics MonitoredRequestStreamHandler に拡張します。 
  2. ハンドラクラスの既存のメソッド handleMonitoredRequest の名前を変更します。 
コードスニペットは、トレーサを自動的にインスタンス化する方法を示しています。


package <MyTestPackage>;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
 
//AppDynamics tracer imports
import com.appdynamics.serverless.tracers.aws.api.AppDynamics;
import com.appdynamics.serverless.tracers.aws.api.MonitoredRequestStreamHandler;
import com.appdynamics.serverless.tracers.aws.api.ExitCall;
import com.appdynamics.serverless.tracers.aws.api.Tracer;
import com.appdynamics.serverless.tracers.aws.api.Transaction;

//Keyword extends makes MonitoredRequestStreamHanlder your project's superclass
public class <MaryHadALittleLambda> extends MonitoredRequestStreamHandler {
    
   @Override
	//Change your method to handleMonitoredRequest
    public void handleMonitoredRequest(InputStream input, OutputStream output, Context context) throws IOException {
    	}

        // Your AWS Lambda function code starts here, for example
		int letter = 0;
		while((letter = input.read()) >= 0) {
			output.write(Character.toUpperCase(letter));
        }
    }
JAVA

(オプション)相関ヘッダーメソッドのオーバーライド

自動インストゥルメンテーションは MonitoredRequestStreamHandler クラスを使用します。相関ヘッダーを検索するためのデフォルトのロジックが提供されます。  

相関ヘッダーにカスタム転送メカニズムを使用する必要がある場合は、getCorrelationHeader() メソッドでトレーサのデフォルトロジックをオーバーライドする必要があります。トレーサが着信ヘッダーを返せるように、カスタムロジックを挿入して着信相関ヘッダーを検索します。  

コードスニペットは、getCorrelationHeader() メソッドをオーバーライドする方法を示しています。

//(Optional)Override getCorrelationHeader(). 
//Only override if the tracer will not be able to find a correlation header using its pre-configured logic.

@Override
public String getCorrelationHeader(InputStream input, Context context) {
//Logic to find the inbound header goes here, so the inbound header can be returned
return "correlation-header";
JAVA

トランザクション オブジェクトの取得

MonitoredRequestStreamHandler クラスは自動的にトランザクションを作成します。ただし、終了コールで使用する transaction オブジェクトを取得する必要があります。

次のコードスニペットは transaction オブジェクトを取得する方法を示しています。

//Obtain your transaction for use with exit calls. 
Transaction transaction = getTransaction();
JAVA

外部終了コールの作成

createExitCall メソッドは exitCall オブジェクトを取得するために使用されます。終了コールオブジェクトは、外部終了コールで費やした時間を記録し、ダウンストリーム アクティビティの相関を許可します。 

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

コントローラでは、すべての終了コールに個別のタイプがあり、一連の識別プロパティによって決定されます。 

exitCall タイプおよび識別プロパティを次に示します。

exitCallタイプ
識別プロパティ
HTTP

HOST

PORT

URL

QUERY STRING

JDBC

URL

HOST

PORT

データベース

VERSION

VENDOR

WEB SERVICE

SERVICE

URL

OPERATION

SOAP ACTION

VENDOR

カスタムユーザ定義のプロパティセット

終了コールの作成

transaction オブジェクトで createExitCall() を呼び出します。 

次のコード例は、外部終了コールを実行する方法を示しています。

public void makeExitCall(URL url){
 
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
 
String outgoingHeader = null;
String callType = null;
Map<String, String> identifyingProperties = new HashMap<>();
    
//Below properties are appropriate for an inter-AWS Lambda call
identifyingProperties.put("DESTINATION", functionName);
identifyingProperties.put("DESTINATION_TYPE", "LAMBDA");
callType="CUSTOM";
    
//Below properties are appropriate for an external HTTP call
identifyingProperties.put("HOST", url.getHost());     
identifyingProperties.put("PORT", String.valueOf(url.getPort()));
callType="HTTP";
 
//Define the createExitCall method to obtain an exitCall object.     
ExitCall exitCall = transaction.createExitCall(callType, identifyingProperties);
outgoingHeader =  exitCall.getCorrelationHeader();
exitCall.start();
    
try {
// Tracer.APPDYNAMICS_TRANSACTION_CORRELATION_HEADER_KEY is the name of the header that should be set
   
    if (outgoingHeader != null) {
        conn.setRequestProperty(Tracer.APPDYNAMICS_TRANSACTION_CORRELATION_HEADER_KEY, outgoingHeader); // set the correlation header on an HttpURLConnection
    }
  
// Make the exit call here
  
} finally {
        exitCall.stop();
    }
}
JAVA

複数の外部終了コールの実行

1 つの AWS Lambda 関数が複数の終了コールを行う場合、各関数は一意の exitCall オブジェクトによって識別される必要があります。複数の終了コールを行うには、個別の終了コールごとに新しい exitCall オブジェクトを作成します。exitCall オブジェクトは再利用できません。 

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