操作步骤

以下测试基于 WSL2 Ubuntu 22.04 环境

# 下载最新 golangwget https://golang.google.cn/dl/go1.21.1.linux-amd64.tar.gz# 解压tar -C ~/.local/ -xzf go1.21.1.linux-amd64.tar.gz# 配置环境变量 PATHecho 'export PATH=$PATH:~/.local/go/bin' >> ~/.bashrcsource ~/.bashrc# 确认执行版本go version# go version go1.21.1 linux/amd64# 配置使用国内镜像go env -w GO111MODULE=ongo env -w GOPROXY=https://goproxy.cn,direct# 创建项目文件夹mkdir aws-lambda-go && cd aws-lambda-go# 初始化项目go mod init aws-lambda-go# 安装依赖go get github.com/aws/aws-lambda-go/lambda# 编辑主函数vim main.go
// main.gopackage mainimport ("fmt""context""github.com/aws/aws-lambda-go/lambda")type MyEvent struct {Name string `json:"name"`}func HandleRequest(ctx context.Context, name MyEvent) (string, error) {return fmt.Sprintf("Hello %s!", name.Name ), nil}func main() {lambda.Start(HandleRequest)}
# 编译GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -o main main.go# 打包zip -jrm main.zip main

来到 Lambda 控制台, 创建新的函数, Runtime 选择 Go 1.x

Code > Upload from > .zip file


选择前面编译并打包的 main.zip 文件上传. 随后创建新的 Test 匹配 Lambda 处理的 Event 数据格式:

{"name": "Dexter"}


Test, 欧耶~报错了!

返回 Code 标签页, 看到默认的 Handler 设置的是 hello, 这和我们写的入口函数名称不匹配, 是导致测试失败的原因.

Edit 修改 Handler 为 main

再次 Test, succeeded!

填坑记录

参考 官方文档 中的编译命令:

GOOS=linux GOARCH=amd64 go build -o bootstrap main.go

编译打包上传后在测试时会报错:

/var/task/main: /lib64/libc.so.6: version `GLIBC_2.32' not found (required by /var/task/main)

需要在编译时加上参数 CGO_ENABLED=0 也就是前面操作步骤中的编译命令才能正确运行. 相关讨论:
https://github.com/aws/aws-lambda-go/issues/340