可以有多个api网关路由直接指向同一lambda函数。如何设置它取决于您如何维护基础设施。
例如,如果您将cloudformation与无服务器应用程序模型(sam)结合使用,我建议您这样做,因为这可能是跟踪无服务器基础架构(和基础架构代码=awesome)的最直接的方法,您可以用一个单独的
API Gateway source event
对于在aws::serverless::api中定义的每个路由。
大致如下:
YourApi:
Type: AWS::Serverless::Api
Properties:
...
DefinitionBody:
swagger: 2.0
...
paths:
'/Login':
post:
x-amazon-apigateway-integration:
# APIG->Lambda requests are always POST
httpMethod: post
type: aws_proxy
uri:
Fn::Sub: arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${YourLambda.Arn}/invocations
'/Register':
post:
x-amazon-apigateway-integration:
# APIG->Lambda requests are always POST
httpMethod: post
type: aws_proxy
uri:
Fn::Sub: arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${YourLambda.Arn}/invocations
'/GetUserData':
get:
x-amazon-apigateway-integration:
# APIG->Lambda requests are always POST
httpMethod: post
type: aws_proxy
uri:
Fn::Sub: arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${YourLambda.Arn}/invocations
YourLambda:
Type: AWS::Serverless::Function
Properties:
...
Events:
login:
Type: Api
Properties:
Path: '/Login'
Method: post
RestApiId: {Ref: YourApi}
register:
Type: Api
Properties:
Path: '/Register'
Method: post
RestApiId: {Ref: YourApi}
getUserData:
Type: Api
Properties:
Path: '/GetUserData'
Method: get
RestApiId: {Ref: YourApi}
不过,请记住,将路由合并为一个lambda函数是有利弊的。
This StackOverflow question/answer
对此进行了探讨,但我想为分离的lambda函数增加一些好处:
-
更清晰地衡量路线被调用的频率
-您可以在cloudwatch中获得每个lambda函数的调用/错误/etc.度量,因此将它们分离可以很容易地看到人们注册和登录的频率,等等。
-
更精细的警报
-您可以为不同的路由设置不同的延迟/错误/等阈值,如果警报关闭,您就确切地知道它用于哪个lambda函数。