带有适用于 NodeJS 的 AWS SDK v3 的 AWS XRay

AWS XRay with AWS SDK v3 for NodeJS

有什么方法可以为 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 结合使用的推荐模式是什么?

您需要使用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