Search code examples
amazon-web-servicesaws-lambdaaws-xray

AWS lambda nodejs showing error while using X-RAY


I have following code:

var AWSXRay = require('aws-xray-sdk');
    var AWS = AWSXRay.captureAWS(require('aws-sdk'));
    const client = AWSXRay.captureAWSClient(new AWS.DynamoDB.DocumentClient({region : 'eu-west-1'}));
    exports.handler = function(event, context, callback) {

        AWSXRay.captureFunc('annotations', function(subsegment){
        subsegment.addAnnotation('User', **);
        subsegment.addAnnotation('Name', **);
      });

         var params = {
            TableName: "****",
            ** all params **
            };
     client.query(params, function(err, data) {
       if (err) console.log(err, err.stack); // an error occurred
       else{
            callback(null,data);
            }
        });
    }

When executing the code above, the following error is thrown:

Response:
{
  "errorMessage": "service.customizeRequests is not a function",
  "errorType": "TypeError",
  "stackTrace": [
    "Object.<anonymous> (/var/task/index.js:5:24)",
    "Module._compile (module.js:570:32)",
    "Object.Module._extensions..js (module.js:579:10)",
    "Module.load (module.js:487:32)",
    "tryModuleLoad (module.js:446:12)",
    "Function.Module._load (module.js:438:3)",
    "Module.require (module.js:497:17)",
    "require (internal/module.js:20:19)"
  ]
}

following are the logs of function:

Function Logs:
START RequestId: Version: $LATEST
module initialization error: TypeError
    at Object.captureAWSClient (/var/task/node_modules/aws-xray-sdk-core/lib/patchers/aws_p.js:55:11)
    at Object.<anonymous> (/var/task/index.js:5:24)
    at Module._compile (module.js:570:32)
    at Object.Module._extensions..js (module.js:579:10)
    at Module.load (module.js:487:32)
    at tryModuleLoad (module.js:446:12)
    at Function.Module._load (module.js:438:3)
    at Module.require (module.js:497:17)
    at require (internal/module.js:20:19)
END

How should I resolve this?


Solution

  • Posting the short-term workaround here for better visibility.

    const ddbClient = AWSXray.captureAWSClient(new AWS.DynamoDB({...}));
    const client = new AWS.DynamoDB.DocumentClient({
      service: ddbClient
    });
    client.service = ddbClient;
    

    See some reasoning and discussion here https://forums.aws.amazon.com/thread.jspa?messageID=821510&#821510