You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置AWS RDS与S3桶,使其在CloudWatch服务地图中可见?

问题描述

当前与期望状态

  • 当前状态:当前状态
  • 期望状态:期望状态

现有Lambda操作S3代码

const AWS = require('aws-sdk');
const XRay = require('aws-xray-sdk'); // Import the X-Ray SDK
const S3 = XRay.captureAWSClient(new AWS.S3());

exports.handler = async (event) => {
try {
    // Extract picture data from the event (e.g., base64 encoded data)
    const pictureData = event.pictureData.toString();

    // Specify the S3 bucket and object key
    const bucketName = 'MyBucketName';
    const objectKey = event.pictureKey + '.jpg'; // Adjust the file extension accordingly

    // Convert the picture data to a buffer
    const buffer = Buffer.from(pictureData.replace(/^data:image\/\w+;base64,/, ""), 'base64');

    console.log(buffer);
    console.log(pictureData);

    await XRay.captureAsyncFunc('S3Upload', async (subsegment) => {
        // Upload the picture to S3
        await S3.upload({
            Bucket: bucketName,
            Key: objectKey,
            Body: buffer,
            ACL: 'public-read',
            ContentType: 'image/jpeg',
            ContentEncoding: 'base64'
        }).promise();

        subsegment.close(); // Close the subsegment when the operation is done
    });

    const s3ImageLink = 'https://giftcardshop-group55-ddac.s3.amazonaws.com/' + objectKey;

    return {
        statusCode: 200,
        body: JSON.stringify(s3ImageLink),
    };
} catch (err) {
    console.error('Error uploading picture:', err);
    return {
        statusCode: 500,
        body: JSON.stringify('Error uploading picture'),
    };
}
};

当前代码可正常将图片上传至S3,但S3未出现在CloudWatch服务地图中。需配置让S3桶和RDS实例均在CloudWatch服务地图中显示。


解决方案

CloudWatch服务地图依赖AWS X-Ray追踪数据生成服务调用关系,以下是针对S3和RDS的具体配置步骤:

一、让S3出现在服务地图中

  1. 配置Lambda角色权限
    为Lambda执行角色添加AWSXRayDaemonWriteAccess策略,允许Lambda向X-Ray发送追踪数据。

  2. 开启Lambda主动追踪
    在Lambda控制台的「配置」页,找到「监控和操作工具」下的X-Ray选项,开启「主动追踪」。这会自动生成Lambda主分段,确保下游服务调用能被关联。

  3. 优化X-Ray对S3的捕获逻辑
    替换现有代码中的X-Ray初始化方式,改用全局捕获AWS SDK的方式,确保所有S3操作被追踪:

    const AWS = require('aws-sdk');
    const XRay = require('aws-xray-sdk');
    // 全局捕获AWS SDK,无需单独捕获S3客户端
    XRay.captureAWS(AWS);
    const S3 = new AWS.S3();
    
  4. 验证追踪数据
    触发Lambda调用后,前往X-Ray控制台查看追踪详情,确认生成了S3子分段。确认后,CloudWatch服务地图会在1-5分钟内同步显示S3节点。

二、让RDS出现在服务地图中

  1. 启用RDS的X-Ray追踪

    • 进入RDS控制台,选择目标实例,在「配置」页找到「X-Ray追踪」并开启。
    • 确保RDS所在VPC配置了X-Ray服务的访问权限(推荐使用VPC端点com.amazonaws.<region>.xray)。
  2. 配置Lambda对RDS的追踪

    • 确保Lambda角色已拥有AWSXRayDaemonWriteAccess权限。
    • 若使用AWS SDK连接RDS(如RDS Data API),用XRay.captureAWS(AWS)全局捕获SDK即可。
    • 若使用原生数据库驱动(如pg/mysql2),需用X-Ray SDK捕获驱动:
      const mysql = require('mysql2');
      const XRay = require('aws-xray-sdk');
      const capturedMysql = XRay.captureMySQL(mysql);
      // 使用capturedMysql创建连接池或客户端
      
  3. 确认网络连通性
    Lambda需能访问RDS实例(同VPC或公网),同时X-Ray守护程序需能将追踪数据发送到X-Ray服务。

三、通用注意事项

  • 所有涉及服务(Lambda、S3、RDS)需在同一AWS区域,否则X-Ray无法跨区域聚合数据。
  • CloudWatch服务地图更新有延迟,配置完成后需等待几分钟再查看。
  • 若服务仍未显示,前往X-Ray控制台的「追踪」页面检查是否有完整调用链数据,排查权限或代码中的追踪配置问题。

内容的提问来源于stack exchange,提问作者Brian Widjaja

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 05:40:38