使用 .zip 封存檔部署 Go Lambda 函數 - AWS Lambda

使用 .zip 封存檔部署 Go Lambda 函數

您的 AWS Lambda 函數的程式碼由指令碼或編譯程式及其相依項所組成。使用部署套件將函數程式碼部署到 Lambda。Lambda 支援兩種類型的部署套件:容器映像和 .zip 封存檔。

此頁面描述了如何建立 .zip 檔案作為 Go 執行時間的部署套件,然後透過 AWS Command Line Interface (AWS CLI) 使用 .zip 檔案將函數程式碼部署至 AWS Lambda。

先決條件

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. 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 函數。您可以使用 AWS SAM 建置命令來建置 .zip 檔案套件。

使用 AWS SAM 來建置 AL2 函數的 Go

  1. 更新 AWS 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 指示集架構的套件。

  2. 將檔案 makefile 新增到專案資料夾,其中包含以下內容:

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

針對範例應用程式,請下載 Go on AL2。讀我檔案包含建置和執行應用程式的指示。您也可以檢視部落格文章「遷移 AWS Lambda 函數到 Amazon Linux 2」。