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

相关推荐
360智汇云17 小时前
Kata Container 部署与应用实践
云计算
thinktik17 小时前
还在手把手教AI写代码么? 让你的AWS Kiro AI IDE直接读飞书需求文档给你打工吧!
后端·serverless·aws
XXX-X-XXJ20 小时前
腾讯云语音接口实现会议系统
云计算·腾讯云
柠檬汁Dev1 天前
还在等DBA给你库?我3分钟就拉起一个高可用集群
数据库·云计算·dba
一朵筋斗云1 天前
golang底层原理剖析
go
学历真的很重要1 天前
Claude Code Windows 原生版安装指南
人工智能·windows·后端·语言模型·面试·go
杏花春雨江南1 天前
腾讯云 CLB (Cloud Load Balancer) 为例,详细讲解如何配置 Nginx 集群
nginx·云计算·腾讯云
Techer_Y1 天前
云安全服务(参考自腾讯云工程师认证课程)
网络·云计算·腾讯云
Craze_rd1 天前
腾讯云TDSQL-C 与传统MySQL对比
mysql·云计算·腾讯云
Lynnxiaowen1 天前
今天继续学习shell脚本
linux·运维·学习·云计算·bash