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

如何在CLI中返回DynamoDB里连接WebSocket API的用户列表?

如何将DynamoDB扫描结果返回至WebSocket CLI客户端

我来帮你搞定这个问题!你现在的Lambda代码已经能成功扫描DynamoDB获取用户名,但因为WebSocket API的响应机制和普通HTTP不同,你需要通过API Gateway的管理API主动把结果推送给你的CLI客户端(也就是当前的WebSocket连接)。下面是具体的修改步骤和完整代码:

关键修改点说明

  • 获取当前连接ID:WebSocket连接的唯一标识connectionId存在event.requestContext.connectionId里,我们需要用它来定向发送消息。
  • 调用API Gateway管理API:使用AWS SDK的ApiGatewayManagementApi类,调用postToConnection方法把扫描结果发送给客户端。
  • 格式化返回数据:把DynamoDB扫描的原始结果转换成CLI易读的格式(比如提取所有用户名组成数组)。
  • 权限配置:确保你的Lambda执行角色有execute-api:ManageConnections权限,允许它调用API Gateway的管理API。

完整修改后的Lambda代码

const AWS = require('aws-sdk');
// 初始化API Gateway管理客户端,替换成你的API Gateway实际端点
const apigwManagementApi = new AWS.ApiGatewayManagementApi({
  endpoint: 'https://<你的API Gateway ID>.execute-api.<区域>.amazonaws.com/<阶段名>'
});
const ddb = new AWS.DynamoDB.DocumentClient();

exports.handler = async function(event, context) {
  try {
    // 获取当前WebSocket连接的唯一ID
    const connectionId = event.requestContext.connectionId;
    
    // 扫描DynamoDB获取所有用户名
    const scannedItems = await displayUsers();
    // 提取用户名并格式化为易读的列表
    const userList = scannedItems.Items.map(item => item.username);
    const responseContent = `当前已连接的用户:${JSON.stringify(userList)}`;
    
    // 主动推送消息到当前CLI客户端的WebSocket连接
    await apigwManagementApi.postToConnection({
      ConnectionId: connectionId,
      Data: JSON.stringify(responseContent)
    }).promise();
    
    return { statusCode: 200 };
  } catch (error) {
    console.error('处理请求出错:', error);
    // 发送失败时返回错误状态码
    return { statusCode: 500, body: JSON.stringify({ error: error.message }) };
  }
};

async function displayUsers() {
  return ddb.scan({
    TableName: 'Chat',
    ProjectionExpression: "username"
  }).promise();
}

注意事项

  1. 替换API Gateway端点:把代码里的endpoint替换成你自己的WebSocket API端点,格式为https://<api-id>.execute-api.<region>.amazonaws.com/<stage>,你可以在API Gateway控制台的WebSocket API详情页找到这个地址。
  2. 配置Lambda权限:给Lambda的执行角色添加IAM策略,允许它调用execute-api:PostToConnection动作,目标资源为你的API Gateway管理API ARN(示例:arn:aws:execute-api:<region>:<account-id>:<api-id>/<stage>/POST/@connections/*)。
  3. 测试验证:修改完成后重新部署Lambda和API Gateway,再用wscat -c [wssURL]?username=Zeus连接,触发对应路由(比如发送一条消息触发该Lambda执行),就能在CLI中看到返回的用户列表了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:34:18