아마추어 팀블로그

AWS Lambda 서비스 등록하는 방법 본문

IT/IT 개발

AWS Lambda 서비스 등록하는 방법

탓치 2017. 6. 15. 22:55

간만에 돌아온 탓치입니다. 요새 이것저것 하는 일이 많아서 바쁘네요. 취미 삼아 앱도 개발하고 있고, 새로 시작한 운동도 꾸준히 나가고 있고, 회사 일도 바쁘고... 꾸준히 블로그에 글을 작성하지는 않지만 그래도 찾아주시는 분들이 많아서 항상 감사하는 마음을 갖고 있습니다.

오늘은 제가 앱 개발을 하면서 맞닥뜨린 문제를 해결해준 고마운 친구, AWS의 Lambda 서비스를 소개하고자 합니다. AWS 람다 서비스는 앱에서 처리하기 복잡하거나, 시간이 오래 걸리거나, 무거운 작업을 대신 수행하기 위한 서버를 찾다가 발견한 서비스입니다. Lambda 함수는 서버 구축에 드는 비용을 아예 생략할 수 있습니다.

극단적으로 API 서버를 집에서 직접 구동한다고 가정해봅시다.

그러면 일단 가볍게 1U 짜리 깡통 서버를 하나 구입해야하고,
CentOS 정도의 리눅스 운영체제를 설치해야할 겁니다.
방화벽 설정을 해서 해커의 위협을 미리 차단하고,
24시간 구동을 시켜야 하니 전기세 걱정도 해야겠죠.
서버 동작을 위한 모듈을 올려야할 거고,
그 프로세스가 항상 구동하는지 감시도 해야하고,
로그도 쌓고,
주기적으로 점검도 해야할 겁니다.

이렇게 서버 하나 관리하는데 이것저것 신경써야하는 것이 많죠. 사실 서버 운영보다 더 큰 문제는 앱 사용자가 폭주할 때입니다. 보통 접속자가 폭주하면 서버가 다운된다고 하죠? 애초에 예상했던 접속이나 호출보다 과다한 유입이 들어오는 경우, 저같은 허접한 개인이 구축한 서버는 급방 뻗게 될 겁니다. 아예 Scalability, 확장성이라는 말을 따로 만들어서 강조하는 이유가 있는 셈이죠.

아무튼 Lambda 함수는 서버 운영에 대한 고려 없이, 그저 내가 서버에서 수행하고자 하는 로직에만 집중할 수 있는 장점이 있습니다. 다른 글에서 다루게 되겠지만, API Gateway를 함께 활용하면 URL을 하나 할당하여, 외부에서 Lambda 함수를 호출하는 트리거로 사용할 수 있습니다. 즉, 앱에서는 그저 원하는 서버 동작에 대응하는 URL과 파라미터를 HTTP 호출에 실어서 보내기만 하면 되는거죠.

Lambda에 대한 설명은 사실 AWS(링크)에 직접 접속해서 설명을 읽는 것이 빠를겁니다. 참고하세요.

이제 간단하게 Lambda 함수 사용법을 기술하도록 하겠습니다. 전형적인 공대생 답게, 매뉴얼처럼 작성할 예정이니 차근차근 따라오세요.

우선 AWS(링크)에 접속합니다. 계정이 없으신 분은 만들어야겠죠?

그런 다음 AWS Management Console에 접속합니다. My Page 정도로 생각하시면 될 거 같네요.


AWS Management Console

위 사진에서 볼 수 있듯이 AWS에는 정말 많은 서비스가 있습니다. 저는 아는 게 두세 개 밖에 안돼요. 아무튼 저 검색 란에 Lambda를 입력하고 선택해줍니다. 저같은 경우는 최근에 방문한 서비스(Recently visited services에 Lambda가 있으니 그냥 클릭하면 되네요.


파란색의 Create a Lambda function 버튼을 클릭합니다.


위 그림에서 볼 수 있듯이, 이미 여러 종류의 blueprint를 제공합니다. 아마 사용자들이 미리 사용할 것으로 예상되는 함수들의 틀을 제공하는 거 같아요. 전 아직 Lambda 함수를 다뤄본지 오래되지 않았으므로, Blank Function을 선택해서 제가 온전히 함수를 작성해보도록 하겠습니다.


Lambda에 대한 트리거를 설정하는 페이지입니다. Lambda를 상징하는 아이콘 앞에 빈 회색 테두리가 보일 겁니다. 저걸 클릭하면 API Gateway, AWS IoT, CloudFront, CloudWatch Logs 등의 AWS 서비스들이 나열됩니다. 이들 서비스들을 사용해서 Lambda 함수를 호출할 수 있다는 뜻입니다. 이 글에서는 오로지 Lambda 함수 등록만을 다루고 있으므로 일단 Next를 클릭합니다.


이제 Lambda 함수를 실제로 등록하는 단계 입니다. Name에 함수를 식별할 수 있는 이름을 입력합니다. Runtime에는 이 함수가 어떤 언어로 실행되는 함수인지를 선택합니다. 저는 Node.js 6.10을 입력하도록 하겠습니다. 그리고 하단에는 Lambda 함수 코드를 넣을 수 있는 란이 있습니다. Code entry type이 Edit code inline인 경우에는 하단의 회색 텍스트 박스에 직접 함수를 입력해 넣을 수 있습니다. 하지만 보통은 이런식으로 코드를 작성하지 않겠죠. 이미 로컬 PC에 제작 중인 함수가 있을 겁니다. 저도 이미 작성한 함수가 있으니 이 코드를 압축해서 업로드 하도록 하겠습니다.


위 그림처럼 Code entry type을 Upload a .ZIP file로 변경하였습니다. 그럼 원래 보이던  하단 텍스트 박스가 사라지고 Function package라는 항목이 생겼습니다. Upload 버튼을 클릭해서 로컬 PC에서 작성한 압축파일을 업로드 합니다.


다음은 Lambda 함수의 role을 정해야 하는 단계입니다. 추후에 CloudWatch 서비스에 Lambda 함수에 대한 로그를 쌓아야 하기 때문에 이 함수에는 Log 권한이 들어가야 합니다. Role 항목에서 Create a custom role을 선택하면 새로운 창이 뜹니다. IAM Role에서 Create a new IAM Role을 선택하고, Role Name에는 적당한 role 이름을 기입합니다. 그런 다음 하단의 파란색 Allow 버튼을 클릭하면 새로운 role이 생성됩니다. 이제 Lambda 함수 제작을 위한 설정이 완료되었으니 하단의 Next 버튼을 클릭합니다.



지금까지 작성한 내용에 대한 리뷰를 진행합니다. 내용이 얼추 맞는 것 같으니 Create function을 눌러서 다음으로 넘어갑니다.


자, 이제 Lambda 함수 제작이 모두 완료되었습니다. 그럼 이제 테스트를 해야겠죠. 상단의 Test 버튼을 눌러줍니다.


이제 Test를 위한 Event template을 작성할 차례입니다. Lambda 함수의 포맷인 exports.handler = (event, context, callback)의 event에 전달되는 json 포맷의 데이터를 기입하는 항목이죠. 즉, Lambda 함수의 Input이라고 생각하면 되겠습니다. 원하는 데이터를 입력한 뒤 Save and test 버튼을 누릅니다. 그러면 Lambda 함수가 즉각적으로 실행됩니다.


테스트 결과가 바로 반환됩니다. Lambda 함수가 실행된 시간이 2.03 ms였고, 최대 메모리 사용량이 18 MB였음을 알 수 있죠. 최초 Lambda 함수를 등록할 때 Timeout을 3초로 설정하였으니, 만일 이 함수의 실행에 3초 이상 걸렸다면 Timeout이 나서 Fail 났을겁니다.

Log output에서는 이 함수를 실행한 내역이 로그로 제공됩니다. 만일 console.log 등의 함수로 함수 내에서 출력한 내용이 있다면 이 페이지에 기록됩니다. 참 쉽죠?


지금까지 Lambda 함수 등록에 대해 간단히 살펴보았습니다. 혹시 질문이 있으시면 댓글로 남겨주세요. 아는 내용이라면 답변 드리도록 하겠습니다. 그럼 뿅.




Comments