Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

Tutorial: Conéctate a MongoDB desde AWS Lambda

Este tutorial te muestra cómo crear una función sin servidor utilizando el driver Go que conecta y consulta a MongoDB Atlas, y cómo gestionar las conexiones a bases de datos de manera eficiente en un entorno sin servidor.

Las funciones sin servidor, también llamadas funciones como servicio (FaaS), se escalan automáticamente según la demanda. Dado que no puede controlar el tiempo de actividad ni el escalado de su función, debe administrar con cuidado las conexiones simultáneas a bases de datos. Las conexiones a bases de datos son limitadas, por lo que debe conectarse a ellas de forma eficiente.

Este tutorial te muestra cómo realizar las siguientes acciones:

  • Verificar los prerrequisitos

  • Crea un proyecto Go para AWS Lambda

  • Agrega el código de conexión a MongoDB

  • Construir y empaquetar la función Lambda

  • Implementa y pruebe la función

1

Antes de comenzar, asegúrate de tener lo siguiente:

  • A Un clúster MongoDB Atlas con el acceso a la red y los roles de usuario configurados. Si tienes una cuenta de AWS, puedes registrarte en MongoDB Atlas utilizando el AWS Marketplace para pagar por el uso sin compromiso inicial.

  • El conjunto de datos de muestra de MongoDB Atlas se ha cargado en tu clúster. Para aprender cómo cargar estos datos de muestra, consulte la guía Para comenzar con MongoDB.

  • Una cuenta de Amazon Web Services (AWS).

Tu clúster de MongoDB Atlas debe permitir el acceso desde AWS a través de una VPC o una lista global de permitidos por IP. Tu usuario de base de datos debe tener acceso de lectura a las bases de datos de muestra.

2

Cree un nuevo proyecto Go en su computadora ejecutando los siguientes comandos:

mkdir lambdaexample
cd lambdaexample
go mod init lambdaexample

Estos comandos crean un directorio de proyecto e inicializan los módulos de Go para tus dependencias de AWS Lambda y MongoDB.

Instale el controlador MongoDB Go y el SDK de AWS Lambda ejecutando los siguientes comandos:

go get go.mongodb.org/mongo-driver/v2/mongo
go get github.com/aws/aws-lambda-go/lambda

Crea un archivo denominado main.go En el directorio de tu proyecto. Este archivo contendrá el código de tu función Lambda.

3

Agrega el siguiente código a tu archivo 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)
})
}

El código anterior define las estructuras de datos EventInput y Movie.

La estructura EventInput representa la entrada enviada a tu función AWS Lambda. El campo Limit indica cuántos documentos se deben devolver.

La estructura Movie representa los documentos en la colección movies de la base de datos sample_mflix. Tiene anotaciones BSON y JSON en cada campo. La anotación BSON asigna campos de documentos de MongoDB a la variable local. La anotación JSON mapea el campo local con los datos que AWS Lambda puede procesar. Puede incluir tantos o tan pocos campos como sea necesario. Solo se devuelven los campos incluidos.

Tip

Variable de entorno ATLAS_URI

Puede almacenar el valor ATLAS_URI como una variable de entorno en su configuración de AWS Lambda.

El código se conecta a la base de datos fuera de las funciones HandleRequest y main para asegurar que la función establezca una conexión a la base de datos solo cuando se inicia y no cada vez que se ejecuta.

La función HandleRequest consulta la colección sample_mflix.movies y devuelve documentos hasta el límite especificado. Si no se proporciona un límite, devuelve todos los documentos. La función devuelve los resultados como JSON.

4

Compile su proyecto para el sistema operativo y la arquitectura que AWS Lambda requiere ejecutando el siguiente comando:

env GOOS=linux GOARCH=amd64 go build

Agrega tu archivo binario a un fichero ZIP. El archivo binario tiene el nombre lambdaexample a menos que se especifique lo contrario.

5

Carga tu proyecto utilizando el tablero de AWS Lambda. Confirma que el valor del manejador esté establecido en lambdaexample y el valor de la arquitectura esté establecido en x86_64, como se muestra en la siguiente imagen:

Proyecto AWS Lambda MongoDB Go

Configura tus variables de entorno en AWS Lambda. Agrega una variable ATLAS_URI y luego asigna el valor a la cadena de conexión de tu MongoDB Atlas.

Configuración de AWS Lambda MongoDB

Puedes obtener tu cadena de conexión desde el tablero de MongoDB Atlas. Para obtener más información, consulta el Guía Cómo empezar con Go.

Pon a prueba tu función usando el Test pestaña en el tablero de AWS Lambda. Proporcione un valor límite opcional para el JSON del evento y confirme que la función devuelva una lista de películas de la colección sample_mflix.movies. Un documento Movie devuelto es similar a lo siguiente:

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

Para obtener más información sobre las mejores prácticas al usar AWS Lambda con MongoDB, consulte la Administrar conexiones con AWS Lambda guía en la documentación de Atlas.

Volver

Solución de problemas de conexión

En esta página