如何在 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 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

相关推荐
AKAMAI6 小时前
实时可观测性:Akamai Cloud Pulse 警报功能正式发布
人工智能·云计算
其实防守也摸鱼10 小时前
信创是什么:一文读懂信息技术应用创新
人工智能·阿里云·云计算·github·copilot
行业研究员12 小时前
AgentOps实测:腾讯云 ADP4.0 企业级智能体平台避坑指南
云计算·腾讯云·agentops
tg_xianheyun14 小时前
BytePlus CDN加速如何优化海外访问体验?
云计算·cdn·cdn加速·云直播·byteplus
聚搜云——JuSouClouD15 小时前
武汉阿里云代理商:云虚拟主机需要自己备份吗?网站文件误删后还能恢复吗
阿里云·云计算
一路向北finish16 小时前
《CentOS7 OpenStack Mitaka 全栈部署实战:双节点搭建全流程与典型故障排坑指南》
运维·mysql·serverless·云计算·openstack
ylj_dev16 小时前
从 0 构建 AI Workload Platform(七):可观测性、故障注入与性能验证
go·prometheus·可观测性·opentelemetry·故障注入
tg_xianheyun18 小时前
2026BytePlus CDN加速应用场景全面解析
服务器·数据库·阿里云·云计算·cdn·全球访问优化·云直播
我的div丢了肿么办19 小时前
go语言中基本数据类型的转换
后端·go
swancloud20 小时前
AWS S3、EBS、EFS 有什么区别?不同存储场景该怎么选
云计算·aws