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

如何在AWS API Gateway WebSocket连接时通过Mock集成返回Connection ID(无需Lambda)

问题解答

仅靠API Gateway的Mock集成无法实现客户端连接时自动收到Connection ID的需求,必须依赖Lambda这类后端服务,原因和解决步骤如下:

为什么Mock集成不行?

  • API Gateway的Mock集成只能返回静态响应,但WebSocket的$connect路由的响应是服务端内部用来确认连接状态的,不会主动推送给客户端。
  • 要主动向WebSocket客户端发送消息,必须调用API Gateway的@connections管理API(具体是POST /@connections/{connectionId}接口),而Mock集成没有执行API调用的能力,只能返回固定内容。

你的尝试失败的原因

  • 启用$default路由的双向通信:这个设置只是允许客户端向服务端发送消息,并不支持服务端主动触发消息推送。
  • $connect路由加Mock集成:Mock返回的内容不会被推送到客户端,仅用于API Gateway内部判断连接是否成功建立。

正确的实现方式(用Lambda)

  1. 给$connect路由配置Lambda集成
  2. 在Lambda函数中,从事件参数里提取Connection ID:
    // Node.js示例
    const connectionId = event.requestContext.connectionId;
    
  3. 使用AWS SDK调用API Gateway Management API,把Connection ID发送给客户端:
    const { ApiGatewayManagementApiClient, PostToConnectionCommand } = require("@aws-sdk/client-apigatewaymanagementapi");
    
    exports.handler = async (event) => {
      const connectionId = event.requestContext.connectionId;
      const endpoint = `https://${event.requestContext.domainName}/${event.requestContext.stage}`;
      const client = new ApiGatewayManagementApiClient({ endpoint });
    
      try {
        await client.send(new PostToConnectionCommand({
          ConnectionId: connectionId,
          Data: JSON.stringify({ connectionId: connectionId })
        }));
      } catch (err) {
        return { statusCode: 500, body: err.stack };
      }
    
      return { statusCode: 200 };
    };
    
  4. 给Lambda配置权限:添加允许调用execute-api:Invoke的IAM权限,确保它能访问API Gateway的Management API。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 18:07:10