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

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

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

本页将介绍如何创建 .zip 文件作为 Go 运行时的部署程序包,然后使用 .zip 文件通过 AWS Command Line Interface (AWS CLI) 将函数代码部署到 AWS Lambda。要在 Lambda 控制台上传 .zip 文件,请参阅 Deployment packages

先决条件

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

工具和库

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

适用于 Go 的工具和库

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

示例应用程序

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

Go 中的示例 Lambda 应用程序

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

在 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. 通过将可执行文件打包为 .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

使用 AWS CLI 创建 Lambda 函数

Lambda 需要了解函数代码使用的 Lambda runtime 环境(位于 runtime 中)、Lambda 函数的名称(位于 function-name 中)、函数代码中的 Lambda 处理程序(位于 handler 中),以及可用于调用函数的执行角色(位于 role 中)。

使用 create-function 命令创建 Lambda 函数。

aws lambda create-function --function-name my-function --runtime go1.x --zip-file fileb://function.zip --handler main --role arn:aws:iam::your-account-id:role/execution_role