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

如何通过CloudFormation配置API Gateway WebSocket $connect路由返回连接ID

问题根因

  1. 你当前配置报500错误的直接原因是MOCK集成缺少完整的响应链路配置:你只定义了集成的请求模板,没有配置AWS::ApiGatewayV2::IntegrationResponse和AWS::ApiGatewayV2::RouteResponse资源,API Gateway无法完成响应映射,因此返回内部错误。
  2. 即便修复500错误,你也无法仅通过$connect路由的MOCK集成在连接建立时收到包含connectionId的消息,这是API Gateway WebSocket的固有设计限制:$connect路由对应的是WebSocket握手阶段,该阶段返回的内容仅用于控制握手是否成功(返回200则握手成功,返回非200则握手失败),响应内容不会作为WebSocket消息帧推送给客户端。

修复500错误的CloudFormation配置补充

你需要在现有配置基础上添加以下两个资源:

# 集成响应:将MOCK集成的输出映射为可返回的响应
wsConnectIntegrationResponse:
  Type: AWS::ApiGatewayV2::IntegrationResponse
  Properties:
    ApiId: !Ref wsApiGateway
    IntegrationId: !Ref wsConnectIntegration
    IntegrationResponseKey: /200/
    ResponseTemplates:
      application/json: '{"message": "Connected", "connectionId": "$context.connectionId"}'

# 路由响应:允许路由将集成响应返回给调用方
wsConnectRouteResponse:
  Type: AWS::ApiGatewayV2::RouteResponse
  Properties:
    ApiId: !Ref wsApiGateway
    RouteId: !Ref wsConnectRoute
    RouteResponseKey: $default

部署以上配置后你不会再收到500错误,可以正常建立WebSocket连接,但还是收不到连接时的推送消息,就是上面提到的设计限制导致的。

实现连接建立时推送connectionId的可行方案

你需要将$connect路由的集成类型从MOCK换成Lambda集成,Lambda的处理逻辑如下:

  1. 接收$connect事件,从事件上下文里拿到connectionId
  2. 初始化ApiGatewayManagementApi客户端,端点为你的WebSocket API端点
  3. 调用post_to_connection接口,向该connectionId发送你要的包含connectionId的消息
  4. 返回200状态码完成握手

这个方案不需要额外的其他路由,就能实现你要的连接建立时立刻收到connectionId的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 06:36:03