【发布时间】:2019-05-01 22:32:11
【问题描述】:
我正在尝试在我当前的项目中使用 AWS X-ray(使用 Node.js 和无服务器框架)。我正在尝试将 X 射线连接到我的 lambda 函数之一,我遇到了
的问题Error: Failed to get the current sub/segment from the context.
at Object.contextMissingRuntimeError [as contextMissing] (/.../node_modules/aws-xray-sdk-core/lib/context_utils.js:21:15)
at Object.getSegment (/.../node_modules/aws-xray-sdk-core/lib/context_utils.js:92:45)
at Object.resolveSegment (/.../node_modules/aws-xray-sdk-core/lib/context_utils.js:73:19).....
代码如下:
import { DynamoDB } from "aws-sdk";
import AWSXRay from 'aws-xray-sdk';
export const handler = async (event, context, callback) => {
const dynamo = new DynamoDB.DocumentClient({
service: new DynamoDB({ region })
});
AWSXRay.captureAWSClient(dynamo.service);
try {
// call dynamoDB function
} catch(err) {
//...
}
}
对于这个问题,我使用的解决方案来自 https://forums.aws.amazon.com/thread.jspa?messageID=821510󈤆
我尝试的另一个解决方案来自https://forums.aws.amazon.com/thread.jspa?messageID=829923󊧣
代码就像
import AWSXRay from 'aws-xray-sdk';
const AWS = AWSXRay.captureAWS(require('aws-sdk'));
export const handler = async (event, context, callback) => {
const dynamo = new AWS.DynamoDB.DocumentClient({region});
//....
}
还是不行……
感谢任何形式的帮助。
【问题讨论】:
-
什么时候出现这个错误?在本地测试时?正如错误消息所说,您的上下文对象(您的第二个参数)似乎缺少它需要的段。 X-Ray 想要使用这些,以便您可以跟踪调用的去向、每个操作需要多长时间等。因此,它需要一个有效的上下文。 (在使用假上下文对象运行本地测试时,我自己也遇到了同样的问题。)
-
@Hieron 感谢您的回复。实际上,我使用的是无服务器框架,并且我使用了无服务器离线插件来帮助我在本地运行。上下文是否假。我使用的解决方案是在 Lambda 函数中启用配置。
-
好的,所以您在本地运行,因此可能是上下文与实际在 AWS 上运行时不完全相同的问题。这也意味着它可能不是 AWS/Lambda 的问题,而是无服务器离线插件的问题。也许在他们的 github 页面上问他们?
-
@pyy,解决方案是什么?
-
@VictorP 现在,我通过在管理控制台或 cloudformation 模板中启用 X 射线跟踪来使用 Lambda 功能。所以 X 射线现在可以追踪 Lambda。稍后我会花时间尝试 X-ray 与其他 AWS 服务。
标签: node.js amazon-web-services aws-lambda serverless-framework aws-xray