У меня есть 3 API:
- / company / api1 ->, который вызывает лямбда-функцию
- / company / api2 ->, которая также вызывает лямбда-функцию
- / 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, как в моем случае)?Это может помочь.