Добавление интеграционного ответа к AWS websocket API с помощью CloudFormation

AWS недавно выпустила поддержку Cloudformation для создания шаблонов шлюзов API веб-сокетов. У меня развернут рабочий пример, но я не могу понять, как включить ответ интеграции прокси (см. Снимок экрана, чтобы узнать, как это делается в консоли). Кто-нибудь знает, какой параметр cloudFormation можно использовать для включения ответа интеграции по умолчанию для интеграции лямбда-прокси? введите описание изображения здесь


person Matthew de Nobrega    schedule 12.02.2019    source источник


Ответы (1)


Пожалуйста, попробуйте следующие шаги

1- Добавить RouteResponseSelectionExpression в Route как $ default (на данный момент поддерживается только один)

2- Создать RouteResponse для всех маршрутов (двунаправленный) Примечание: - RouteResponseKey: $ default // он должен быть только по умолчанию

3- Добавить ConnectIntegResponse (необязательно)

Ниже приведен протестированный фрагмент CFN, не стесняйтесь его использовать.

##########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

person ifti    schedule 09.06.2019
comment
1000 раз спасибо за этот ответ. Сегодня я застрял, не зная о RouteResponseSelectionExpression. - person miyasudokoro; 26.07.2019
comment
Я могу видеть ответы, когда добавляю это в маршрут sendmessage, но когда добавляю его в $connect, я не вижу никакого ответа, возвращающегося клиенту websocket. Также IntegrationResponse не кажется необходимым, по крайней мере, для типа интеграции HTTP_PROXY. - person diegosasw; 19.05.2021