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 bases 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 le muestra cómo realizar las siguientes acciones:
Verificar los prerrequisitos
Crea un proyecto Go para AWS Lambda
Agregue el código de conexión de MongoDB
Construir y empaquetar la función Lambda
Implementar y probar la función
Verificar los prerrequisitos
Antes de comenzar, asegúrate de tener lo siguiente:
A Clúster de MongoDB Atlas con acceso a la red y roles de usuario configurados. Si tiene una cuenta de AWS, puede registrarse en MongoDB Atlas a través de AWS Marketplace para pagar por el uso sin compromiso inicial.
El conjunto de datos de ejemplo de MongoDB Atlas se cargó en el clúster. Para saber cómo cargar estos datos de ejemplo, consulte la guía de introducción a MongoDB.
Una cuenta de Amazon Web Services (AWS).
Su clúster de MongoDB Atlas debe permitir el acceso desde AWS a través de una VPC o una lista global de direcciones IP permitidas. El usuario de su 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 módulos Go para sus 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.
Agregue el código de conexión de MongoDB
Añade 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 la función de AWS Lambda. El campo Limit especifica cuántos documentos se devolverán.
La estructura Movie representa los documentos de la colección movies de la base de datos sample_mflix. Contiene anotaciones BSON y JSON en cada campo. La anotación BSON asigna los campos del documento de MongoDB a la variable local. La anotación JSON asigna el campo local a los datos que AWS Lambda puede procesar. Puede incluir tantos campos como necesite. 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 garantizar que la función establezca una conexión a la base de datos solo cuando se inicia, 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 especifica ningún límite, devuelve todos los documentos. La función devuelve los resultados en formato JSON.
Construir y empaquetar la función Lambda
Cree su proyecto para el sistema operativo y la arquitectura que requiere AWS Lambda ejecutando el siguiente comando:
env GOOS=linux GOARCH=amd64 go build
Agregue su archivo binario a un archivo ZIP. El archivo binario se llama lambdaexample a menos que se especifique lo contrario.
Implementar y probar la función
Sube tu proyecto desde el panel de AWS Lambda. Confirma que el valor del controlador esté establecido en lambdaexample y el de la arquitectura en x86_64, como se muestra en la siguiente imagen:

Configure sus variables de entorno en AWS Lambda. Añada una variable ATLAS_URI y, a continuación, asigne el valor a su cadena de conexión de MongoDB Atlas.

Puede obtener su cadena de conexión desde el panel de MongoDB Atlas. Para obtener más información, consulte Guía deintroducción a Go.
Pruebe su función utilizando el Test Pestaña en el panel 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 se parece al 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 guía Administrar conexiones con AWS Lambda en la documentación de Atlas.