AWS Lambda 기초 공부

이재호·2024년 3월 1일

1. AWS Lambda란,


https://youtube.com/watch?v=7uEDep9DFJs&list=PLRx0vPvlEmdD_AdG6fEwcfVrq5Qb3q_Ja&index=1 의 강의 내용 정리.

별도의 서버 없이 AWS Lambda 서비스 사이트에 함수를 입력해 주면 해당 함수를 자동으로 실행시켜줄 수 있음. 즉, 함수 작성 -> 자동 동작.

별도의 이벤트 발생 시 동작되도록 설정 가능.

데이터 처리 결과 혹은 로그를 DB에 적재 가능. 즉, 데이터 처리 내역 관리 가능.

이벤트의 종류는 다양함.

  • 특정 로그 발생 시.
  • 클라이언트의 요청이 발생했을 시. (웹 서버로서 구현될 경우.)

웹서버로서 구현 시, 클라이언트 -> API 게이트웨이 (클라이언트로부터 요청을 받음) -> AWS 람다 (요청에 대한 함수 실행) <-> DB.

1-1. 실습

  1. AWS Lambda 페이지에서 함수 생성.
  2. 새로 작성 -> 함수 이름 및 런타임 설정(보통 파이썬이나 node.js를 주로 사용함.)
    -> 기본 실행 역할에서 "기본 Lambda 권한을 갖는 새 역할 생성" 선택. -> 함수 생성.
  3. 위 화면에서 왼쪽 트리거 추가 선택. (해당 API 호출 시 람다가 실행됨.)
  4. 소스는 API Gateway -> create new API -> (HTTP or REST) API 선택 -> Security 설정 -> 추가.
  5. 코드 소스에서 코드 내용을 마음대로 바꿔보고 Deploy 클릭.
  6. 8에서 API 엔드포인트 주소로 결과 확인.

2. Lambda에 파이썬 라이브러리 추가하기.


https://www.youtube.com/watch?v=GNoZLjnwSP4&list=PLRx0vPvlEmdD_AdG6fEwcfVrq5Qb3q_Ja&index=2

별도의 디렉토리에 원하는 라이브러리를 설치.
1. cd dir_name : 원하는 디렉토리로 이동.
2. pip3 install {lib_name} -t . : 현재 디렉토리에 원하는 라이브러리 설치.
3. zip -r {lib_name}.zip . : 현재에 존재하는 모든 폴더를 lib_name.zip의 이름으로 압축.
4. 해당 압축 파일을 AWS 람다로 업로드.

3. Lambda에 레이어 추가하기.


https://www.youtube.com/watch?v=XsTBlXw98Bo&list=PLRx0vPvlEmdD_AdG6fEwcfVrq5Qb3q_Ja&index=3

함수마다 별도의 라이브러리를 업로드 하지 않고, 특정 레이어 밑으로 지정하여 함수마다 공통의 라이브러리를 사용할 수 있도록 할 수 있음.
1. "python"이라는 폴더를 생성하여, 해당 폴더에 모든 라이브러리 폴더 넣기.
2. "Library"라는 폴더 생성 후 "python" 폴더를 해당 폴더에 넣기.
3. "Library" 폴더를 압축하기.
4. layer 생성 -> zip 파일 업로드.
5. 람다 함수에서 위에서 생성한 레이어 추가.

4. REST API 실습.


https://www.youtube.com/watch?v=x0iyaENTxU0&list=PLRx0vPvlEmdD_AdG6fEwcfVrq5Qb3q_Ja&index=4

  1. node.js 코드 예시
exports.handler = async (event, context, callback) => {
	const operation = event.httpMethod;
    switch (operation) {
    	case 'GET':
        	let data = {
            	'id' : 1,
                'name' : 'Lee'
            }
            callback(null, {
            	'statusCode' : 200,
                'headers' : {},
                'body' : JSON.stringify(data)
            });
            break;
        case 'POST':
        	callback(null, {
            	'statusCode' : 200
            });
            break;
        default:
        	callback(new Error('Operation Error "${operation}"'))
    }
};

2-1. API Gateway 서비스 페이지에서 API 생성. (REST, new API, 이름 설정)

2-1-1. 해당 API에서 리소스(ex, search) 생성.
2-1-2. 해당 리소스에 메소드(GET, POST, ...) 추가.
2-1-3. 해당 메소드 설정에서 실행될 람다 함수 지정 및 "Use Lambda Proxy integration" 체크.
2-1-4. Actions에서 Deploy API를 선택하여 해당 API를 배포.
2-2. 혹은 그냥 람다 함수에서 API Gateway 트리거 추가.

5. 실제 웹사이트 클라이언트의 API 호출


https://www.youtube.com/watch?v=wSRP4e0y5tQ&list=PLRx0vPvlEmdD_AdG6fEwcfVrq5Qb3q_Ja&index=5

html 코드 예시.

<!doctype html>
<html>
	<head>
    	<meta charset="UTF-8">
    </head>
    <body>
    	<input type="button" value="GET" onClick="get()"/>
        <script>
        	const URL = "위에서 작성한 API 주소";
            function get() {
            	fetch(URL, {
                	headers: {
                    	'Accept': 'application/json'
                    }
                }).then(res => res.json())
                  .then(data => console.log(data))
                  .catch(err => console.error(err))
            }
        </script>
    </body>
</html>
  • API의 Actions에서 해당 리소스의 Enable CORS를 선택하여 보안을 약화시키기.
  • API Deploy.
  • lambda 함수의 headers에 경로에 대한 접근 허용 입력.
...
'headers': {'Access-Control-Allow-Origin': '*'},
...
profile
천천히, 그리고 꾸준히.

0개의 댓글