使用 .zip 文件存档部署 Go Lambda 函数 - Amazon Lambda
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

使用 .zip 文件存档部署 Go Lambda 函数

您的 Amazon Lambda 函数代码由脚本或编译的程序及其依赖项组成。您可以使用部署程序包来将函数代码部署到 Lambda。Lambda 支持两种类型的部署程序包:容器映像和 .zip 文件存档。

本页将介绍如何创建 .zip 文件作为 Go 运行时的部署程序包,然后使用 .zip 文件通过 Amazon Command Line Interface (Amazon CLI) 将函数代码部署到 Amazon Lambda。

先决条件

Amazon CLI 是一种开源工具,让您能够在命令行 Shell 中使用命令与 Amazon 服务进行交互。要完成本节中的步骤,您必须满足以下条件:

工具和库

Lambda 为 Go 运行时提供了以下工具和库:

适用于 Go 的工具和库

有关更多信息,请参阅 GitHub 上的 aws-lambda-go

示例应用程序

Lambda 为 Go 运行时提供了以下示例应用程序:

Go 中的示例 Lambda 应用程序

  • blank-go – 一个 Go 函数,用于显示 Lambda 的 Go 库、日志记录、环境变量和 Amazon 开发工具包的使用情况。

在 macOS 和 Linux 上创建 .zip 文件

以下步骤演示如何使用 go get 从 GitHub 下载 lambda 库,以及如何使用 go build 编译可执行文件。

  1. 从 GitHub 下载 lambda 库。

    go get github.com/aws/aws-lambda-go/lambda
  2. 编译您的可执行文件。

    GOOS=linux go build main.go

    GOOS 设置为 linux 可确保编译的可执行文件与 Go 运行时兼容(即使您在非 Linux 环境中编译它也是如此)。

  3. (可选)如果您的 main 程序包包含多个文件,请使用以下 go build 命令来编译此程序包:

    GOOS=linux go build main
  4. (可选)您可能需要使用 Linux 上的 CGO_ENABLED=0 编译程序包:

    GOOS=linux CGO_ENABLED=0 go build main.go

    此命令为标准 C 库 (libc) 版本创建稳定的二进制程序包,这在 Lambda 和其他设备上可能有所不同。

  5. Lambda 使用 POSIX 文件权限,因此在创建 .zip 文件存档之前,您可能需要为部署程序包文件夹设置权限

  6. 通过将可执行文件打包为 .zip 文件来创建部署程序包。

    zip function.zip main

在 Windows 上创建 .zip 文件

以下步骤演示如何使用 go get 从 GitHub 下载用于 Windows 的 build-lambda-zip,以及如何使用 go build 编译可执行文件。

注意

如果您尚未完成此操作,则必须安装 git,然后将 git 可执行文件添加到您的 Windows %PATH% 环境变量。

  1. 从 GitHub 下载 build-lambda-zip 工具:

    go.exe get -u github.com/aws/aws-lambda-go/cmd/build-lambda-zip
  2. 使用来自 GOPATH 的工具创建 .zip 文件。如果您有 Go 的默认安装,则该工具通常在 %USERPROFILE%\Go\bin 中。否则,请导航到安装 Go 运行时的位置,然后执行以下任一操作:

    cmd.exe

    在 cmd.exe 中,运行以下命令:

    set GOOS=linux go build -o main main.go %USERPROFILE%\Go\bin\build-lambda-zip.exe -output main.zip main
    PowerShell

    在 PowerShell 中,运行以下命令:

    $env:GOOS = "linux" $env:CGO_ENABLED = "0" $env:GOARCH = "amd64" go build -o main main.go ~\Go\Bin\build-lambda-zip.exe -output main.zip main