MongoDB.local SF, Jan 15: See the speaker lineup & ship your AI vision faster. Use WEB50 to save 50%
Find out more >
Docs 菜单
Docs 主页
/ /

教程:从 AWS Lambda连接到MongoDB

本教程向您展示如何使用连接并查询MongoDB Atlas 的Go驾驶员创建无服务器函数,以及如何在无服务器环境中高效管理数据库连接。

无服务器函数,也称为函数即服务 (FaaS),可根据需求自动扩展。由于您无法控制函数的正常运行时间或扩展,因此必须谨慎管理并发数据库连接。数据库连接是有限的,因此您必须有效地连接到数据库。

本教程向您展示如何执行以下操作:

  • 验证先决条件

  • 为 AWS Lambda创建Go项目

  • 添加MongoDB连接代码

  • 构建并包Lambda函数

  • 部署并测试函数

1

在开始之前,请确保您具备以下内容:

  • 配置了网络访问权限和用户角色的 MongoDB Atlas 群集。如果您拥有 AWS 帐户,则可以使用 AWS Marketplace 注册MongoDB Atlas以支付使用费,而无需预先承诺。

  • 示例MongoDB Atlas数据集已加载到集群中。要学习;了解如何加载此示例数据,请参阅MongoDB入门指南。

  • Amazon Web Services (AWS) 帐户。

您的MongoDB Atlas 群集必须允许通过VPC或全局IP支持列表从 AWS访问权限。您的数据库用户必须具有对示例数据库的读取访问权限。

2

通过运行以下命令在计算机上创建新的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函数代码。

3

将以下代码添加到您的 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)
})
}

前面的代码定义了 EventInputMovie 数据结构。

EventInput 结构表示发送到 AWS Lambda函数的输入。 Limit字段指定要返回的文档数量。

Movie 结构表示 sample_mflix数据库的 movies集合中的文档。每个字段都有BSON和JSON注释。 BSON注释将MongoDB文档字段映射到局部变量。 JSON注释将本地字段映射到 AWS Lambda可以进程的数据。您可以根据需要包含任意数量的字段。仅返回包含的字段。

提示

ATLAS_URI 环境变量

您可以将 ATLAS_URI 值作为环境变量存储在 AWS Lambda配置中。

该代码在 HandleRequestmain 函数外部连接到数据库,以确保函数仅在启动时而不是每次运行时都建立数据库连接。

HandleRequest 函数查询 sample_mflix.movies集合并返回不超过指定限制的文档。如果未提供限制,则返回所有文档。该函数以JSON形式返回结果。

4

通过运行以下命令,针对 AWS Lambda所需的操作系统和架构构建项目:

env GOOS=linux GOARCH=amd64 go build

将二进制文件添加到 ZIP 存档中。除非另有说明,否则二进制文件的名称为 lambdaexample

5

使用 AWS Lambda仪表盘上传您的项目。确认处理程序值设立为 lambdaexample,架构值设立为 x86_64,如下图所示:

AWS Lambda MongoDB Go项目

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

AWS Lambda MongoDB配置

您可以从MongoDB Atlas仪表盘获取连接字符串。要学习;了解详情,请参阅 Go入门指南。

使用 AWS Lambda仪表盘盘中的 Test标签页测试您的函数。为事件JSON提供一个可选限制值,并确认该函数返回 sample_mflix.movies集合中的电影列表。返回的 Movie文档如下所示:

{ "ID": ..., "Title": "The Truman Show", "Year": 1998 }

要学习;了解有关将 AWS Lambda与MongoDB结合使用时的最佳实践的更多信息,请参阅Atlas文档中的“使用 AWS Lambda管理连接”指南。

后退

连接故障排除

在此页面上