20191210 TIL - AWS Lambda (4) - 람다에서 RDS연동하기

박경연 (돌진어흥이)·2019년 12월 15일
0

aws Lambda

목록 보기
4/4

이제는 RDS를 사용할때

대충이지만 API도 만들어서 연결해보았고, 패키지도 올려봤다. 이제 데이터베이스만 조작할 수 있으면, 로그인 로그아웃 기능을 구현할 수 있다. 그러니 오늘은 RDS를 연동해본다.

RDS 만들기

하핳 이것부터 하기엔 분량이 넘나 많고 하나씩 스샷을 떠서 올리기가 귀찮다.
당신이 위코더라면 이것을 보고 따라하시오...

https://stackoverflow.com/c/wecode/questions/172

mysql-connector-python 설치

이미 배운거다.

pip install mysql-connector-python -t .

빠르게 설치해준다.

document를 보고 raw-sql을 사용해 INSERT하는 람다함수짜기

대략적인 플로우는 이러하다
1. post 메서드로 api에 username,password를 인자로넘김
2. RDS의 데이터베이스를 연결
3. CREATE 문으로 받은 id, password를 저장
4. 연결 끊음
5. 200 ok 리턴

그럼 이제 실제코딩....

  1. 우선 임포트부터
import mysql.connector
  1. 파라미터를 받는다
import mysql.connector

def lambda_handler(event, context) : 
    data         = json.loads(event["body"])
    student_name = body["username"]
    student_pw   = body["password"]
  1. 커넥터를 이용해 내 DB에 접근한다.
    (원래라면 저런 민감한 정보들은 따로 관리해 주어야 한다. 이 방법에 대해서는 추후에 포스팅 예정)
    connection = mysql.connector.connect(user = 유저이름,
                                         password = 비밀번호,
                                         host = 호스트,
                                         database = 데이터베이스명)
    ```


4. 커서를 지정해주고, 쿼리문을 실행한다.
(커넥터를 이용하여 파이썬 코드로 테이블을 만드는 방법도 있지만, 필자는 따로 그렇게 진행하지는 않고, 그냥 id(pk), name, password를 저장하기위한 단순한 users 테이블을 미리 만들어놓았다.)

```python
    cursor = connection.cursor()
    cursor.execute(f"""INSERT INTO users (name, password) VALUES ({student_name}, {student_pw})""")
    connection.commit()
    
    ```

5. 커서와 커넥션을 닫아준다.

```python
    cursor.close()
    connection.close()
    ```

6. 200 ok 리턴

```python
    return {
        'statusCode' : 200,
        'body'       : json.dumps({
            'row inserted'
        })
    ```

7. API Gateway에서 포스트 메소드로 엔드포인트를 만들어준 후 Lambda함수와 연동해준다.

8. httpie, post 등으로 테스트해서 200ok메세지를 확인한 후 RDS에 정상적으로 입력되었는지 확인하면 끝


### 마치며

모든 코드는 다음 공식 문서를 활용해 짰다.
https://dev.mysql.com/doc/connector-python/en/
이번에 포스팅한 코드는 단순히 RDS를 연동하여 데이터를 집어넣는데에 중점을 두었기 때문에, 에러핸들링이나 암호화, DB개념에 대해서는 일체 신경쓰지 않았다.
다만 mysql커넥터의 작동 원리나 커서, 커넥션 개념같은 부분은 좀더 공부해야할 필요가 있어보인다.



profile
Back-end Developer, pursuing to be a steadily improving person.

1개의 댓글

comment-user-thumbnail
2023년 8월 9일

좋은 글입니다. 사용하신 mysql-connector-python 모듈은 GPL 라이센스인데, 서버쪽 람다에서 이걸 쓰면 오픈소스 이슈는 없을까요?

답글 달기