我从AWS Compute Blog找到了以下代码示例:
package main
import (
"github.com/aws/aws-lambda-go/events"
"github.com/aws/aws-lambda-go/lambda"
)
func handler(request events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error) {
return events.APIGatewayProxyResponse{
StatusCode: 200,
Body: "Hello World",
}, nil
}
func main() {
lambda.Start(handler)
}
由于lambda.Start只接受一个处理程序而Go程序的入口点是主函数,这是否意味着一个CodeStar项目只能包含一个处理程序?
我知道lambda函数的大小应该很小,最好处理一个功能,但似乎需要创建很多项目并且很难管理。我能正确理解吗?
答案 0 :(得分:4)
您的handler
func是您的入口点,但由于您可以使用任意json数据调用它,因此您可以根据发送给处理程序的数据在handler
内调用多个函数。 / p>
APIGatewayProxyRequest
有Body
字段。你做的是由你决定的。
lambda(AFAIU)的想法是拥有最小的二进制文件,但只做一件事。使用lambda中的请求路由实现复杂的应用程序似乎就像滥用模型一样,但它是可行的。
答案 1 :(得分:4)
这是我到目前为止所提出的内容
项目文件夹结构:
project
folder1
main.go
folder2
main.go
buildspec.yml
template.yml
buildspec.yml:
...
build:
commands:
- cd folder1
- go build -o main
- cd ../folder2
- go build -o main
....
template.yml:
....
Resources:
GetTest1:
Type: AWS::Serverless::Function
Properties:
CodeUri: ./folder1
Handler: main
Runtime: go1.x
Role:
Fn::ImportValue:
!Join ['-', [!Ref 'ProjectId', !Ref 'AWS::Region', 'LambdaTrustRole']]
Events:
GetEvent:
Type: Api
Properties:
Path: /test1
Method: get
GetTest2:
Type: AWS::Serverless::Function
Properties:
CodeUri: ./folder2
Handler: main
Runtime: go1.x
Role:
Fn::ImportValue:
!Join ['-', [!Ref 'ProjectId', !Ref 'AWS::Region', 'LambdaTrustRole']]
Events:
GetEvent:
Type: Api
Properties:
Path: /test2
Method: get
....
请务必注意,子目录中的所有main.go文件,folder1/main.go
,folder2/main.go
都需要位于package main
,否则无效。