AWS XRay 与适用于 NodeJS 的 AWS 开发工具包 v3

问题描述 投票:0回答:2

有什么方法可以使用 AWS NodeJS SDK v3 的 XRay 检测吗?在 SDK v2 中,AWSXray 能够捕获任何客户端并对其进行检测以跟踪到 XRay。 我一直在使用 v3 尝试同样的事情,并使用以下代码片段

const  {DynamoDBClient, ScanCommand} = require("@aws-sdk/client-dynamodb");
const AWSXRay = require("aws-xray-sdk");
// if uncommented, this throws an exception
// AWSXRay.captureAWSClient(DynamoDBClient); 

const client = new DynamoDBClient({region: process.env.AWS_REGION});
// if uncommented, this throws an exception
// AWSXRay.captureAWSClient(client);

const scan = new ScanCommand({
    TableName: 'xxx',
});
await client.send(scan) //?

但是两条注释行都会抛出

service.customizeRequests is not a function
。这似乎 AWS SDK s3 与原始 AWSXRay 库不向后兼容。

我发现 SDK v3 包含 XRay 客户端,但这只是一个可以将跨度和跟踪发送到 AWS 的客户端,而不是仪器代理。

将 XRay 仪器与适用于 NodeJS 的 AWS SDK v3 结合使用的推荐模式是什么?

javascript node.js aws-lambda aws-sdk-js aws-xray
2个回答
7
投票

您需要使用

v3
兼容
x-ray-sdk
捕捉功能
captureAWSv3Client

这是工作片段:

const {DynamoDBClient, ScanCommand} = require("@aws-sdk/client-dynamodb");
const AWSXRay = require("aws-xray-sdk-core");

const dynamoClient = AWSXRay.captureAWSv3Client(
    new DynamoDBClient({})
)

const scan = new ScanCommand({
    TableName: 'xxx',
});

const response = await dynamoClient.send(scan)

拥有写入 X-Ray 的权限也很重要,例如:

Policies:
  - AWSXrayWriteOnlyAccess

0
投票

如果您像我一样,使用 AWS SDK V3 并希望在使用流行的 Dynamoose 库的同时集成 DynamoDB,请按以下步骤操作:

import * as dynamoose from "dynamoose"
import * as AWSXRay from 'aws-xray-sdk'

dynamoose.aws.ddb.set(AWSXRay.captureAWSv3Client(new dynamoose.aws.ddb.DynamoDB({
    region: 'us-east-1'
})))

确保您已安装相关软件包:

npm install dynamoose aws-sdk @types/aws-sdk --save
© www.soinside.com 2019 - 2024. All rights reserved.