[AWS] Lambda + API GateWay를 이용해 간단한 RESTful API 만들기 #1


안녕하세요. '남산 아래 개발자들' 블로그에서 막내를 담당하고 있는 남산돈가스입니다.

이번 블로그에선 AWS에서 제공하고 있는 서비스인 API Gateway와 Lambda를 이용해 간단한 RESTful API를 만들어보는 시간을 가질 예정입니다.
내용의 이해를 돕기 위해서 #1, #2를 각각 나누어 Lambda와 API Gateway를 나누어 게시하도록 하겠습니다.
그렇다면 우선 Lambda는 무엇인가 싶으실텐데요.

Lambda란?
AWS Lambda를 사용하면 서버를 프로비저닝하거나 관리할 필요 없이 코드를 실행할 수 있습니다.
사용한 컴퓨팅 시간만큼만 비용을 지불하고, 코드가 실행되지 않을 때는 요금이 부과되지 않습니다.
Lambda에서는 사실상 모든 유형의 애플리케이션이나 백엔드 서비스에 대한 코드를 별도의 관리 없이 실행할 수 있습니다.
코드를 업로드하기만 하면, Lambda에서 높은 가용성으로 코드를 실행 및 확장하는 데 필요한 모든 것을 처리합니다.
다른 AWS 서비스에서 코드를 자동으로 트리거하도록 설정하거나 웹 또는 모바일 앱에서 직접 코드를 호출할 수 있습니다.
[출처] https://aws.amazon.com/ko/lambda/
이 정도 설명으론 Lambda를 이해하기엔 조금 어려울 수 있을텐데요.
쉽게 얘기하자면 기존의 AWS 사용자는 EC2인스턴스를 통해서 그들의 컴퓨팅 환경을 구성하고 그 안에서 각자의 런타임환경을 통해 코드를 실행하여 백엔드서비스를 제공해왔습니다. 하지만 Lambda를 이용하면 EC2환경이 아닌 단순히 소스코드를 업로드함으로써 Lambda에서 제공하는 Runtime환경 내에서 코드들을 실행할 수 있다는 얘기입니다.

그럼, 이제부터 실제 Lambda를 이용해 간단한 소스코드를 등록하고 실행해보겠습니다.

1. AWS Console에 접속해 Lambda 검색하여 서비스 이동

2. 처음 시작한다면 Get Started Now 버튼 클릭하여 이동


 3. Step1.으로 blueprints를 설정하는 화면이 나오는데요. Lambda에서는 BluePrints 검색을 통해 사용자가 원하는 서비스들을 기능별로 템플릿형태 처럼 제공하고있습니다.
저희는 단순한 기능을 실행할 예정이므로 Author from scratch 를 클릭합니다.


4. Step2. 는 트리거를 설정하는 화면입니다. Lambda는 트리거를 받아서 함수를 호출해주는 서비스를 제공하고 있습니다. 다음 내용에 설명드리겠지만 저 빈 공간은 API Gateway서비스로 채워질 예정입니다. 일단은 비워 둔 상태로 Next를 클릭합니다.


5. Step 3. 로 함수를 정의하는 부분입니다. 메인이 될 수 있는 부분인데요. 일단 저는 기본 정보에 myTest라는 함수명을 등록하고 Runtime은 Nodejs 4.3으로 설정했습니다.
 Lambda는 현재 C#, JAVA, Nodejs, Python Rumtime환경을 제공하고있습니다.


6. 기본 정보를 입력하고 하단으로 내려가면 실제 코드를 등록하는 부분이 나옵니다.
트리거를 전달받은 Lambda는 아래에 입력 된 코드를 실행하게 됩니다.
아래와 같이 Edit code inline을 통해 editor에서 직접 function코드를 등록할 수 있고, 로컬에서 코드들을 zip로 압축하여 업로드하는 방식, 그리고 s3로부터 소스코드를 업로드 하는 방식까지 총 3가지 방법이 있습니다.
여기선 간단한 함수를 실행할 것이므로 직접 코드를 작성하기로 하죠.

여기서 잠깐 멈춰서 위 소스에서 알고가셔야하는 부분이 있는데요.
바로 handler, event, context, callback입니다. Nodejs를 기준으로 설명을 드리겠습니다.

여기서 우리는 handler, event, context에 대해서만 알아두면 됩니다.


handler
handler함수가 Lambda funtion이 시작되는 메인 함수라고 보면 됩니다.
이 함수에 앞으로 설명할 event,context가 넘어오고 이를 우리가 컨트롤 해주어야 합니다.

event
Node.js에서 request의 개념으로 이해하시면 좋습니다.
Lambda가 실행되면서 전달되는 파라미터값들이 event를 통해서 넘겨받게 됩니다.
API Gateway와 연동될경우, GET, POST, PUT, DELETE 의 동작에서 넘겨지는 query, body, params등의 값들을 event에서 가져올 수 있습니다.

context
event가 request개념이었다면 context는 response개념으로 이해하시면 좋습니다.
context에서 결과로 리턴하는 함수는 done(), succeed(), fail()이 있습니다.


출처: http://gun0912.tistory.com/60 [박상권의 삽질블로그]
여기서 우리는 handler, event, context에 대해서만 알아두면 됩니다.


handler
handler함수가 Lambda funtion이 시작되는 메인 함수라고 보면 됩니다.
이 함수에 앞으로 설명할 event,context가 넘어오고 이를 우리가 컨트롤 해주어야 합니다.

event
Node.js에서 request의 개념으로 이해하시면 좋습니다.
Lambda가 실행되면서 전달되는 파라미터값들이 event를 통해서 넘겨받게 됩니다.
API Gateway와 연동될경우, GET, POST, PUT, DELETE 의 동작에서 넘겨지는 query, body, params등의 값들을 event에서 가져올 수 있습니다.

context
event가 request개념이었다면 context는 response개념으로 이해하시면 좋습니다.
context에서 결과로 리턴하는 함수는 done(), succeed(), fail()이 있습니다.


출처: http://gun0912.tistory.com/60 [박상권의 삽질블로그]
여기서 우리는 handler, event, context에 대해서만 알아두면 됩니다.


handler
handler함수가 Lambda funtion이 시작되는 메인 함수라고 보면 됩니다.
이 함수에 앞으로 설명할 event,context가 넘어오고 이를 우리가 컨트롤 해주어야 합니다.

event
Node.js에서 request의 개념으로 이해하시면 좋습니다.
Lambda가 실행되면서 전달되는 파라미터값들이 event를 통해서 넘겨받게 됩니다.
API Gateway와 연동될경우, GET, POST, PUT, DELETE 의 동작에서 넘겨지는 query, body, params등의 값들을 event에서 가져올 수 있습니다.

context
event가 request개념이었다면 context는 response개념으로 이해하시면 좋습니다.
context에서 결과로 리턴하는 함수는 done(), succeed(), fail()이 있습니다.


출처: http://gun0912.tistory.com/60 [박상권의 삽질블로그]
handler
handler함수가 Lambda funtion이 시작되는 메인 함수라고 보면 됩니다.
이 함수에 앞으로 설명할 event,context가 넘어오고 이를 우리가 컨트롤 해주어야 합니다.

event
Node.js에서 request의 개념으로 이해하시면 좋습니다.
Lambda가 실행되면서 전달되는 파라미터값들이 event를 통해서 넘겨받게 됩니다.
API Gateway와 연동될경우, GET, POST, PUT, DELETE 의 동작에서 넘겨지는 query, body, params등의 값들을 event에서 가져올 수 있습니다.

context
event가 request개념이었다면 context는 response개념으로 이해하시면 좋습니다.
context에서 결과로 리턴하는 함수는 done(), succeed(), fail()이 있습니다.


출처: http://gun0912.tistory.com/60 [박상권의 삽질블로그]
handler
handler는 실제 코드에서 Lambda의 메인 함수역할을 합니다.
이 함수의 파라미터로 event, context, callback을 가지고 컨트롤하게 됩니다.

event
event는 쉽게 말해서 Nodejs에서 request 역할을 합니다.
HTTP 메서드로 POST, GET, PUT, DELETE 등에서 넘어오는 query 또는 params, body의 값들을 event가 가지고있다고 생각하시면 됩니다.
위의 소스에서 값이 잘 넘어오는지 확인하기 위한 log 코드를 삽입해놓았으므로 잠시 후에 확인 해보시면 될 것 같습니다.

context
event가 request역할이었다면, context는 response역할을 합니다.

callback
아시다시피 함수에 대한 결과 값을 리턴하는 함수입니다.

간단하게 소스에서 중요한 부분에 대해서 알아보았습니다. 계속 진행하겠습니다.

7. 위에서 소스코드를 작성하였고 하단에 Role설정 부분이 있습니다. 지금 저희가 등록한 Role이 없기 때문에 new role을 체크하고 name 작성하시고 저희는 기본 Lambda함수만 실행하므로 Policy templates에서 Basic Edge Lambda permissions를 클릭합니다.


8. 여기까지 설정을 마쳤다면 , 하단에 고급설정까지 해줄 수 있지만, 저희는 기본 설정으로 두고 Next버튼을 누르고 Create Function을 통해 함수를 생성합니다.


9. 이제 myTest란 Lambda function이 생성 된 것을 확인 하실 수 있습니다.
우측 상단에 Test버튼을 누르게 되면 값을 입력해 테스트할 수 있는 환경을 제공합니다.
클릭해봅시다.


10. test event를 입력하는 editor가 팝업되고 저는 json형태의 값 2개를 입력하고 Save and Test를 클릭했습니다.


11 . 작성한 소스코드에 대한 응답으로 myTest Function!!!이란 message가 리턴되었고
Log output에는 코드에 event값을 출력해주는 log를 설정해두어 test event팝업에서 입력한 event 값들이 출력 된 것을 확인할 수 있습니다.



이번 포스팅에선 위와 같이 Lambda함수를 등록하고 test해보는 시간을 가졌습니다.
다음 포스팅에서는 API Gateway와 Lambda를 연동하여 간단한 RESTful API를 만들어보겠습니다.

댓글

댓글 쓰기

주간 인기글

[정보] 인스타그램은 당신의 소리를 '듣고' 있을 수도 있습니다

카드뉴스 마케팅 팁

[iOS 강좌] 오픈소스로 쉽게 카메라 앱 만들기 - 1부(cocospods)

[정보] Git을 이용한 형상관리 #1 - Git의 세가지 상태, Git 설치

[AWS] Amazon Polly 한국어 서비스 지원