Golang在AWS Lambda中的打包实践
Golang在AWS Lambda中的打包实践 你好,
我有一个如下的目录结构:
main.go mylib/ mylib.go
我应该如何压缩这些文件夹以便部署到 AWS Lambda?
我已经完成了 main.go 文件的构建。这是唯一需要放入 Zip 文件中的文件吗?还是库文件也需要一起压缩?
3 回复
简而言之,您必须构建代码,仅压缩并部署可执行文件。
请使用此 GitHub 仓库 https://github.com/aws/aws-lambda-go 并阅读官方 AWS 指南 https://docs.aws.amazon.com/lambda/latest/dg/lambda-go-how-to-create-deployment-package.html
在AWS Lambda中部署Go函数时,需要将编译后的二进制文件和所有依赖项打包到ZIP文件中。根据你的目录结构,以下是正确的打包方法:
打包步骤
- 编译main.go(你已经完成这一步):
GOOS=linux GOARCH=amd64 go build -o bootstrap main.go
- 创建包含二进制文件的ZIP包:
zip deployment.zip bootstrap
重要说明
- 只需要编译后的二进制文件:
mylib/目录和mylib.go文件不需要包含在ZIP中,因为在编译过程中这些依赖已经被静态链接到bootstrap二进制文件中了 - 必须命名为bootstrap:AWS Lambda要求Go函数的可执行文件必须命名为
bootstrap - 正确的文件权限:确保
bootstrap文件具有执行权限:
chmod +x bootstrap
验证打包内容
检查ZIP文件内容确认只包含必要的文件:
unzip -l deployment.zip
输出应该只有:
Archive: deployment.zip
Length Date Time Name
--------- ---------- ----- ----
8458765 2024-01-01 10:00 bootstrap
--------- -------
8458765 1 file
完整部署命令示例
# 编译
GOOS=linux GOARCH=amd64 go build -o bootstrap main.go
# 设置执行权限
chmod +x bootstrap
# 打包
zip deployment.zip bootstrap
# 部署到Lambda(使用AWS CLI)
aws lambda update-function-code --function-name your-function-name --zip-file fileb://deployment.zip
这种打包方式利用了Go语言的静态编译特性,所有依赖都包含在单个二进制文件中,简化了部署过程。

