websocket - 使用无服务器的自定义 api 网关 websocket 端点

标签 websocket aws-api-gateway serverless-framework

我正在尝试通过无服务器自定义我的 api 网关 websocket 端点,因为我需要为在 websocket 之前部署的 cloudfront 初始化它。 初始化代码如下:

ApiGatewayWebsocketApi: 
      Type: AWS::ApiGatewayV2::Api
      Properties:
        Name: ${self:provider.stage}-${self:provider.variant}-WebsocketApi
        ProtocolType: WEBSOCKET
        RouteSelectionExpression: "$request.body.action"
        Description: "WebSocket API for ${self:provider.variant}"

我将其导出为输出:

ApiGatewayWebsocketApiId:
          Value: 
            Ref: ApiGatewayWebsocketApi
          Export:
            Name: ${self:custom.configFile.appCode}-${self:provider.stage}-${self:provider.variant}-ApiGatewayWebsocketApiId

然后 ApiGatewayWebsocketApiId 将表示一个端点字符串,如 b6hnpuyzq6

我可以在 websocket serverless.yml 中获取它:

 WebSocketApiId:
    Fn::ImportValue: ${self:custom.configFile.appCode}-${self:provider.stage}-${self:provider.variant}-ApiGatewayWebsocketApiId

但是问题来了: 如何将其导入到我的函数(例如connectionHandler)中,以便此websocket可以使用上面导入的端点:

  connectionHandler:
    name: ${self:provider.stage}-${self:provider.variant}-${self:custom.configFile.appCode}-ws-connection
    handler: WebsocketTestHandler
    events:
      - websocket:
          route: $connect
      - websocket:
          route: $disconnect

最佳答案

也许您可以尝试通过处理程序中可用的 WEB_SOCKET_API_ID 环境变量传递 WebSocket Api Id 参数值,如下所示:

  connectionHandler:
    name: ${self:provider.stage}-${self:provider.variant}-${self:custom.configFile.appCode}-ws-connection
    handler: WebsocketTestHandler
    environment:
      WEB_SOCKET_API_ID:
        Ref: WebSocketApiId
    events:
      - websocket:
          route: $connect
      - websocket:
          route: $disconnect

关于websocket - 使用无服务器的自定义 api 网关 websocket 端点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56096916/

相关文章:

c# - 与 ASPNET Core 和 websockets 的双向通信

http-proxy - AWS api网关-HTTP代理应从来源获取状态代码

yaml - 无服务器框架试运行或测试,无需部署

aws-lambda - 无服务器 - 在 Lambda 函数中运行 Express 实例,好还是坏?

aws-lambda - 如果 VTL/API 网关模板中不存在 key,则返回 null

python - 在 C 和 Python 中实现 sendall() 和 recvall()

ruby-on-rails - 从 iOS 应用程序连接到 ActionCable

javascript - 通过 WebSocket 发送音频

aws-api-gateway - CDK API Gateway 默认授权方排除 OPTIONS 方法

javascript - 如何将API Gateway SDK添加到React中?