Overview
本教程向您展示如何使用连接并查询MongoDB Atlas 的Go驾驶员创建无服务器函数,以及如何在无服务器环境中高效管理数据库连接。
无服务器函数和数据库连接
无服务器函数,也称为函数即服务 (FaaS),可根据需求自动扩展。由于您无法控制函数的正常运行时间或扩展,因此必须谨慎管理并发数据库连接。数据库连接是有限的,因此您必须有效地连接到数据库。
Tutorial
本教程向您展示如何执行以下操作:
验证先决条件
为 AWS Lambda创建Go项目
添加MongoDB连接代码
构建并包Lambda函数
部署并测试函数
验证先决条件
在开始之前,请确保您具备以下内容:
配置了网络访问权限和用户角色的 MongoDB Atlas 群集。如果您拥有 AWS 帐户,则可以使用 AWS Marketplace 注册MongoDB Atlas以支付使用费,而无需预先承诺。
您的MongoDB Atlas 群集必须允许通过VPC或全局IP支持列表从 AWS访问权限。您的数据库用户必须具有对示例数据库的读取访问权限。
为 AWS Lambda创建Go项目
通过运行以下命令在计算机上创建新的Go项目:
mkdir lambdaexample cd lambdaexample go mod init lambdaexample
这些命令创建项目目录并为您的 AWS Lambda和MongoDB依赖项初始化Go模块。
通过运行以下命令来安装MongoDB Go驾驶员和 AWS Lambda SDK:
go get go.mongodb.org/mongo-driver/v2/mongo go get github.com/aws/aws-lambda-go/lambda
在项目目录中创建名为 main.go 的文件。此文件将包含Lambda函数代码。
添加MongoDB连接代码
将以下代码添加到您的 main.go 文件中:
package main import ( "context" "os" "github.com/aws/aws-lambda-go/lambda" "go.mongodb.org/mongo-driver/v2/bson" "go.mongodb.org/mongo-driver/v2/bson/primitive" "go.mongodb.org/mongo-driver/v2/mongo" "go.mongodb.org/mongo-driver/v2/mongo/options" ) type EventInput struct { Limit int64 `json:"limit"` } type Movie struct { ID primitive.ObjectID `bson:"_id" json:"_id"` Title string `bson:"title" json:"title"` Year int32 `bson:"year" json:"year"` } func HandleRequest(ctx context.Context, input EventInput) ([]Movie, error) { if err != nil { return nil, err } collection := client.Database("sample_mflix").Collection("movies") opts := options.Find() if input.Limit != 0 { opts = opts.SetLimit(input.Limit) } cursor, err := collection.Find(ctx, struct{}{}, opts) if err != nil { return nil, err } var movies []Movie if err = cursor.All(ctx, &movies); err != nil { return nil, err } return movies, nil } func main() { client, err = mongo.Connect(options.Client().ApplyURI(os.Getenv("ATLAS_URI"))) if err != nil { return error } defer func() { _ = client.Disconnect(context.Background) }() lambda.Start(func(ctx context.Context, input EventInput) ([]Movie, error) { return HandleRequest(ctx context.Context, client, input EventInput) }) }
前面的代码定义了 EventInput 和 Movie 数据结构。
EventInput 结构表示发送到 AWS Lambda函数的输入。 Limit字段指定要返回的文档数量。
Movie 结构表示 sample_mflix数据库的 movies集合中的文档。每个字段都有BSON和JSON注释。 BSON注释将MongoDB文档字段映射到局部变量。 JSON注释将本地字段映射到 AWS Lambda可以进程的数据。您可以根据需要包含任意数量的字段。仅返回包含的字段。
提示
ATLAS_URI 环境变量
您可以将 ATLAS_URI 值作为环境变量存储在 AWS Lambda配置中。
该代码在 HandleRequest 和 main 函数外部连接到数据库,以确保函数仅在启动时而不是每次运行时都建立数据库连接。
HandleRequest 函数查询 sample_mflix.movies集合并返回不超过指定限制的文档。如果未提供限制,则返回所有文档。该函数以JSON形式返回结果。
部署并测试函数
使用 AWS Lambda仪表盘上传您的项目。确认处理程序值设立为 lambdaexample,架构值设立为 x86_64,如下图所示:

在 AWS Lambda中设置环境变量。添加 ATLAS_URI 变量,然后将值设立为MongoDB Atlas连接字符串。

您可以从MongoDB Atlas仪表盘获取连接字符串。要学习;了解详情,请参阅 Go入门指南。
使用 AWS Lambda仪表盘盘中的 Test标签页测试您的函数。为事件JSON提供一个可选限制值,并确认该函数返回 sample_mflix.movies集合中的电影列表。返回的 Movie文档如下所示:
{ "ID": ..., "Title": "The Truman Show", "Year": 1998 }
其他资源
要学习;了解有关将 AWS Lambda与MongoDB结合使用时的最佳实践的更多信息,请参阅Atlas文档中的“使用 AWS Lambda管理连接”指南。