Lambda와 RDS(Relational Database Service)를 연동

Lambda와 RDS(Relational Database Service)연동 방법에 대해서 정리해봤습니다.
2021.07.15

안녕하세요 클래스메소드 김재욱(Kim Jaewook)이라고 합니다. Lambda와 RDS는 어떻게 연동하는걸까? 라는 생각이 들어, 이번에는「Lambda와 RDS(Relational Database Service)를 연동」이라는 주제로 Lambda와 RDS(Relational Database Service)를 연동하는 방법에 대해서 작성해봤습니다.

Lambda와 RDS 연동

Lambda 생성

먼저 lambda 함수를 생성합니다. 함수 이릉믄 임의로 LambdaRDSTest로 설정했습니다.

그리고 작성할 언어는 파이썬으로 선택했습니다.

그리고 역할을 만들어야하는데 역할 이름은 LambdaRDSRole로 적고 함수를 생성합니다.

권한 생성

이어서 권한탭에 역할 이름을 클릭해서 역할을 수정해줍니다.

정책 연결을 클릭합니다.

그리고 AWSLambdaVPC를 검색해서 선택합니다. 다음으로는 RDS를 설정해줍시다. RDS의 경우 프리티어로 적당히 하나를 만듭니다. 저 같은 경우에는 mysql을 선택했고, 생성시에 example라는 데이터베이스를 하나 생성했습니다.

RDS 설정

그럼 다음 쿼리를 통해서 Transactions이라는 테이블을 하나 만들고 데이터값을 넣어줍니다. 이렇게 테이블이 완성이 됐다면 이제 python으로 DB에 접근해봅시다.

* 여기서 RDS로 접근하기 위해서는 포트 번호를 개방 시켜줘야합니다. 이 부분을 한번 짚고 넘어가겠습니다.

가장 간단한 방법은 RDS에서 퍼블릭 액세스 허용을 하고 어디서나 접근가능하게 포트를 열어주면 됩니다. 두 번째는 VPC내에서만 가능 하도록 하는 방법입니다. 먼저 퍼블릭 액세스 허용을 아니오로 바꿔줍니다.

그리고 labmda 가장 아래에 보면 VPC 구성이 있습니다. 편집을 눌러줍니다.

그럼 VPC을 선택할 수 있는데 접근 하고자 하는 RDS의 VPC를 선택해줍니다.

RDS VPC 이름을 잘 모르겠다면 RDS로 들어간다음 아래에 내려가보면 VPC라고 나와있습니다.

이어서 서브넷을 선택해주고, 보안그룹을 선택해줍니다. 보안그룹은 RDS에서 VPC 보안그룹을 default로 선택했기 때문에 동일한 녀석을 선택해줍니다. 이제 RDS로 접근하기 위한 과정이 끝났습니다.

이제부터는 python에서의 코드를 작성해봅시다.

Lambda 설정

「pip install pymysql 경로」그 전에 python과 mysql을 연동하기 위해서 pymysql을 다운로드합니다.

저는 pythonsql이라는 폴더에 다운로드를 했고, 다운로드가 끝나면 다음 2개의 폴더가 생성됩니다. 그리고 dbinfo.py 라는 파일을 하나 만들어줍니다. 메모장으로 하나 만들고 확장자 명을 py로 바꿔주면 됩니다.

그리고 다음과 같이 입력하고 저장합니다.

이어서 lambda_function.py 라는 파일을 하나 만듭니다.

먼저 import를 통해서 pymysql을 불러오고, dbinfo 파일을 불러옵니다.그런 다음 connection에 db연결을 시도합니다.

이어서 본문에서는 execute를 통해서 쿼리문을 날리고 fetchall()을 통해서 결과값을 리턴받아 rows에 저장합니다. 마지막으로 for 반복문을 돌면서 rows의 데이터를 하나하나씩 출력합니다. 즉 Transactions 테이블에 담긴 데이터 값을 하나하나씩 출력하는 lambda 입니다.

이제 작업이 끝났으면 저장하고, 2개의 python 폴더와 파일을 드래그 해서 압축(ZIP)폴더로 해서 압축합니다.

다시 lambda로 돌아와서 zip 파일 업로드를 눌러 파일을 업로드합니다.

파일을 업로드하면 다음 그림과 같이 나오게 됩니다.

이제 테스트를 해봅시다!

Lambda RDS 연동 테스트

특정 키값을 리턴받는 코드가 아니기 때문에 안에 내용들은 다 지워줍니다.

저장을 누르고 테스트 버튼을 눌러주면 다음과 같은 결과 값이 나오게됩니다.

INSERT INTO를 통해서 만들어둔 값이 그대로 출력 된 것을 볼 수 있습니다.

참고