从具有相同跟踪 ID 的代码调用 lambda?

Invoke lambda from code with same trace id?

我有一个简单的 lambda A 调用 lambda B,我需要将亚马逊跟踪 ID 传递给 lambda B。使用 lambda.invoke 时可以吗?在 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}`);

在 lambda A 的日志中是 'TraceId: Root=1-5be30a84-31c7700e813851b25fad8b5a;Parent=6bcdc85668f474fb;Sampled=0'


在 lambda B 的对数中是:'TraceId: Root=1-5be30a81-c552e60321963c04d75db028;Parent=30247b5d7680c581;Sampled=0'

我无法直接传递 trace-id,但传递 trace-id 的目的是在 X 射线中查看完整的事件流。您可以通过包装 lambda.invoke 来实现这一点(类似地发送到 SQS/SNS 可以包装)。

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();
};

然后您可以在 AWS X-Ray 中看到整个调用链。