AWS Lambda Golang HelloWorld 快速入门

操作步骤

以下测试基于 WSL2 Ubuntu 22.04 环境

shell 复制代码
# 下载最新 golang
wget https://golang.google.cn/dl/go1.21.1.linux-amd64.tar.gz

# 解压
tar -C ~/.local/ -xzf go1.21.1.linux-amd64.tar.gz

# 配置环境变量 PATH
echo 'export PATH=$PATH:~/.local/go/bin' >> ~/.bashrc
source ~/.bashrc

# 确认执行版本
go version
# go version go1.21.1 linux/amd64

# 配置使用国内镜像
go env -w GO111MODULE=on
go 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
go 复制代码
// main.go
package main

import (
        "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)
}
shell 复制代码
# 编译
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 数据格式:

json 复制代码
{
  "name": "Dexter"
}

Test, 欧耶~报错了!

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

Edit 修改 Handler 为 main

再次 Test, succeeded!

填坑记录

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

bash 复制代码
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

相关推荐
游学者6 小时前
Docker 升级后 VS Code 本地调试 AWS Lambda 报「Running AWS SAM projects locally requires Docker」的那些坑与排查思路
aws·lambda·vs code
进击切图仔6 小时前
基于腾讯云服务构建 ros1 noetic 开发环境
云计算·腾讯云
源代码•宸6 小时前
Golang原理剖析(defer、defer面试与分析)
开发语言·经验分享·后端·面试·golang·defer·开放编码
翼龙云_cloud6 小时前
阿里云渠道商:云服务计费 按量 包年 预留实例怎么选?
服务器·阿里云·云计算
且去填词7 小时前
三色标记法与混合写屏障:Go GC 垃圾回收全流程解析
开发语言·算法·golang·三色标记法·gogc·屏障技术
gaize12137 小时前
阿里云ECS云服务器怎么样?值得入手吗?最新测评
服务器·阿里云·云计算
博思云为8 小时前
企业级智能PPT生成:Amazon云+AI驱动,全流程自动化提效
人工智能·语言模型·云原生·数据挖掘·云计算·语音识别·aws
源代码•宸8 小时前
Golang原理剖析(interface)
服务器·开发语言·后端·golang·interface·type·itab
2401_865854889 小时前
腾讯云的IP是原生IP吗?
tcp/ip·云计算·腾讯云
翼龙云_cloud9 小时前
腾讯云渠道商:新手怎么在腾讯云 CVM 搭建 Ghost 博客?
运维·云计算·腾讯云