본문으로 바로가기

AWS - 서버리스 아키텍처(Lambda 활용)

category AWS 2021. 6. 11. 17:23
반응형

1) 서버리스 아키텍처란?

 

서버리스(Serverless)를 직역하자면, “서버가 없다” 라는 의미가 있습니다. 하지만, 사실상 서버가 없는건 아닙니다. 특정 작업을 수행하기 위해서 컴퓨터를 혹은 가상머신에 서버를 설정하고, 이를 통하여 처리 하는 것이 아님을 의미합니다. 대신 FaaS (Function as a Service) 에 의존하여 작업을 처리하게 됩니다. FaaS 를 제공하는 서비스 중에선,

AWS Lambda, Azure Functions, Google Cloud Functions 등이 있습니다.

 

2)AWS Lambda

 

AWS Lambda는 서버를 프로비저닝하거나 관리하지 않고도 코드를 실행할 수 있게 해주는 컴퓨팅 서비스입니다.

AWS Lambda는 필요 시에만 코드를 실행하며, 하루에 몇 개의 요청에서 초당 수천 개의 요청까지 자동으로 확장이 가능합니다. 사용한 컴퓨팅 시간에 대해서만 요금을 지불하면 되고 코드가 실행되지 않을 때는 요금이 부과되지 않습니다. AWS Lambda를 사용하면 사실상 모든 유형의 애플리케이션 또는 백엔드 서비스를 실행할 수 있으며 이를 관리할 필요는 전혀 없습니다. AWS Lambda는 고가용성 컴퓨팅 인프라에서 코드를 실행하고 서버와 운영 체제 유지 관리,

용량 프로비저닝 및 자동 조정, 코드 및 보안 패치 배포, 코드 모니터링 및 로깅 등 모든 컴퓨팅 리소스 관리를 수행합니다. AWS Lambda가 지원하는 언어 중 하나로 코드를 공급하기만 하면 됩니다(현재 Node.js, Java, C#, Go 및 Python).

 

실습 : AWS Lambda를 활용해 RDS와 연결 . (python)

준비 : RDS (mysql 8.0.20 Version) , client(Mysql workbench)

 

1. RDS에 접속할 DB user, password, db 생성

* 접속을 admin 으로 해서해도 되지만 따로 user을 생성하고, 거기에 권한을 준다는 가정하에 진행 하겠다.

CREATE USER '[아이디]'@'%' IDENTIFIED BY '[PASSWORD]';
GRANT ALL PRIVILEGES ON *.* TO '[아이디]'@'%' identified by '[PASSWORD]'; //권한 주려고 하지만 에러 발생.
8 버전 에서는 GRANT OPTION ON *.* TO 'khg'@'%';  이런식으로 줘야 하고, RDS 에서는 Super 권한이 막혀 있으므로. 
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, PROCESS, REFERENCES, INDEX, ALTER, SHOW DATABASES, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER ON *.* TO 'khg'@'%' WITH GRANT OPTION; 이런식으로 모든 권한을 줘야 한다.

 

2. Pymysql 라이브러리 다운로드 및 업로드

pymysql 이란 라이브러리를 pip install pymysql -h d:\/myfunc 라는 디렉토리에 명령어로 다운 받았다. (mysql과 연결해주는 프로그램, 자바로 치면 mysql-connector)

라이브러리를 압축해 zip 파일로 Lambda에 업로드.

 

3. Python 코드 작성.

import pymysql

conn = pymysql.connect(
    host='[RDS endpoint]',
    user='khg',
    password='[password]',
    db='[db name]',
    charset='utf8'
)

curs = conn.cursor()
sql = "SELECT * FROM student"

curs.execute(sql)

rows = curs.fetchall()
print(rows)

4. 실행 결과

출력 확인. 

5. 유의 사항

핸들러의 값 : 실행파일.실행함수 값이 일치해야 한다.

 

 

 

 

반응형