我从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程序的入口点是main函数,这是否意味着一个CodeStar项目只能包含一个处理程序?
我知道lambda函数应该很小,最好只处理一个功能,但似乎需要创建许多项目,这将很难管理。我的理解正确吗?
发布于 2018-02-05 18:17:38
您的handler函数是您的入口点,但是由于您可以使用任意的json数据调用它,因此您可以根据发送给handler的数据从您的json内部调用多个函数。
APIGatewayProxyRequest有Body字段。你在此基础上做什么取决于你自己。
lambda (AFAIU)的思想是拥有最小的二进制文件,这些二进制文件只做一件事。在我看来,使用lambda内部的请求路由实现复杂的应用程序似乎是在滥用该模型,但它是可行的。
发布于 2018-02-06 17:15:46
这是我到目前为止想出的方法
项目文件夹结构:
project
folder1
main.go
folder2
main.go
buildspec.yml
template.ymlbuildspec.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中,否则它将无法工作。
https://stackoverflow.com/questions/48619686
复制相似问题