API шлюза SAM указывает HTTP GET: 500 Внутренняя ошибка сервера - PullRequest
0 голосов
/ 19 октября 2018

Я всегда получаю 500 Internal Server Error, когда пытаюсь вызвать конечную точку GET, которую я определил с помощью SAM.

Я могу определить работающий запрос POST.Для запроса GET он показывает мне: Lambda invocation failed with status: 403 Execution failed due to configuration error:

Я думаю, что что-то не так, когда я определяю свой DefinitionBody моего шлюза API.

Globals:
  Api:
    Cors:
      AllowMethods: "'GET,POST,OPTIONS'"
      AllowHeaders: "'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range'"
      AllowOrigin: "'*'"
Resources:
  getFunction:
    Type: 'AWS::Serverless::Function'
    Properties:
      ...
      Events:
        GetApi:
          Type: Api
          Properties:
            Path: /tips
            Method: GET
            RestApiId: !Ref MyApi
  MyApi:
    Type: AWS::Serverless::Api
    Properties:
      StageName: dev
      EndpointConfiguration: REGIONAL
      DefinitionBody:
        swagger: "2.0"
        info:
          title: "API"
        paths:
          /tips:
            get:
              x-amazon-apigateway-integration:
                uri:
                  Fn::Sub: arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${getFunction.Arn}/invocations
                responses: {}
                httpMethod: "POST"
                type: "aws_proxy"

Я уже пытался изменить httpMethod наx-amazon-apigateway-интеграции с «GET», но это не решает мою проблему.

В консоли AWS Lambda я вижу, что Lambda и Api Gateway связаны, но я не могу вызвать Lambdaчерез шлюз API.Я могу успешно выполнить свою лямбду с помощью тестового события в консоли.Это определенно что-то на стороне шлюза API.

Может кто-нибудь проверить, что я делаю неправильно?

1 Ответ

0 голосов
/ 25 октября 2018

После дальнейших раскопок я обнаружил, что мне пришлось реализовать метод GET пути /tips следующим образом:

        get:
          responses:
            '200':
              description: 200 response
              headers:
                Content-Type:
                  type: string
          produces:
          - application/json
          x-amazon-apigateway-integration:
            uri:
              Fn::Sub: "arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${getTipsFunction.Arn}/invocations"
            passthroughBehavior:  when_no_match
            responses:
              default:
                statusCode: 200
                responseParameters:
                  method.response.header.Content-Type: integration.response.header.content-type
            httpMethod: POST
            type: aws

Это решает проблему.

...