Golang在AWS Lambda中的打包实践

Golang在AWS Lambda中的打包实践 你好,

我有一个如下的目录结构:

main.go mylib/ mylib.go

我应该如何压缩这些文件夹以便部署到 AWS Lambda?

我已经完成了 main.go 文件的构建。这是唯一需要放入 Zip 文件中的文件吗?还是库文件也需要一起压缩?

3 回复

谢谢!!

更多关于Golang在AWS Lambda中的打包实践的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


简而言之,您必须构建代码,仅压缩并部署可执行文件。
请使用此 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文件中。根据你的目录结构,以下是正确的打包方法:

打包步骤

  1. 编译main.go(你已经完成这一步):
GOOS=linux GOARCH=amd64 go build -o bootstrap main.go
  1. 创建包含二进制文件的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语言的静态编译特性,所有依赖都包含在单个二进制文件中,简化了部署过程。

回到顶部