如何使用 X-Ray 语句在本地调用 SAM Lambda 函数?
How do I invoke a SAM Lambda function locally with X-Ray statements?
我在本地调用 AWS SAM Lambda 函数时收到以下错误:
Missing AWS Lambda trace data for X-Ray. Ensure Active Tracing is enabled and no subsegments are created outside the function handler.
下面你可以看到我的功能:
/** Bootstrap */
require('dotenv').config()
const AWSXRay = require('aws-xray-sdk')
/** Libraries*/
const se = require('serialize-error')
/** Internal */
const logger = require('./src/utils/logger')
const ExecuteService = require('./src/service')
/**
*
*/
exports.handler = async (event) => {
const xraySegement = AWSXRay.getSegment()
const message = process.env.NODE_ENV == 'production' ? JSON.parse(event.Records[0].body) : event
try {
await ExecuteService(message)
} catch (err) {
logger.error({
error: se(err)
})
return err
}
}
此外,我在 template.yml 中将 Tracing 设置为 Active。
我明显误读、遗漏或重读了文档的哪一部分?
目前您无法使用 X-ray 在本地调用 SAM lambda,因为尚不支持它。
见
The component does not support X-ray and other Lambda integrations locally.
如果您不关心 X 射线,只想让您的代码正常工作,您可以检查环境变量 AWS_SAM_LOCAL
以防止使用 X 射线:
let AWSXRay
if (!process.env.AWS_SAM_LOCAL) {
AWSXRay = require('aws-xray-sdk')
}
// ...
if (!process.env.AWS_SAM_LOCAL) {
const xraySegement = AWSXRay.getSegment()
}
我正在使用 SAM CLI, version 1.36.0
我注意到导入 aws-xray-sdk
不会产生这个问题,但调用函数会产生这个问题。
为了没有一百万个 if 语句,我创建了一个中间人服务,如果设置了环境变量 process.env.AWS_SAM_LOCAL
,它会导入 aws-xray-sdk
然后导出 noops。
我在本地调用 AWS SAM Lambda 函数时收到以下错误:
Missing AWS Lambda trace data for X-Ray. Ensure Active Tracing is enabled and no subsegments are created outside the function handler.
下面你可以看到我的功能:
/** Bootstrap */
require('dotenv').config()
const AWSXRay = require('aws-xray-sdk')
/** Libraries*/
const se = require('serialize-error')
/** Internal */
const logger = require('./src/utils/logger')
const ExecuteService = require('./src/service')
/**
*
*/
exports.handler = async (event) => {
const xraySegement = AWSXRay.getSegment()
const message = process.env.NODE_ENV == 'production' ? JSON.parse(event.Records[0].body) : event
try {
await ExecuteService(message)
} catch (err) {
logger.error({
error: se(err)
})
return err
}
}
此外,我在 template.yml 中将 Tracing 设置为 Active。
我明显误读、遗漏或重读了文档的哪一部分?
目前您无法使用 X-ray 在本地调用 SAM lambda,因为尚不支持它。
见
The component does not support X-ray and other Lambda integrations locally.
如果您不关心 X 射线,只想让您的代码正常工作,您可以检查环境变量 AWS_SAM_LOCAL
以防止使用 X 射线:
let AWSXRay
if (!process.env.AWS_SAM_LOCAL) {
AWSXRay = require('aws-xray-sdk')
}
// ...
if (!process.env.AWS_SAM_LOCAL) {
const xraySegement = AWSXRay.getSegment()
}
我正在使用 SAM CLI, version 1.36.0
我注意到导入 aws-xray-sdk
不会产生这个问题,但调用函数会产生这个问题。
为了没有一百万个 if 语句,我创建了一个中间人服务,如果设置了环境变量 process.env.AWS_SAM_LOCAL
,它会导入 aws-xray-sdk
然后导出 noops。