如何配置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出现在服务地图中
配置Lambda角色权限
为Lambda执行角色添加AWSXRayDaemonWriteAccess策略,允许Lambda向X-Ray发送追踪数据。开启Lambda主动追踪
在Lambda控制台的「配置」页,找到「监控和操作工具」下的X-Ray选项,开启「主动追踪」。这会自动生成Lambda主分段,确保下游服务调用能被关联。优化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();验证追踪数据
触发Lambda调用后,前往X-Ray控制台查看追踪详情,确认生成了S3子分段。确认后,CloudWatch服务地图会在1-5分钟内同步显示S3节点。
二、让RDS出现在服务地图中
启用RDS的X-Ray追踪
- 进入RDS控制台,选择目标实例,在「配置」页找到「X-Ray追踪」并开启。
- 确保RDS所在VPC配置了X-Ray服务的访问权限(推荐使用VPC端点
com.amazonaws.<region>.xray)。
配置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创建连接池或客户端
- 确保Lambda角色已拥有
确认网络连通性
Lambda需能访问RDS实例(同VPC或公网),同时X-Ray守护程序需能将追踪数据发送到X-Ray服务。
三、通用注意事项
- 所有涉及服务(Lambda、S3、RDS)需在同一AWS区域,否则X-Ray无法跨区域聚合数据。
- CloudWatch服务地图更新有延迟,配置完成后需等待几分钟再查看。
- 若服务仍未显示,前往X-Ray控制台的「追踪」页面检查是否有完整调用链数据,排查权限或代码中的追踪配置问题。
内容的提问来源于stack exchange,提问作者Brian Widjaja
相关产品推荐
相关产品推荐

