DocumentDB #2 DocumentDB – Lambda 연결하기 (use Nodejs, Mongoose)

Explanation

오늘은 저번 글에 이어서, AWS DocumentDB를 Lambda에 연결해서 사용하는 방법에 대해 적어보려합니다.(NodeJS + Mongoose)
저번 글에서 설명된 부분은 그냥 넘어갈꺼라 저번글을 간단하게 보신 후에 이 글을 보는 것도 좋을 것 같습니다.
https://falsy.me/documentdb-1-documentdb-ec2에-연결하기/

0. 시작하기 전에

저번 글에서 DocumentDB 를 만들고 DocumentDB에 적용할 보안그룹까지는 만들었기 때문에 이번 글에서는 아래의 순서로 진행이 될 예정입니다.

1. Lambda 보안그룹 만들기
2. DocumentDB 보안그룹 수정하기
3. Lambda 만들기

1. Lambda 보안그룹 만들기

AWS 에서 EC2 서비스로 이동해서 보안그룹 -> 보안그룹 생성을 누릅니다.
그리고 이름과 설명을 입력하고, 이번 포스팅에서는 바로 Lambda에서 테스트하는 것으로 마무리할 거라 인바운드를 설정하지 않았습니다.

만약에 실제로 사용한다면 로드밸런서 보안그룹을 인바운드로 설정하거나 하겠지요??

저는 ‘docdb-lambda-sc-group’ 라는 이름으로 앞으로 만들 Lambda 함수의 보안그룹을 만들었어요.

2. DocumentDB 보안그룹 수정하기

그리고 저번글에서 만들었던 ‘document-db-sc-group’ 보안그룹을 선택한 후 ‘인바운드 규칙 편집’을 눌러서 아래와 같이 27017번 포트로 ‘docdb-lambda-sc-group’ 보안그룹을 추가해줍니다.

그러면 아래와 같이 인바운드가 2개가 등록된답니다.

3. Lambda 만들기

이제 본격적으로 Lambda를 만들어 볼가요?

Lambda 서비스로 이동해서 함수 생성을 선택합니다.

이름을 정해주고 런타임은 Nodejs를 사용할게요.

그리고 역할은, 현재 저는 사용하고 있는 역할이 없어서 기본값으로, 해당 역할이 새로 만들어지면서 적용이 될 거에요.

다음 ‘고급 설정’에서 VPC와 서브넷을 설정 해주고, 아까 만들었던 보안그룹까지 설정해주고 ‘함수 생성’ 버튼을 눌러 함수를 만들어 줍니다.

저는 대부분 코드를 에디터 툴을 써서 작성하고 zip 파일로 압축해서 Lambda에 업로드하는 편인데요.
우선 만들어진 전체 코드는 깃허브의 리포지토리를 통해 확인하실 수 있습니다.
https://github.com/falsy/blog-post-example/tree/master/documentDB-lambda

우선 코드의 디렉토리 구조를 보면

저번 글과 마찬가지로 DocumentDB에 접근할때 SSL 인증서가 필요해서 ca 라는 디렉토리에 .pem 파일을 올려놓았습니다.
저 .pem 파일은 위 깃허브에서 받으셔도 되고, 아래의 AWS의 S3에서 다운로드 받으실 수 있습니다.
https://s3.amazonaws.com/rds-downloads/rds-combined-ca-bundle.pem

본격적으로 코드를 살펴보면,

적으려고 보니 딱히 적을게 없네요… mongoose에 connect하고 ssl, sslValidate 값을 true로 주고 sslCA에 아까 다운로드한 .pem 파일을 넣어주면 된답니다.

그리고 process.env.MONGO_URI는 환경변수로 등록해놨는데요.
이건, ‘Lambda’ – ‘구성’ – ‘환경 변수’ 탭에 가셔서 MONGO_URI 라는 키로 등록해주면 된답니다.

그리고 그 값으로는 DocumentDB 페이지의 ‘연결성 및 보안’ 탭에 있는 ‘애플리케이션을 사용하여 이 클러스터에 연결’의 내용중에 포트번호(:27017)까지의 내용을 등록해주면 된답니다.

만약 데이터베이스까지 만드셨다면 포트번호 뒤에 ‘/databaseName’ 이렇게 ‘/’후에 데이터베이스 이름을 추가해줍니다.

위와 같이 코드를 다 작성해서 Lambda로 업로드 하셨다면,
이제 끝으로 ‘테스트’를 눌러보면!

짠!

이렇게 코드에 작성했던 ‘Successfully connected to mongodb’ 연결 성공 로그를 확인하실 수 있습니다.