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

相关推荐
冬天的风滚草1 小时前
揭秘云原生混布资源调度器Koordinator (十五)GPU 信息采集与上报机制
云计算
冬天的风滚草1 小时前
揭秘云原生混布资源调度器Koordinator (十三)GPU 资源管理总览
云计算
冬天的风滚草1 小时前
揭秘云原生混布资源调度器Koordinator (十四)DeviceShare 调度插件详解
云计算
CodeCaptain5 小时前
阿里云ECS上配置Nginx的反向代理
nginx·阿里云·云计算
有谁看见我的剑了?13 小时前
VMware OVF Tool 工具安装学习
云计算
故乡de云1 天前
Google Cloud与AWS大数据AI服务对比:2026年企业选型指南
大数据·人工智能·aws
盛夏5201 天前
Docker容器化部署SpringBoot+Vue项目:从零到一在阿里云宝塔面板的实践指南
阿里云·docker·云计算
狐571 天前
2026-01-10-云计算问答题部分整理-期末复习
云计算·期末复习
2401_861277551 天前
中国电信星辰AI大模型有哪些主要功能
人工智能·云计算·软件工程·语音识别
源代码•宸2 天前
Leetcode—1929. 数组串联&&Q1. 数组串联【简单】
经验分享·后端·算法·leetcode·go