我正在尝试从 go1.x 迁移到 AL2 运行时以部署我的 Lambda 函数,但我不知道该怎么做。我使用 Serverless Framework 与 make 结合进行部署。这是我目前使用的 Makefile:
go_apps = bin/func1 bin/func2 bin/fun3
bin/% : functions/%.go functions/common.go
env GOOS=linux go build -ldflags="-s -w" -o $@ $< functions/common.go
build: $(go_apps)
clean:
rm -rf ./bin
deploy:
sls deploy --verbose
install: build deploy
任何帮助将不胜感激
更新: 我发现这篇文章应该有助于迁移
当我实施完毕并确保其按预期工作时,我会汇报
更新 2:
我能够使用 SAM Local 在新的 AL2 运行时中成功测试我的函数借助此 AWS 示例 AL2 实现(使用 Go 语言)。我将 common.go 文件移至新存储库,并成功用它构建了一个 go 模块(然后将其导入到我的函数中)。这只是一个开始,因为我尚未通过无服务器部署我的函数,但与此同时,这可能对其他人有所帮助。
答案1
我发现你实际上可以使用两个(或更多)文件进行 go build,并将其运行/部署到 AL2 运行时。确保你的第二个文件(在我的情况下是 common.go)具有可公开访问的函数/结构。此外,请确保将 github.com/aws/aws-lambda-go/lambda 更新到最新版本。然后使用此github repo 示例帮助您使用无服务器模板。
这是我的 Makefile 示例,用于使用无服务器框架部署到 AWS Lambda:
go_bootstrap = func1 func2 func3 \
build:
for n in $(go_bootstrap); \
do \
echo "$$n"; \
env GOOS=linux go build -o ./build/"$$n"/bootstrap functions/common.go functions/"$$n".go; \
zip -j ./build/zip/"$$n".zip ./build/"$$n"/bootstrap; \
done
deploy:
sls deploy --verbose
install: build deploy