当前位置: 首页 > 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

http://www.xdnf.cn/news/42823.html

相关文章:

  • 【linux基本工具的使用 yum vim gdb 以及makefile自动化构建项目】
  • 学习笔记十九——Rust多态
  • MFC文件-写MP4
  • Python打包程序为exe文件(py2exe)
  • AES (高级加密标准)
  • (mac)Grafana监控系统之监控Linux的Redis
  • 基于Matlab求解矩阵电容等效容值
  • 解决vscode找不到Python自定义模块,报错No module named ‘xxx‘
  • MySQL数据库(基础篇)
  • Gitlab runner 安装和注册
  • 解决模拟器打开小红书设备异常问题
  • n8n 中文系列教程_04.半开放节点深度解析:Code与HTTP Request高阶用法指南
  • 2025年渗透测试面试题总结-拷打题库08(题目+回答)
  • Docker Compose 外部网络(`external: true`)与内部网络的区别
  • 【AI图像创作变现】02工具推荐与差异化对比
  • 用于手部康复设备的TinyML语音分类嵌入式人工智能模块
  • 大模型day4 - LangChain
  • Jsp技术入门指南【九】详细讲解JSTL
  • Linux 文件系统目录结构详解
  • UID和GID的区别
  • optool为macho文件增加动态库
  • React+TS编写轮播图
  • FreeSWITCH 简单图形化界面41 - 批量SIP视频呼叫测试
  • 游戏引擎学习第237天:使用 OpenGL 显示图像
  • 绝对路径与相对路径
  • 【C++】多态 - 从虚函数到动态绑定的核心原理
  • HTTP:十.cookie机制
  • Kotlin实现Android应用保活方案
  • 基于maven-jar-plugin打造一款自动识别主类的maven打包插件
  • 【C++详解】C++入门(一)