Как настроить асинхронный лямбда-вызов через API-шлюз с помощью SAM? - PullRequest
0 голосов
/ 14 ноября 2018

Я настроил интеграцию лямбда-прокси с API-шлюзом, используя спецификацию SAM, и асинхронно запускаю лямбду, передавая заголовок X-Amz-Invocation-Type: "'Event'"

  ApiGateway:
      Type: AWS::Serverless::Api
      Properties:
        StageName: prod
        DefinitionBody:
          swagger: "2.0"
          info:
            title:
              Ref: AWS::StackName
            description: API endpoint for invoking LambdaFunction
            version: 1.0.0
          paths:
            /items:
              post:
                consumes: ["application/json"]
                produces: ["application/json"]
                responses: {}
                x-amazon-apigateway-integration:
                  type: "aws_proxy"
                  uri:
                    Fn::Sub: arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${LambdaFunction.Arn}/invocations
                  passthroughBehavior: "when_no_match"
                  httpMethod: "POST"
                  requestParameters:
                      integration.request.header.X-Amz-Invocation-Type: "'Event'"

Проблема в том, что лямбда возвращает пустой ответ (вызывается асинхронно), поэтому API-шлюз генерирует следующую ошибку

Ср. 14 ноября 08:03:14 UTC 2018: сбой выполнения из-за ошибки конфигурации: неверный ответ лямбда-прокси Ср 14 ноября 08:03:14 UTC 2018: метод завершен со статусом: 502

Ожидается ли такое поведение? Должен ли я определять ответы явно? Я не хочу бросать 200 всегда, потому что я также хочу отправить неверный запрос и несанкционированные ошибки. Какое решение избежать этой проблемы?

1 Ответ

0 голосов
/ 10 февраля 2019

Шаблон SAM развертывает API с интеграцией Lambda-прокси, поэтому невозможно будет асинхронно вызывать Lambda с интегрированным прокси-сервером, поскольку ответ будет пустым, что не соответствует допустимому формату возврата для интеграции Lambda-прокси .

Следовательно, чтобы вызывать Lambda асинхронно из API-шлюза, используйте интеграцию типа aws (пользовательский или не прокси-сервер), устанавливая заголовок X-Amz-Invocation-Type: 'Event'.

Вы также можете разрешить доступ к вашему API-шлюзу для возврата ошибок несанкционированного доступа.

...