使用 .zip 文件归档部署 Go Lambda 函数
您的 Amazon Lambda 函数代码由脚本或编译的程序及其依赖项组成。您可以使用部署程序包将函数代码部署到 Lambda。Lambda 支持两种类型的部署程序包:容器镜像和 .zip 文件归档。
本页将介绍如何创建 .zip 文件作为 Go 运行时的部署程序包,然后使用 .zip 文件通过 Amazon Lambda (Amazon Command Line Interface) 将函数代码部署到 Amazon CLI。
先决条件
Amazon CLI 是一种开源工具,让您能够在命令行 Shell 中使用命令与 Amazon 服务进行交互。要完成本节中的步骤,您必须满足以下条件:
工具和库
Lambda 为 Go 运行时提供了以下工具和库:
适用于 Go 的工具和库
-
适用于 Go 的 Amazon 开发工具包
:适用于 Go 编程语言的官方 Amazon 开发工具包。 -
github.com/aws/aws-lambda-go/lambda
:适用于 Go 的 Lambda 编程模型的实现。Amazon Lambda 使用此程序包调用您的处理程序。 -
github.com/aws/aws-lambda-go/lambdacontext
:用于访问上下文对象中的上下文信息的帮助程序。 -
github.com/aws/aws-lambda-go/events
:此库提供常见事件源集成的类型定义。 -
github.com/aws/aws-lambda-go/cmd/build-lambda-zip
:此工具可用于在 Windows 上创建 .zip 文件存档。
有关更多信息,请参阅 GitHub 上的 aws-lambda-go
示例应用程序
Lambda 为 Go 运行时提供了以下示例应用程序:
Go 中的 Lambda 应用程序示例
-
blank-go
– 此 Go 函数显示 Lambda 的 Go 库、日志记录、环境变量和 Amazon 开发工具包的使用情况。
在 macOS 和 Linux 上创建 .zip 文件
以下步骤演示如何使用 go get
从 GitHub 下载 lambda
-
从 GitHub 下载 lambda 库。
go get github.com/aws/aws-lambda-go/lambda
-
编译您的可执行文件。
GOOS=linux go build main.go
将
GOOS
设置为linux
可确保编译的可执行文件与 Go 运行时兼容(即使您在非 Linux 环境中编译它也是如此)。 -
(可选)如果您的
main
程序包包含多个文件,请使用以下 go build命令来编译此程序包: GOOS=linux go build main
-
(可选)您可能需要使用 Linux 上的
CGO_ENABLED=0
编译程序包:GOOS=linux CGO_ENABLED=0 go build main.go
此命令为标准 C 库 (
libc
) 版本创建稳定的二进制程序包,这在 Lambda 和其他设备上可能有所不同。 -
Lambda 使用 POSIX 文件权限,因此在创建 .zip 文件归档之前,您可能需要为部署程序包文件夹设置权限
。 -
通过将可执行文件打包为 .zip 文件来创建部署程序包。
zip function.zip main
在 Windows 上创建 .zip 文件
以下步骤演示如何使用 go get
从 GitHub 下载用于 Windows 的 build-lambda-zip
如果您尚未完成此操作,则必须安装 gitgit
可执行文件添加到您的 Windows %PATH%
环境变量。
-
从 GitHub 下载 build-lambda-zip 工具:
go.exe get -u github.com/aws/aws-lambda-go/cmd/build-lambda-zip
-
使用来自
GOPATH
的工具创建 .zip 文件。如果您有 Go 的默认安装,则该工具通常在%USERPROFILE%\Go\bin
中。否则,请导航到安装 Go 运行时的位置,然后执行以下任一操作:
使用 provided.al2 运行时构建 Go
Go 的实施方式与其他本机运行时不同。Lambda 将 Go 视为自定义运行时,因此您可以在 provided.al2 运行时上创建 Go 函数。您可以使用 Amazon SAM 构建命令来构建 .zip 文件包。
使用 Amazon SAM 为 AL2 函数构建 Go
更新 Amazon SAM 模板以使用 provided.al2 运行时。还可以将 BuildMethod 设置为 makefile。
Resources: HelloWorldFunction: Type: AWS::Serverless::Function Properties: CodeUri: hello-world/ Handler: my.bootstrap.file Runtime: provided.al2 Architectures: [arm64] Metadata: BuildMethod: makefile
删除
Architectures
属性来构建适用于 x86_64 指令集架构的软件包。将文件 makefile 添加到项目文件夹中,其中包含以下内容:
GOOS=linux go build -o bootstrap cp ./bootstrap $(ARTIFACTS_DIR)/.
对于示例应用程序,请下载 AL2 上的 Go