我一直在将AWS SAM用于websocket API,并且运行良好。今天,我需要添加一个HTTPS API,但是尝试这样做会导致在另一个子域下创建一个新的API网关。我希望他们共享同一个域,因此用户只需要更改协议(从HTTPS到WSS)。
这是我的template.yaml
的相关部分:
# This seems to implicitly create and use a `ServerlessRestApi` API gateway
PingLambda:
Type: AWS::Serverless::Function
Properties:
CodeUri: lambda/
Handler: app.pingHandler
Runtime: nodejs12.x
Events:
Ping:
Type: Api
Properties:
Path: /ping
Method: get
# I use this for the various websocket lambdas, works like a charm
WebSocketApi:
Type: AWS::ApiGatewayV2::Api
Properties:
Name: SimpleRelayWebSocket
ProtocolType: WEBSOCKET
RouteSelectionExpression: \\$default
# ...
# I'd love both of these to use the same subdomain/API gateway setup
Outputs:
APIURL:
Description: URL of the Simple Relay HTTPS API
Value: !Sub 'https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/${Stage}'
WebSocketURL:
Description: URL of the Simple Relay WSS API
Value: !Sub 'wss://${WebSocketApi}.execute-api.${AWS::Region}.amazonaws.com/${Stage}'
考虑到WebSocketApi
设置了ProtocolType: WEBSOCKET
,我不确定该如何进行。是否有某种方法可以将API分成具有不同协议的多种功能,或者我还缺少其他功能?
答案 0 :(得分:0)
我需要做同样的事情。一种可能的解决方案是将两者都放在 CloudFront 分配之后。我可能会这样做,因为我已经在使用 CloudFront 为来自 S3 的前端和一些后端端点提供服务。