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

튜토리얼: AWS Lambda 에서 MongoDB 에 연결

이 튜토리얼에서는 MongoDB Atlas 에 연결하고 쿼리하는 고 (Go) 운전자 사용하여 서버리스 함수를 생성하는 방법과 서버리스 환경에서 데이터베이스 연결을 효율적으로 관리 방법을 보여줍니다.

FaaS(Function as a Service)라고도 하는 서버리스 기능은 수요에 따라 자동으로 확장하다 . 함수의 가동 시간이나 확장 제어할 수 없으므로 동시 데이터베이스 연결을 신중하게 관리 해야 합니다. 데이터베이스 연결은 제한되어 있으므로 데이터베이스 에 효율적으로 연결해야 합니다.

이 튜토리얼에서는 다음 조치를 수행하는 방법을 보여줍니다.

  • 전제 조건 확인

  • AWS Lambda 용 고 (Go) 프로젝트 생성

  • MongoDB 연결 코드 추가

  • Lambda 함수 빌드 및 패키지

  • 함수 배포 및 테스트

1

시작하기 전에 다음이 준비되어 있는지 확인하세요.

  • 네트워크 액세스 및 사용자 역할이 구성된 MongoDB Atlas cluster . AWS 계정이 있는 경우, 사전 약정 없이 AWS Marketplace를 사용하여 MongoDB Atlas 에 등록하여 사용량에 대한 요금을 지불할 수 있습니다.

  • 클러스터 에 로드된 샘플 MongoDB Atlas 데이터 세트. 이 샘플 데이터를 로드하는 방법을 학습 보려면 MongoDB 시작하기 가이드 참조하세요.

  • AWS( Amazon Web Services ) 계정.

MongoDB Atlas cluster 는 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 }

MongoDB 와 함께 AWS Lambda 사용할 때의 권장사항 에 대해 자세히 학습 Atlas 설명서에서 AWS Lambda 로 연결 관리 가이드 참조하세요.

돌아가기

연결 문제 해결

이 페이지의 내용