使用 .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 Lambda (Amazon Command Line Interface) 将函数代码部署到 Amazon CLI。

Prerequisites

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

使用 provided.al2 运行时构建 Go

Go 的实施方式与其他本地运行时不同。Lambda 将 Go 视为自定义运行时,因此您可以在 provided.al2 运行时上创建 Go 函数。您可以使用 Amazon SAM 构建命令来构建 .zip 文件包。

使用 Amazon SAM 为 AL2 函数构建 Go

  1. 更新 Amazon SAM 模板以使用 provided.al2 运行时。此外,还可以将 BuildMethod 设置为生成文件。

    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 指令集架构构建包。

  2. 将文件生成文件添加到项目文件夹,内容如下:

    GOOS=linux go build -o bootstrap cp ./bootstrap $(ARTIFACTS_DIR)/.

对于示例应用程序,请下载 Go on AL2。自述文件包含介绍构建和运行应用程序的说明。此外,您还可以查看博客文章将 Amazon Lambda 函数迁移到 Amazon Linux 2