개요
이 튜토리얼에서는 MongoDB Atlas 에 연결하고 쿼리하는 고 (Go) 운전자 사용하여 서버리스 함수를 생성하는 방법과 서버리스 환경에서 데이터베이스 연결을 효율적으로 관리 방법을 보여줍니다.
서버리스 함수 및 데이터베이스 연결
FaaS(Function as a Service)라고도 하는 서버리스 기능은 수요에 따라 자동으로 확장하다 . 함수의 가동 시간이나 확장 제어할 수 없으므로 동시 데이터베이스 연결을 신중하게 관리 해야 합니다. 데이터베이스 연결은 제한되어 있으므로 데이터베이스 에 효율적으로 연결해야 합니다.
튜토리얼
이 튜토리얼에서는 다음 조치를 수행하는 방법을 보여줍니다.
전제 조건 확인
AWS Lambda 용 고 (Go) 프로젝트 생성
MongoDB 연결 코드 추가
Lambda 함수 빌드 및 패키지
함수 배포 및 테스트
전제 조건 확인
시작하기 전에 다음이 준비되어 있는지 확인하세요.
네트워크 액세스 및 사용자 역할이 구성된 MongoDB Atlas cluster . AWS 계정이 있는 경우, 사전 약정 없이 AWS Marketplace를 사용하여 MongoDB Atlas 에 등록하여 사용량에 대한 요금을 지불할 수 있습니다.
클러스터 에 로드된 샘플 MongoDB Atlas 데이터 세트. 이 샘플 데이터를 로드하는 방법을 학습 보려면 MongoDB 시작하기 가이드 참조하세요.
MongoDB Atlas cluster 는 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 }
추가 리소스
MongoDB 와 함께 AWS Lambda 사용할 때의 권장사항 에 대해 자세히 학습 Atlas 설명서에서 AWS Lambda 로 연결 관리 가이드 참조하세요.