本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 .zip 封存檔部署 Go Lambda 函數
您的 AWS Lambda 函數的程式碼由指令碼或編譯程式及其相依項所組成。使用部署套件將函數程式碼部署到 Lambda。Lambda 支援兩種類型的部署套件:容器映像和 .zip 封存檔。
此頁面會說明如何建立 .zip 檔案作為 Go 執行期的部署套件,然後透過 AWS Management Console、AWS Command Line Interface (AWS CLI) 和 AWS Serverless Application Model (AWS SAM) 使用 .zip 檔案將函數程式碼部署至 AWS Lambda。
請注意,Lambda 使用 POSIX 檔案許可,因此在建立 .zip 封存檔之前,您可能需要設定部署套件資料夾的許可
在 macOS 和 Linux 上建立 .zip 檔案
下列步驟會說明如何使用 go build
命令編譯可執行檔,以及如何為 Lambda 建立 .zip 檔案部署套件。在編譯程式碼之前,請確定您已從中安裝了 lambda
go get github.com/aws/aws-lambda-go/lambda
如果您的函數使用 AWS SDK for Go,請下載標準的 SDK 模組,以及應用程式要求的任何 AWS 服務 API 用戶端。若要了解如何安裝適用於 Go 的 SDK,請參閱 AWS SDK for Go V2 入門
使用提供的運行時系列
Go 的實作方式與其他受管執行期不同。由於 Go 原生編譯為可執行二進製文件,因此它不需要專用的語言運行時。使用僅限作業系統的執行階段 (provided
執行階段系列) 將 Go 函數部署至 Lambda。
建立 .zip 部署套件 (macOS/Linux) 的方式
-
在含有應用程式
main.go
檔案的專案目錄中編譯可執行檔。注意下列事項:若是 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 -
(可選) 您可能需要用 Linux 上的
CGO_ENABLED=0
設定編譯套件:GOOS=linux GOARCH=
arm64
CGO_ENABLED=0 go build -o bootstrap -tags lambda.norpc main.go此命令為標準 C 程式庫 (
libc
) 版本建立了一個穩定的二進位套件,這在 Lambda 和其他設備上可能不同。 -
透過將可執行檔封裝在 .zip 檔案中建立部署套件。
zip myFunction.zip bootstrap
注意
bootstrap
檔案必須位於 .zip 檔案的根層級。 -
建立函數。注意下列事項:
aws lambda create-function --function-name myFunction \ --runtime provided.al2023 --handler
bootstrap
\ --architecturesarm64
\ --rolearn:aws:iam::111122223333:role/lambda-ex
\ --zip-file fileb://myFunction.zip
在 Windows 上建立 .zip 檔案
下列步驟顯示如何從下載 Windows build-lambda-zip
注意
如果尚未這樣做,您必須安裝 gitgit
可執行檔新增到 Windows %PATH%
環境變數。
在編譯代碼之前,請確保您已從中安裝了 lambda
go get github.com/aws/aws-lambda-go/lambda
如果您的函數使用 AWS SDK for Go,請下載標準的 SDK 模組,以及應用程式要求的任何 AWS 服務 API 用戶端。若要了解如何安裝適用於 Go 的 SDK,請參閱 AWS SDK for Go V2 入門
使用提供的運行時系列
Go 的實作方式與其他受管執行期不同。由於 Go 原生編譯為可執行二進製文件,因此它不需要專用的語言運行時。使用僅限作業系統的執行階段 (provided
執行階段系列) 將 Go 函數部署至 Lambda。
建立 .zip 部署套件的方式 (Windows)
-
從下載build-lambda-zip工具 GitHub。
go install github.com/aws/aws-lambda-go/cmd/build-lambda-zip@latest
-
使用您的
GOPATH
工具來建立 .zip 檔案。如果您已預設安裝 Go,則該工具通常位於%USERPROFILE%\Go\bin
中。否則,導覽至您安裝 Go 執行期之處,然後執行下列其中一個動作: -
建立函數。注意下列事項:
aws lambda create-function --function-name myFunction \ --runtime provided.al2023 --handler
bootstrap
\ --architecturesarm64
\ --rolearn:aws:iam::111122223333:role/lambda-ex
\ --zip-file fileb://myFunction.zip
使用 .zip 檔案建立及更新 Go Lambda 函數
建立 .zip 部署套件後,您可以使用該套件建立新的 Lambda 函數或更新現有函數。您可以使用 Lambda 主控台、AWS Command Line Interface 及 Lambda API 部署 .zip 套件。您也可以使用 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 儲存貯體。如需透過 AWS Management Console 將檔案上傳至 Amazon S3 儲存貯體的指示,請參閱《Amazon S3 入門》。若要使用 AWS CLI 上傳檔案,請參閱AWS CLI《使用者指南》 中的移動物件。
注意
您無法轉換現有的容器映像函數以使用 .zip 封存檔。您必須建立新的函數。
若要建立新的函數 (主控台)
-
開啟 Lambda 主控台的函數頁面
,然後選擇建立函數。 -
選擇 Author from scratch (從頭開始撰寫)。
-
在基本資訊下,請執行下列動作:
-
在函數名稱中輸入函數名稱。
-
對於 Runtime (執行時間),選擇
provided.al2023
。
-
-
(選用) 在 許可 下,展開 變更預設執行角色 。您可建立新的執行角色,或使用現有的角色。
-
選擇 建立函式。Lambda 會使用您選擇的執行期建立一個基本的「Hello world」函數。
若要從本機電腦上傳 .zip 封存檔 (主控台)
-
在 Lambda 主控台的函數頁面
中選擇要上傳 .zip 檔案的函數。 -
選取程式碼索引標籤。
-
在程式碼來源窗格中選擇上傳來源。
-
選擇 .zip 檔案。
-
若要上傳 .zip 檔案,請執行下列操作:
-
選擇上傳,然後在檔案選擇器中選取您的 .zip 檔案。
-
選擇 Open (開啟)。
-
選擇儲存。
-
若要從 Amazon S3 儲存貯體上傳 .zip 封存檔 (控制台)
-
在 Lambda 主控台的函數頁面
中選擇要上傳新 .zip 檔案的函數。 -
選取程式碼索引標籤。
-
在程式碼來源窗格中選擇上傳來源。
-
選擇 Amazon S3 位置。
-
貼上 .zip 檔案的 Amazon S3 連結 URL,然後選擇儲存。
透過 AWS CLI 使用 .zip 檔案建立及更新函數
您可以使用 AWS CLI 建立新函數,或使用 .zip 檔案更新現有函數。使用建立函數和update-function-code命令來部署您的 .zip 套件。如果您的 .zip 檔案小於 50 MB,則可以從本機建置電腦的檔案位置上傳 .zip 套件。若檔案較大,則必須先從 Amazon S3 儲存貯體上傳 .zip 套件。如需透過 AWS CLI 將檔案上傳至 Amazon S3 儲存貯體的指示,請參閱《AWS CLI 使用者指南》中的 移動物件。
注意
如果您透過 AWS CLI 從 Amazon S3 儲存貯體上傳 .zip 檔案,則儲存貯體必須與函數位於相同的 AWS 區域。
若要使用 .zip 檔案與 AWS CLI 建立新函數,您必須指定下列項目:
-
函數名稱 (
--function-name
) -
函數的執行期 (
--runtime
) -
函數執行角色的 Amazon Resource Name (ARN) (
--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=myBucketName,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 myBucketName --s3-key myFileName.zip --s3-object-version myObject Version
透過 Lambda API 使用 .zip 檔案建立及更新函數
若要使用 .zip 封存檔建立及更新函數,請使用下列 API 操作:
透過 AWS SAM 使用 .zip 檔案建立及更新函數
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 函數。若要使用 AWS SAM 建立 Lambda 函數,您可以將 .zip 檔案儲存在 Amazon S3 儲存貯體或建置電腦的本機資料夾中。如需透過 AWS CLI 將檔案上傳至 Amazon S3 儲存貯體的指示,請參閱《AWS CLI 使用者指南》中的 移動物件。
在您的 AWS SAM 範本中,AWS::Serverless::Function
資源會指定您的 Lambda 函數。在本資源中設定下列屬性,以使用 .zip 封存檔建立函數:
-
PackageType
:設定為Zip
-
CodeUri
-設定為函數程式碼的 Amazon S3 URI、本機資料夾的路徑或FunctionCode物件 -
Runtime
:設定為所選執行期
在使用 AWS SAM 的情況下,如果您的 .zip 檔案大於 50 MB,則不需要先將檔案上傳至 Amazon S3 儲存貯體。AWS SAM 可以從本機建置電腦上的位置上傳大小上限為 250 MB (解壓縮) 的 .zip 套件。
若要進一步瞭解如何使用 .zip 檔案部署函數AWS SAM,請參閱AWS SAM開發人員指南AWS::Serverless::Function中的。
範例:使用 AWS SAM 搭配 provided.al2023 建置 Go 函數
-
建立具備下列屬性的 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]
-
-
使用 sam build 命令來編譯可執行檔。
sam build
-
使用 sam deploy 命令將函數部署到 Lambda。
sam deploy --guided
透過 AWS CloudFormation 使用 .zip 檔案建立及更新函數
您可以使用 AWS CloudFormation 來建立使用 .zip 封存檔的 Lambda 函數。若要使用 .zip 檔案建立 Lambda 函數,您必須先將檔案上傳至 Amazon S3 儲存貯體。如需透過 AWS CLI 將檔案上傳至 Amazon S3 儲存貯體的指示,請參閱《AWS CLI 使用者指南》中的 移動物件。
在您的 AWS CloudFormation 範本中,AWS::Lambda::Function
資源會指定您的 Lambda 函數。在本資源中設定下列屬性,以使用 .zip 封存檔建立函數:
-
PackageType
:設定為Zip
-
Code
:在S3Bucket
和S3Key
欄位中輸入 Amazon S3 儲存貯體名稱和 .zip 檔案名稱。 -
Runtime
:設定為所選執行期
AWS CloudFormation 產生的 .zip 檔案不能超過 4 MB。若要進一步瞭解有關使用 .zip 檔案部署函數的更多資訊AWS CloudFormation,請參閱使用AWS CloudFormation者指南AWS::Lambda::Function中的。
為相依項建立 Go 層
注意
以 Go 等編譯語言函數使用層,可能不會具有與使用 Python 等轉譯語言一樣的好處。由於 Go 是編譯語言,因此您的函數仍須在 init 階段,將所有共用組件手動載入記憶體中,這可能會增加冷啟動時間。相反地,建議您在編譯時加入任何共用程式碼,利用任何內建的編譯器最佳化功能。
本節中的指示說明如何在層中包含相依項。
Lambda 會自動偵測 /opt/lib
目錄中的任何程式庫,以及 /opt/bin
目錄中的任何二進位檔案。若要確保 Lambda 正確找到您的層內容,請建立層,結構如下:
custom-layer.zip └ lib | lib_1 | lib_2 └ bin | bin_1 | bin_2
封裝層之後,請參閱在 Lambda 中建立和刪除層及為函數新增層,完成層設定。