Overview
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.
Funciones sin servidor y conexiones de base de datos
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.
Tutorial
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
Verificar los prerrequisitos
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.
Crea un proyecto Go para AWS Lambda
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.
Agrega el código de conexión a MongoDB
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.
Construir y empaquetar la función Lambda
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.
Implementa y pruebe la función
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:

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.

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 }
Recursos adicionales
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.