使用 CloudFormation 向 AWS websocket API 添加集成响应

Posted

技术标签:

【中文标题】使用 CloudFormation 向 AWS websocket API 添加集成响应【英文标题】:Adding integration response to AWS websocket API with CloudFormation 【发布时间】:2019-07-05 17:29:22 【问题描述】:

AWS recently released Cloudformation support for templating websocket API gateways。我部署了一个工作示例,但我不知道如何打开代理集成响应(有关如何在控制台中完成此操作,请参见屏幕截图)。有谁知道可以使用什么 cloudFormation 设置来打开 lambda 代理集成的默认集成响应?

【问题讨论】:

【参考方案1】:

请尝试以下步骤

1- 在 Route 中添加 RouteResponseSelectionExpression 作为 $default(目前仅支持一个)

2- 为所有路由创建 RouteResponse(双向) 注意:- RouteResponseKey: $default // 它应该只是默认的

3- 添加 ConnectIntegResponse(可选)

下面是一个经过测试的CFN sn-p,请随意使用

##########Socket API###############
  webSocket:
    Type: AWS::ApiGatewayV2::Api
    Properties:
      Name: WebSocket
      ProtocolType: WEBSOCKET
      RouteSelectionExpression: "$request.body.action"
  ConnectRoute:
    Type: AWS::ApiGatewayV2::Route
    Properties:
      ApiId: !Ref webSocket
      RouteKey: $connect
      AuthorizationType: NONE
      OperationName: ConnectRoute
      RouteResponseSelectionExpression: $default # add this 
      Target: !Join
        - '/'
        - - 'integrations'
          - !Ref ConnectInteg
  ConnectInteg:
    Type: AWS::ApiGatewayV2::Integration
    Properties:
      ApiId: !Ref webSocket
      Description: Connect Integration
      IntegrationType: AWS_PROXY
      IntegrationUri: 
        Fn::Sub:
            arn:aws:apigateway:$AWS::Region:lambda:path/2015-03-31/functions/$restAndSocketLambda.Arn/invocations

  ConnectRouteResponse: # Add this
    Type: 'AWS::ApiGatewayV2::RouteResponse'
    Properties:
      RouteId: !Ref ConnectRoute
      ApiId: !Ref webSocket
      RouteResponseKey: $default

  ConnectIntegResponse: # Add this(if required)
    Type: 'AWS::ApiGatewayV2::IntegrationResponse'
    Properties:
      IntegrationId: !Ref ConnectInteg
      IntegrationResponseKey: /201/
      ApiId: !Ref webSocket

【讨论】:

感谢您的回答 1000 次。我今天一整天都不知道“RouteResponseSelectionExpression”。 将其添加到sendmessage 路由时我可以看到响应,但是将其添加到$connect 时我看不到任何响应返回到websocket 客户端。此外,IntegrationResponse 似乎不需要,至少对于 HTTP_PROXY 集成类型

以上是关于使用 CloudFormation 向 AWS websocket API 添加集成响应的主要内容,如果未能解决你的问题,请参考以下文章

AWS CloudFormation 脚本失败 - 不允许 Cognito 使用您的电子邮件身份

使用带反斜杠的sed命令时出现AWS CloudFormation模板验证错误

AWS CloudFormation 创建堆栈与部署

从 Lambda 函数内部访问 AWS CloudFormation ARN

AWS CloudFormation:Cognito LambdaTrigger CustomEmailSender - 属性“AWS CloudFormation 目前不支持。”和 CDK 的使用

AWS CloudFormation 可以调用 AWS API 吗?