AWS Lambda 是一個無服務器計算平臺,您可以使用自己喜歡的編程語言編寫代碼,無需擔心設置虛擬機。
您只需為 Lambda 函數的調用次數和運行時間(毫秒)付費。
我們大多數人都了解 JavaScript 和 Python,但它們的內存效率不如編譯型語言。我們可以使用像 Go 這樣易于使用的編譯型語言。
在 AWS Lambda 中使用 Go 的優勢
雖然 AWS Lambda 支持 Java、.NET、NodeJS、Python、Amazon Linux 和 Ruby 等多種運行時,但 Golang 的優勢在于:
- 啟動速度更快
- 編譯型語言
- 類型安全的運行時
- 低內存占用
憑借這些優勢,您可以降低成本(同時提供更快的體驗),并讓您的客戶滿意。
在您的操作系統中安裝 Go
在 MacOS 中通過 Homebrew 安裝 Go
brew install go
創建main.go文件
package mainimport ("log""context""github.com/aws/aws-lambda-go/events""github.com/aws/aws-lambda-go/lambda"
)func handler(ctx context.Context, request events.APIGatewayProxyRequest) error {log.Println("HelloWorld from Golang Lambda")return nil
}func main() {lambda.Start(handler)
}
安裝 Golang 依賴項
go mod init example.com/demo
go get github.com/aws/aws-lambda-go/events
go get github.com/aws/aws-lambda-go/lambda
?構建并編譯 Lambda Go 函數
為 arm64 Linux 編譯 Go 代碼
我們將架構設置為 arm64,操作系統設置為 Linux
GOOS=linux GOARCH=arm64 CGO_ENABLED=0 go build -o bootstrap main.go
創建AL2023運行時lambda 函數
壓縮 Go 二進制文件
使用預編譯的 zip 工具。
zip lambda-handler.zip bootstrap
?創建Makefile
在根目錄中創建一個名為 Makefile 的文件。
請修改函數名稱和區域的參數
export GOOS=linux
export GOARCH=arm64
export CGO_ENABLED=0
.DEFAULT_GOAL := deploydeploy:go build -o bootstrapzip -r lambda-handler.zip bootstrapaws lambda update-function-code --function-name "my-go-lambda" --zip-file fileb://lambda-handler.zip --region="ap-southeast-2" | jq .
運行 Makefile
運行以下 CLI 命令來構建、壓縮和部署我們的示例 Lambda
ninjamac@ip-192-168-1-2 lambda % make deploygo build -o bootstrap
zip -r lambda-handler.zip bootstrap
updating: bootstrap (deflated 47%)
aws lambda update-function-code --function-name "my-go-lambda" --zip-file fileb://lambda-handler.zip --region="ap-southeast-2" | jq .
{"FunctionName": "my-go-lambda","FunctionArn": "arn:aws:lambda:ap-southeast-2:654654314383:function:my-go-lambda","Runtime": "provided.al2023","Role": "arn:aws:iam::654654314383:role/service-role/my-go-lambda-role-0o60l55q","Handler": "hello.handler","CodeSize": 5873979,"Description": "","Timeout": 3,"MemorySize": 128,"LastModified": "2025-04-20T02:49:22.000+0000","CodeSha256": "eM4bArP7poWFjF/wSTdr7ZQWtKBU3dievqixr8aBfzY=","Version": "$LATEST","TracingConfig": {"Mode": "PassThrough"},"RevisionId": "a0910405-bd14-4f8c-8385-793aa5bd7d52","State": "Active","LastUpdateStatus": "InProgress","LastUpdateStatusReason": "The function is being created.","LastUpdateStatusReasonCode": "Creating","PackageType": "Zip","Architectures": ["arm64"],"EphemeralStorage": {"Size": 512},"SnapStart": {"ApplyOn": "None","OptimizationStatus": "Off"},"RuntimeVersionConfig": {"RuntimeVersionArn": "arn:aws:lambda:ap-southeast-2::runtime:d8eddd048acf22c40d1c217557a9e2dc2f1d970bc73ed0ad914c201b5f1c7a78"},"LoggingConfig": {"LogFormat": "Text","LogGroup": "/aws/lambda/my-go-lambda"}
}
訪問該lambda URL