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

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

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

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

此頁面說明如何建立 .zip 檔案作為 Go 執行時間的部署套件,然後使用 .zip 檔案將函數程式碼部署到 AWS Lambda ,並使用 AWS Management Console、 AWS Command Line Interface (AWS CLI) 和 AWS Serverless Application Model (AWS SAM)。

請注意,Lambda 使用POSIX檔案許可,因此在建立 .zip 檔案封存之前,您可能需要設定部署套件資料夾的許可

在 macOS 和 Linux 上建立 .zip 檔案

下列步驟會說明如何使用 go build 命令編譯可執行檔,以及如何為 Lambda 建立 .zip 檔案部署套件。在編譯程式碼之前,請確定您已從 安裝 lambda 套件 GitHub。此模組會讓您實作執行期界面,管理 Lambda 與函數程式碼之間的互動。若要下載此程式庫,請執行下列命令。

go get github.com/aws/aws-lambda-go/lambda

如果您的函數使用 AWS SDK for Go,請下載標準SDK模組集,以及應用程式所需的任何 AWS 服務API用戶端。若要了解如何安裝 SDK for Go,請參閱 AWS SDK for Go V2 入門

使用提供的執行期系列

Go 的實作方式與其他受管執行期不同。由於 Go 原生編譯至可執行的二進位檔案,因此不需要專用語言執行時間。使用僅限作業系統的執行期provided執行期系列) 將 Go 函數部署至 Lambda。

建立 .zip 部署套件 (macOS/Linux) 的方式
  1. 在含有應用程式 main.go 檔案的專案目錄中編譯可執行檔。注意下列事項:

    • 可執行檔必須命名為 bootstrap。如需詳細資訊,請參閱命名

    • 設定您的目標 指令集架構。僅限作業系統的執行時間支援 arm64 和 x86_64。

    • 您可以使用選用lambda.norpc標籤來排除 lambda 程式庫的遠端程序呼叫 (RPC) 元件。只有在您使用已取代的 Go 1.x 執行期時,才需要 RPC元件。排除 會RPC減少部署套件的大小。

    若是 arm64 架構:

    GOOS=linux GOARCH=arm64 go build -tags lambda.norpc -o bootstrap main.go

    若是 x86_64 架構:

    GOOS=linux GOARCH=amd64 go build -tags lambda.norpc -o bootstrap main.go
  2. (可選) 您可能需要用 Linux 上的 CGO_ENABLED=0 設定編譯套件:

    GOOS=linux GOARCH=arm64 CGO_ENABLED=0 go build -o bootstrap -tags lambda.norpc main.go

    此命令為標準 C 程式庫 (libc) 版本建立了一個穩定的二進位套件,這在 Lambda 和其他設備上可能不同。

  3. 透過將可執行檔封裝在 .zip 檔案中建立部署套件。

    zip myFunction.zip bootstrap
    注意

    bootstrap 檔案必須位於 .zip 檔案的根層級。

  4. 建立函數。注意下列事項:

    • 二進位檔必須命名為 bootstrap,但處理常式名稱可以是任何名稱。如需詳細資訊,請參閱命名

    • 如果您使用的是 arm64,才需要選擇 --architectures 選項。預設值為 x86_64。

    • 針對 --role,指定執行角色 的 Amazon Resource Name (ARN)。

    aws lambda create-function --function-name myFunction \ --runtime provided.al2023 --handler bootstrap \ --architectures arm64 \ --role arn:aws:iam::111122223333:role/lambda-ex \ --zip-file fileb://myFunction.zip

在 Windows 上建立 .zip 檔案

下列步驟說明如何從 下載適用於 Windows build-lambda-zip的工具 GitHub、編譯可執行檔,以及建立 .zip 部署套件。

注意

如果尚未這樣做,您必須安裝 git,然後將 git 可執行檔新增到 Windows %PATH% 環境變數。

在編譯程式碼之前,請確定您已從 安裝 lambda 程式庫 GitHub。若要下載此程式庫,請執行下列命令。

go get github.com/aws/aws-lambda-go/lambda

如果您的函數使用 AWS SDK for Go,請下載標準SDK模組集,以及應用程式所需的任何 AWS 服務API用戶端。若要了解如何安裝 SDK for Go,請參閱 AWS SDK for Go V2 入門

使用提供的執行期系列

Go 的實作方式與其他受管執行期不同。由於 Go 原生編譯至可執行的二進位檔案,因此不需要專用語言執行時間。使用僅限作業系統的執行期provided執行期系列) 將 Go 函數部署至 Lambda。

建立 .zip 部署套件的方式 (Windows)
  1. 從 下載build-lambda-zip工具 GitHub。

    go install github.com/aws/aws-lambda-go/cmd/build-lambda-zip@latest
  2. 使用您的 GOPATH 工具來建立 .zip 檔案。如果您已預設安裝 Go,則該工具通常位於 %USERPROFILE%\Go\bin 中。否則,導覽至您安裝 Go 執行期之處,然後執行下列其中一個動作:

    cmd.exe

    在 cmd.exe 中執行下列其中一項 (視您的目標 指令集架構 而定)。僅限作業系統的執行時間支援 arm64 和 x86_64。

    您可以使用選用lambda.norpc標籤來排除 lambda 程式庫的遠端程序呼叫 (RPC) 元件。只有在您使用已取代的 Go 1.x 執行期時,才需要 RPC元件。排除 會RPC減少部署套件的大小。

    範例 - 適用 x86_64 架構
    set GOOS=linux set GOARCH=amd64 set CGO_ENABLED=0 go build -tags lambda.norpc -o bootstrap main.go %USERPROFILE%\Go\bin\build-lambda-zip.exe -o myFunction.zip bootstrap
    範例 - 適用 arm64 架構
    set GOOS=linux set GOARCH=arm64 set CGO_ENABLED=0 go build -tags lambda.norpc -o bootstrap main.go %USERPROFILE%\Go\bin\build-lambda-zip.exe -o myFunction.zip bootstrap
    PowerShell

    在 中 PowerShell,根據目標指令集架構 執行下列其中一項。僅限作業系統的執行時間支援 arm64 和 x86_64。

    您可以使用選用lambda.norpc標籤來排除 lambda 程式庫的遠端程序呼叫 (RPC) 元件。只有在您使用已取代的 Go 1.x 執行期時,才需要 RPC元件。排除 會RPC減少部署套件的大小。

    若是 x86_64 架構:

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

    若是 arm64 架構:

    $env:GOOS = "linux" $env:GOARCH = "arm64" $env:CGO_ENABLED = "0" go build -tags lambda.norpc -o bootstrap main.go ~\Go\Bin\build-lambda-zip.exe -o myFunction.zip bootstrap
  3. 建立函數。注意下列事項:

    • 二進位檔必須命名為 bootstrap,但處理常式名稱可以是任何名稱。如需詳細資訊,請參閱命名

    • 如果您使用的是 arm64,才需要選擇 --architectures 選項。預設值為 x86_64。

    • 針對 --role,指定執行角色 的 Amazon Resource Name (ARN)。

    aws lambda create-function --function-name myFunction \ --runtime provided.al2023 --handler bootstrap \ --architectures arm64 \ --role arn:aws:iam::111122223333:role/lambda-ex \ --zip-file fileb://myFunction.zip

使用 .zip 檔案建立及更新 Go Lambda 函數

建立 .zip 部署套件之後,您可以使用它建立新的 Lambda 函數或更新現有的函數。您可以使用 Lambda 主控台、 AWS Command Line Interface和 Lambda 部署 .zip 套件API。您也可以使用 AWS Serverless Application Model  (AWS SAM) 和  AWS CloudFormation 建立並更新 Lambda 函數。

Lambda 的 .zip 部署套件大小上限為 250 MB (解壓縮)。請注意,此限制適用於您上傳的所有檔案 (包括任何 Lambda 層) 的大小總和。

Lambda 執行時間需有許可才能讀取部署套裝服務中的檔案。在 Linux 許可八進位表示法中,Lambda 需要 644 個不可執行檔案的許可 (rw-r--r--),以及 755 個目錄和可執行檔案的許可 (rwxr-xr-x)。

在 Linux 和 MacOS 中,使用 chmod 命令變更部署套件中檔案和目錄的檔案許可。例如,若要提供可執行檔正確的許可,請執行下列命令。

chmod 755 <filepath>

若要在 Windows 中變更檔案許可,請參閱 Microsoft Windows 文件的 Set, View, Change, or Remove Permissions on an Object

透過主控台使用 .zip 檔案建立及更新函數

若要建立新函數,您必須先在主控台中建立函數,然後上傳您的 .zip 封存檔。若要更新現有函數,請開啟函數的頁面,然後按照同樣的程序新增更新後的 .zip 檔案。

如果您的 .zip 檔案小於 50 MB,您可以透過直接從本機電腦上傳檔案來建立或更新函數。若 .zip 檔案大於 50 MB,您必須先將套件上傳至 Amazon S3 儲存貯體。如需如何使用 將檔案上傳至 Amazon S3 儲存貯體的指示 AWS Management Console,請參閱 Amazon S3 入門。若要使用 上傳檔案 AWS CLI,請參閱 AWS CLI 使用者指南 中的移動物件

注意

您無法轉換現有的容器映像函數以使用 .zip 封存檔。您必須建立新的函數。

若要建立新的函數 (主控台)
  1. 開啟 Lambda 主控台的函數頁面,然後選擇建立函數

  2. 選擇 Author from scratch (從頭開始撰寫)。

  3. 基本資訊下,請執行下列動作:

    1. 函數名稱中輸入函數名稱。

    2. 對於 Runtime (執行時間),選擇 provided.al2023

  4. (選用) 在 許可 下,展開 變更預設執行角色 。您可建立新的執行角色,或使用現有的角色。

  5. 選擇建立函數。Lambda 會使用您選擇的執行期建立一個基本的「Hello world」函數。

若要從本機電腦上傳 .zip 封存檔 (主控台)
  1. 在 Lambda 主控台的函數頁面中選擇要上傳 .zip 檔案的函數。

  2. 選取程式碼索引標籤。

  3. 程式碼來源窗格中選擇上傳來源

  4. 選擇 .zip 檔案

  5. 若要上傳 .zip 檔案,請執行下列操作:

    1. 選擇上傳,然後在檔案選擇器中選取您的 .zip 檔案。

    2. 選擇 Open (開啟)。

    3. 選擇 Save (儲存)。

若要從 Amazon S3 儲存貯體上傳 .zip 封存檔 (控制台)
  1. 在 Lambda 主控台的函數頁面中選擇要上傳新 .zip 檔案的函數。

  2. 選取程式碼索引標籤。

  3. 程式碼來源窗格中選擇上傳來源

  4. 選擇 Amazon S3 位置

  5. 貼上 .zip 檔案URL的 Amazon S3 連結,然後選擇儲存

使用 使用 .zip 檔案建立和更新函數 AWS CLI

您可以使用 AWS CLI 建立新函數,或使用 .zip 檔案更新現有函數。使用 create-functionupdate-function-code 命令來部署 .zip 套件。如果您的 .zip 檔案小於 50 MB,則可以從本機建置電腦的檔案位置上傳 .zip 套件。若檔案較大,則必須先從 Amazon S3 儲存貯體上傳 .zip 套件。如需如何使用 將檔案上傳至 Amazon S3 儲存貯體的指示 AWS CLI,請參閱 AWS CLI 使用者指南 中的移動物件

注意

如果您使用 從 Amazon S3 儲存貯體上傳 .zip 檔案 AWS CLI,則該儲存貯體必須與您的 AWS 區域 函數位於相同位置。

若要使用具有 的 .zip 檔案建立新的函數 AWS CLI,您必須指定以下內容:

  • 函數名稱 (--function-name)

  • 函數的執行期 (--runtime)

  • 函數執行角色 (ARN) 的 Amazon Resource Name (--role

  • 函數程式碼中處理常式方法的名稱 (--handler)

您也必須指定 .zip 檔案的位置。如果您的 .zip 檔案位於本機建置電腦上的資料夾中,請使用 --zip-file 選項來指定檔案路徑,如下列範例命令所示。

aws lambda create-function --function-name myFunction \ --runtime provided.al2023 --handler bootstrap \ --role arn:aws:iam::111122223333:role/service-role/my-lambda-role \ --zip-file fileb://myFunction.zip

若要在 Amazon S3 儲存貯體中指定 .zip 檔案的位置,請使用如下列範例命令所示的 --code 選項。您只需針對版本控制的物件使用 S3ObjectVersion 參數。

aws lambda create-function --function-name myFunction \ --runtime provided.al2023 --handler bootstrap \ --role arn:aws:iam::111122223333:role/service-role/my-lambda-role \ --code S3Bucket=amzn-s3-demo-bucket,S3Key=myFileName.zip,S3ObjectVersion=myObjectVersion

若要使用 更新現有函數CLI,您可以使用 --function-name 參數指定函數的名稱。您也必須指定要用來更新函數程式碼的 .zip 檔案的位置。如果您的 .zip 檔案位於本機建置電腦上的資料夾中,請使用 --zip-file 選項來指定檔案路徑,如下列範例命令所示。

aws lambda update-function-code --function-name myFunction \ --zip-file fileb://myFunction.zip

若要在 Amazon S3 儲存貯體中指定 .zip 檔案的位置,請使用如下列範例命令所示的 --s3-bucket 和 --s3-key 選項。您只需針對版本控制的物件使用 --s3-object-version 參數。

aws lambda update-function-code --function-name myFunction \ --s3-bucket amzn-s3-demo-bucket --s3-key myFileName.zip --s3-object-version myObject Version

使用 Lambda 使用 .zip 檔案建立和更新函數 API

若要使用 .zip 檔案封存建立和更新函數,請使用下列API操作:

使用 .zip 檔案建立和更新函數 AWS SAM

AWS Serverless Application Model (AWS SAM) 是一種工具組,可協助簡化在 上建置和執行無伺服器應用程式的程序 AWS。您可以在 YAML或 JSON 範本中定義應用程式的資源,並使用 AWS SAM 命令列界面 (AWS SAM CLI) 來建置、封裝和部署應用程式。當您從 AWS SAM 範本建置 Lambda 函數時, AWS SAM 會自動使用函數程式碼和您指定的任何相依性建立 .zip 部署套件或容器映像。若要進一步了解如何使用 AWS SAM 建置和部署 Lambda 函數,請參閱 AWS Serverless Application Model 開發人員指南 中的入門 AWS SAM

您也可以使用 AWS SAM 來使用現有的 .zip 檔案封存來建立 Lambda 函數。若要使用 建立 Lambda 函數 AWS SAM,您可以將 .zip 檔案儲存在 Amazon S3 儲存貯體或建置機器的本機資料夾中。如需如何使用 將檔案上傳至 Amazon S3 儲存貯體的指示 AWS CLI,請參閱 AWS CLI 使用者指南 中的移動物件

在 AWS SAM 範本中,AWS::Serverless::Function資源會指定您的 Lambda 函數。在本資源中設定下列屬性,以使用 .zip 封存檔建立函數:

  • PackageType:設定為 Zip

  • CodeUri - 設定為函數程式碼的 Amazon S3 URI、本機資料夾的路徑或FunctionCode物件

  • Runtime:設定為所選執行期

使用 AWS SAM時,如果您的 .zip 檔案大於 50MB則不需要先將其上傳至 Amazon S3 儲存貯體。 AWS SAM 可以從本機建置機器的位置上傳 .zip 套件,最大允許大小為 250MB (解壓縮)。

若要進一步了解如何在 中使用 .zip 檔案部署函數 AWS SAM,請參閱 AWS SAM 開發人員指南 中的 AWS::Serverless::Function

範例:使用 使用 provided.al2023 AWS SAM 建置 Go 函數
  1. 建立具有下列屬性的 AWS SAM 範本:

    • BuildMethod:指定應用程式的編譯器。請使用 go1.x

    • Runtime:使用 provided.al2023

    • CodeUri:輸入程式碼的路徑。

    • Architectures:為 arm64 架構使用 [arm64]。若是 x86_64 指令集架構,請使用 [amd64] 或移除 Architectures 屬性。

    範例 template.yaml
    AWSTemplateFormatVersion: '2010-09-09' Transform: 'AWS::Serverless-2016-10-31' Resources: HelloWorldFunction: Type: AWS::Serverless::Function Metadata: BuildMethod: go1.x Properties: CodeUri: hello-world/ # folder where your main program resides Handler: bootstrap Runtime: provided.al2023 Architectures: [arm64]
  2. 使用 sam build 命令來編譯可執行檔。

    sam build
  3. 使用 sam deploy 命令將函數部署到 Lambda。

    sam deploy --guided

使用 .zip 檔案建立和更新函數 AWS CloudFormation

您可以使用 AWS CloudFormation 來使用 .zip 檔案封存建立 Lambda 函數。若要使用 .zip 檔案建立 Lambda 函數,您必須先將檔案上傳至 Amazon S3 儲存貯體。如需如何使用 將檔案上傳至 Amazon S3 儲存貯體的指示 AWS CLI,請參閱 使用者指南中的移動物件AWS CLI

在 AWS CloudFormation 範本中,AWS::Lambda::Function資源會指定您的 Lambda 函數。在本資源中設定下列屬性,以使用 .zip 封存檔建立函數:

  • PackageType:設定為 Zip

  • Code:在 S3Bucket 和 S3Key 欄位中輸入 Amazon S3 儲存貯體名稱和 .zip 檔案名稱。

  • Runtime:設定為所選執行期

AWS CloudFormation 產生的 .zip 檔案不得超過 4MB 。若要進一步了解如何在 中使用 .zip 檔案部署函數 AWS CloudFormation,請參閱 AWS CloudFormation 使用者指南 中的 AWS::Lambda::Function