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 main
import (
"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 := deploy
deploy:
go build -o bootstrap
zip -r lambda-handler.zip bootstrap
aws 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 deploy
go 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
