AWS SAM: вызов Http API из API-шлюза через SAM - PullRequest
0 голосов
/ 02 мая 2019

У меня есть 3 API:

  1. / company / api1 ->, который вызывает лямбда-функцию
  2. / company / api2 ->, которая также вызывает лямбда-функцию
  3. / company / api3 -> который вызывает другую конечную точку HTTP

Все эти 3 API должны находиться под одним и тем же шлюзом API.Для первых 2 API я настроил свой шаблон SAM следующим образом:

    JWTCreateUser:
    Type: AWS::Serverless::Function 
    Properties:
      CodeUri: create-user-jwt-lambda/target/JWTCreateUser-1.0-SNAPSHOT.jar
      Handler: com.company.CreateUserHandler::handleRequest
      Runtime: java8
      Events:
        CreateUser:
          Type: Api
          Properties:
            RestApiId: 
                Ref: OrderingAPI
            Path: /company/api1
            Method: post


  GenerateJWTToken:
    Type: AWS::Serverless::Function 
    Properties:
      CodeUri: login-jwt-lambda/target/JWTGenerateToken-1.0-SNAPSHOT.jar
      Handler: com.company.GenerateJWTFunctionHandler::handleRequest
      Runtime: java8
      Events:
        LoginUser:
          Type: Api 
          Properties:
            RestApiId: 
                Ref: OrderingAPI
            Path: /company/api2
            Method: post
            Auth:
              Authorizer: LoginAuthorizer

Для третьего API я добавил следующее в шаблон SAM:

OrderingAPI:
  Type: AWS::Serverless::Api
  Properties:
    StageName: v1
    DefinitionBody: 
        swagger: "2.0"
        info:
          title: "Ordering APIs"
        paths:
          /company/api3:
            post:
              consumes:
              - "application/json"
              produces:
              - "application/json"
              parameters:
              - name: "Content-Type"
                in: "header"
                required: false
                type: "string"
              responses:
                "200":
                  description: "200 response"
                "201":
                  description: "201 response"
              x-amazon-apigateway-request-validator: "Validate body"
              x-amazon-apigateway-integration:
                uri: "https://mycompany.com/order"
                responses:
                  default:
                    statusCode: "200"
                    responseTemplates:
                      application/json: "#set($allParams = $input.params())\n$input.json('$')"
                requestParameters:
                  integration.request.header.Ticket: "method.request.header.Ticket"
                  integration.request.header.ticket: "method.request.header.ticket"
                  integration.request.header.Content-Type: "method.request.header.Content-Type"
                  integration.request.header.tenant: "method.request.header.tenant"
                passthroughBehavior: "when_no_match"
                httpMethod: "POST"
                type: "http"

Здесь проблемаis - создается только один API (/ company / api3), остальные 2 API не создаются.Это потому, что я объявил swagger для / company / api3, который переопределяет автоматически сгенерированные swagger для / company / api1 и / company / api2.

Есть ли способ, которым мы можем создать AWS :: Serverless :: Api без указания swagger (DocumentBody), и все же мы можем настроить конечную точку HTTP (/ company / api3, как в моем случае)?Это может помочь.

...