[AWS] API Gateway와 Lambda를 통해 Serverless 백엔드 구축


개요

AWS RDS와 같은 DB와 통신하는 Lambda 함수를 만들고 본 람다의 앞단에 API Gateway를 붙여 REST API 호출이 가능한 serverless 백엔드를 구축해보자.


API Gateway 에서 API 구축

  1. AWS Console 접속
  2. API Gateway 서비스 접속 후 API 생성
  3. 작업 버튼에서 리소스 생성으로 경로 구축
    • 이때 중괄호를 통해 path variables 정의 가능
    • ex) /{id}
  4. 작업 버튼에서 메서드 생성으로 메서드 정의
  5. 좌측 트리 구조에서 메서드(GET/POST etc.)를 클릭한 후 통합 요청 클릭
  6. 사용할 람다 함수 선택
  7. 필요 시 URL 경로 파라미터쿼리 문자열 설정
    • 매핑 명명 규칙: method.request.{"path" | "querystring" | "header"}.{param_name}
    • ex) method.request.path.id
  8. 매핑 템플릿 -> 매핑 템플릿 추가 -> Content-Type = application/json -> 템플릿 생성 콤보 박스에서 매서드 요청 패스스루 선택 후 저장


Python에서 AWS RDS 연결

AWS Console 에서 새로운 RDS를 생성한 뒤 아래와 같은 코드를 통해 RDS에 연결해준다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import os
import pymysql

def connect_to_rds():
    host = os.environ['DB_HOST'] # AWS RDS 엔드포인트
    port = int(os.environ['DB_PORT']) # 3306
    user = os.environ['DB_USER'] # 마스터 사용자 이름
    database = os.environ['DB_NAME'] # 스키마 명
    password = os.environ['DB_PASSWORD'] # 마스터 사용자 비밀번호
    
    conn = pymysql.connect(host=host, user=user, passwd=password, db=database, port=port, use_unicode=True, charset='utf8')
    cursor = conn.cursor()
    
    return conn, cursor

이때 pymysql 라이브러리가 필요하므로 람다의 layer에 해당 라이브러리를 등록해준다. 그리고 람다에서 함수 -> 구성 -> 환경 변수에서 키-값 형태로 환경 변수를 등록하면 위 코드와 같이 os.environ['key'] 형태로 호출할 수 있다.


Lambda에서 CRUD 코드 작성

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import json
import pymysql
from db_connection import connect_to_rds

def lambda_handler(event, context):
    
    # API 주소
    resource_path = event['context']['resource-path']
    
    # Path variables
    path = event['params']['path']

    # Query string
    path = event['params']['querystring']

    # . . .
    # 그 외에 event를 직접 print 해보면
    # 모든 요소들의 접근 방법을 확인할 수 있음
    # . . .

    # Connect to DB
    conn, cursor = connect_to_rds()

    # . . .
    # cursor 를 통해 query 수행
    # conn 을 통해 commit
    # . . .

    return {
        status_code: 200,
        data: []
    }


API 테스트 후 배포

  1. API Gateway 서비스 접속
  2. 좌측 트리 구조에서 메서드 클릭 후 테스트 버튼을 통해 API 테스트
  3. 테스트 완료 후 작업 -> API 배포를 통해 API 배포
  4. 스테이지 명 입력 후 완료
    • 일반적으로 API 버전 명을 입력
    • ex) v1

여기까지 완료하면 API의 엔드포인트를 발급받고 REST하게 호출할 수 있다.

0%