I have simple lambda A calling lambda B, I need to pass amazon trace id to lambda B. Is it possible while using lambda.invoke? Do you have some simple example to do this in node.js?
Lambda A:
const AWS = require('aws-sdk');
AWS.config.region = process.env.AWS_REGION;
const lambda = new AWS.Lambda();
const params = {
FunctionName: 'lambda-b',
InvocationType: 'Event',
LogType: 'Tail',
Payload: '{ "name" : "janko" }'
};
const result = await lambda.invoke(params).promise();
console.log(`TraceId: ${process.env._X_AMZN_TRACE_ID}`);
In log of lambda A is 'TraceId: Root=1-5be30a84-31c7700e813851b25fad8b5a;Parent=6bcdc85668f474fb;Sampled=0'
In log of lambda B is: 'TraceId: Root=1-5be30a81-c552e60321963c04d75db028;Parent=30247b5d7680c581;Sampled=0'
I was unable to pass trace-id directly, however aim of passing trace-id was to see complete event flow in x-ray. You can achieve this by wrapping lambda.invoke (similarly send to SQS/SNS can be wrapped).
const AWSXRay = require('aws-xray-sdk');
const AWS = require('aws-sdk');
exports.handler = async (event) => {
const lambda = AWSXRay.captureAWSClient(new AWS.Lambda());
let params = {
FunctionName: `lambda-b`,
InvocationType: 'Event',
Payload: '{ "name" : "janko" }'
};
result = await lambda.invoke(params).promise();
};
Then you can see whole chain of calls in AWS X-Ray.