当前位置: 首页 > news >正文

如何在 Go 中创建和部署 AWS Lambda 函数

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

相关文章:

  • 2025-2030:视频联网平台的六大技术演进趋势
  • 关于隔离2:ADC芯片
  • 【每天一个知识点】医学领域的模式识别
  • Linux网络UDP与TCP
  • node.js|环境部署|源码编译高版本的node.js
  • 深度学习4——深度神经网络训练
  • 全同态加密医疗数据分析集python实现
  • Matlab 复合模糊PID
  • 云梦数字化系统 介绍
  • Oracle--SQL基本语法
  • 缓存 --- 内存缓存 or 分布式缓存
  • 【1】云原生,kubernetes 与 Docker 的关系
  • 代码随想录算法训练营第五十三天 | 105.有向图的完全可达性 106.岛屿的周长
  • synchronized 与分布式锁
  • 如何成为Prompt工程师:学习路径、核心技能与职业发展
  • 精益数据分析(7/126):打破创业幻想,拥抱数据驱动
  • 树莓派3B的外网访问
  • C语言之文本加密程序设计
  • 【NLP 60、实践 ⑭ 使用bpe构建词表】
  • Android Kotlin AIDL 完整实现与优化指南
  • 此前显示售罄的火车票“五一”前大量放出来了?12306回应
  • 家政阿姨如何炼成全国劳模?做饭、收纳、养老、外语样样都会
  • 4月制造业PMI为49%,比上月下降1.5个百分点
  • 中国人民解放军南部战区位南海海域进行例行巡航
  • 外交部:美方应在平等、尊重和互惠的基础上同中方开展对话
  • 书业观察|一本书的颜值革命:从毛边皮面到爆火的刷边书