22_Step : api gateway & RDS
api gateway
lambda함수는 url이 없기 때문에 lambda함수만으로는 api를 만들 수 없다.
api gateway는 http url, method(post,get 등)을 만들어 api의 엔드포인트 역할을 한다.
lambda의 트리거 추가를 통해 api gateway와 연동하면 외부에서 접근가능한 api를 만들 수 있다.
엔드포인트를 따로 관리하는 이유 : 요즘은 SSR을 쓰지 않고 api를 많이 쓰기 때문에 DNS만으로는 힘들어서 따로 관리할 필요가 있다.
RDS
RDS는 aws에서 제공하는 관리되는 관계형 데이터베이스 서비스이다.
용량,백업,업데이트 등의 관리를 aws에서 해주기 때문에 매우 편리하다는게 장점이다.
단점은 아무래도 비용이다.
서비스를 사용하는 만큼 비용이 증가하기 때문에 예산을 관리하며 써야한다.
lambda와 RDS 연결 후 zip파일로 묶어서 업로드
만들어진 rds의 엔드포인트를 가지고 lambda와 연결해야한다.
database의 +버튼을 눌러 mysql을 클릭해준다.(없을시 설치)
host에 rds의 엔드포인트를 입력하면 name도 같이 바뀐다.(네임앞에는 @이 들어간다)
user와 password를 맞게 입력하고 맨 밑의 test connection을 해봐서 연결이 잘 됐나 확인 후 ok를 누른다.
이제 스키마를 만들어줘야 한다.
스키마란, 간단히 말하면 db에 어떤 구조로 데이터가 저장되는지의 정보를 보여주는 것이라고 생각하면 된다.
mysql을 우클릭해서 new의 schema를 만들어서 아래의 코드로 대체해주는데 이를 하는 이유는 한글로 인해 오류가 발생하지 않게 하기 위함이다.
create schema sparta DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
그 후에 schema를 우클릭해서 new의 table을 만들어 table이름은 board로 바꾸고(참고할 lambda_function.py에서 board로 쓰고있어서), 컬럼을 추가해서 아래와 같이 만들어준다.
idx는 auto inc을 체크해주는데 이는 순서를 매겨주는 역할을 한다.
이대로 만들고 나면 터미널창을 열어서 아래의 코드를 입력해준다.
pip install --target ./python pymysql
파이썬의 mysql 라이브러리를 추가하는 명령어이다.
이때 경로를 반드시 본인이 코딩하는 폴더안에서 진행하는 것인지 확인한다.
이렇게 폴더들이 생겼을 것이다.
위와 같이 lambda_function.py를 만들어주고 아래의 코드를 넣어준다.
import json
import boto3
import pymysql
def db_ops():
try:
connection = pymysql.connect(
host='database-1.cluster-ro-cgbie0k3ndqh.ap-northeast-2.rds.amazonaws.com',
user='admin',
password='12345678',
db='sparta',
charset='utf8mb4',
cursorclass=pymysql.cursors.DictCursor
)
except pymysql.MySQLError as e:
print("connection error!!")
return e
print("connection ok!!")
return connection
def lambda_handler(event, context):
body = json.loads(event['body'])
conn = db_ops()
cursor = conn.cursor()
cursor.execute("insert into board(title, content) value('" + body['title'] + "', '" + body['content'] + "')")
conn.commit()
return {
"statusCode": 200,
"body": json.dumps({
"message": "success",
}),
}
그러고 나서 터미널창에 zip -r python.zip ./*을 입력하는데 이때 경로는 라이브러리와 lambda_function.py가 있는 위치에서 진행한다.
zip파일이 만들어졌으면 aws의 lambda에 가서 코드의 가장 오른쪽에 보면 업로드가 있다.
이를 누르고 경로찾가서 zip파일을 업로드하면 된다.