我正在尝试通过无服务器自定义我的 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/