AWS SAM локальный старт-API манипулировать входной полезной нагрузки - PullRequest
0 голосов
/ 04 июня 2019

Я создал функцию API Gateway & Lambda через CloudFormation (для функции) и файл swagger (для шлюза API).

Когда я запускаю конечную точку после развертывания, входные данные лямбда-события включают только мою полезную нагрузку.

Когда я запускаю API с помощью "SAM local start-api" и запускаю ту же конечную точку, кажется, что функция получила полный прокси ввод:

{
"httpMethod":"POST",
"body":"...",
"resource": "...",
"requestContext": {"...":"..."}
. . .
}

Пожалуйста, помогите мне проверить, что я делаю не так ...

Это моя конечная точка yaml:

  /authorization/generate-token:
    post:
      consumes:
      - "application/json"
      produces:
      - "application/json"
      parameters:
      - name: "x-api-key"
        in: "header"
        required: true
        type: "string"
      responses:
        200:
          description: "200 response"
          schema:
            $ref: "#/definitions/Empty"
          headers:
            Access-Control-Allow-Origin:
              type: "string"
      - api_key: []
      x-amazon-apigateway-integration:
        uri: "arn:aws:apigateway:us-west-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-west-2:ACCOUNT_NUMBER:function:generate_token/invocations"
        responses:
          default:
            statusCode: "200"
            responseParameters:
              method.response.header.Access-Control-Allow-Origin: "'*'"
        passthroughBehavior: "when_no_match"
        httpMethod: "POST"
        cacheNamespace: "8xok2h"
        cacheKeyParameters:
        - "method.request.header.x-api-key"
        contentHandling: "CONVERT_TO_TEXT"
        type: "aws"
    options:
      consumes:
      - "application/json"
      produces:
      - "application/json"
      responses:
        200:
          description: "200 response"
          schema:
            $ref: "#/definitions/Empty"
          headers:
            Access-Control-Allow-Origin:
              type: "string"
            Access-Control-Allow-Methods:
              type: "string"
            Access-Control-Allow-Headers:
              type: "string"
      x-amazon-apigateway-integration:
        responses:
          default:
            statusCode: "200"
            responseParameters:
              method.response.header.Access-Control-Allow-Methods: "'POST,GET,OPTIONS'"
              method.response.header.Access-Control-Allow-Headers: "'Content-Type'"
              method.response.header.Access-Control-Allow-Origin: "'*'"
        requestTemplates:
          application/json: "{\"statusCode\": 200}"
        passthroughBehavior: "when_no_match"
        type: "mock"

Функция CloudFormation:

GenerateToken:
    Type: 'AWS::Serverless::Function'
    DependsOn:
      - baseAuthRole
    Properties:
      FunctionName: generate_token
      Handler: index.handler
      Runtime: nodejs8.10
      CodeUri: auth/generate_token
      Description: ''
      MemorySize: 128
      Timeout: 3
      Role: !Sub 'arn:aws:iam::${AWS::AccountId}:role/AUTH_ROLE'
      Events:
        Api1:
          Type: Api
          Properties:
            RestApiId: !Ref BaseApi
            Path: /authorization/generate-token
            Method: POST

Объявление шлюза API:

  BaseApi:
    Type: AWS::Serverless::Api
    Properties:
      Name: ebiz-base
      DefinitionBody:
        Fn::Transform:
          Name: AWS::Include
          Parameters:
            Location: base-api/swagger.yaml
      StageName: !Ref stageName

Спасибо за помощников:)

...