Lambda + API Gateway로 웹사이트 띄우기

서버리스 아키텍처에 대해서 들어보신 분들은 람다에 대해서 흥미를 가지실 겁니다. 현재 람다는 크고 작은 기업에서 안정적으로 사용할 만큼 너무나 매력적인 서버리스 도구로 보여지고 있습니다. 그래서 가장 간단한 코드로 만들어 보려 합니다. 최종 목표는 API Gateway의 Endpoint 를 통해 Lambda를 가져와서 웹 브라우저에 출력하는 것입니다. 시작 해 볼까요?

1. 우선 AWS Console에 접속 후 Service – API Gateway를 클릭합니다.

api-1
2. Get Started 를 누르면 아래와 같은 화면이 나옵니다. New API를 선택 후 이름을 지정합니다.

api2
3. Actions에 Create Method를 클릭하신 후 Get Method를 생성해 줍니다.
이 때 람다 지역과 동시에 람다를 선택하라고 하는데요, 람다가 없으니 람다를 만들러 갑니다.
새 창을 띄우고 Lambda를 열어주세요

api-3
4. 람다를 시작하면 아래 화면이 나옵니다. 역시나 파란 버튼 누르고 싶습니다.

api-4
5. Lambda의 BlankFunction을 선택 후 Trigger를 방금 만든 API Gateway로 지정해 줍니다.

api-5
6. Lambda 코드를 작성해야 겠죠?  람다 이름을 정해주고, Node.js 4.3버전을 클릭해 줍니다. 기본 샘플 코드 사용하셔도 좋지만 아래 코드로 진행 해 보겠습니다. (코드는 아래에)

api-6


'use strict';
console.log('Loading event');

exports.handler = function(event, context, callback) {
  console.log('"Hello":"World"');
  callback(null, {"Hello":"World"});  // SUCCESS with message
};

7. 위 코드는 헬로월드를 화면에, 그리고 로그에 기록해 줍니다. 그리고 나머지 설정은 디폴트로 가져가겠지만 실전에서는 조금 더 보안에 신경써야 겠죠?

api-7

8. 이제 람다가 만들어 졌습니다. 파란색 버튼은 항상 누르고 싶습니다. Test를 눌러 테스트를 해보니 아래와 같이 헬로월드가 잘 출력됩니다. (다행입니다)

api-8
9. 이제 다시 API Gateway로 돌아가 아까 못채운 Lambda 지역과 이름을 적어 줍니다.

api-9
10. 이제 API를 Deploy 해 봅니다!!  거의 끝났습니다.

api-10
11. Deploy API 의 이름을 지정해 줍니다.

api-11
12. API가 Deploy 되었습니다. Stages 탭에서 Endpoint URL 을 클릭해 줍니다 !

api-12
13. 완성이 되었습니다 ! 웹브라우저에서 정상적으로 헬로 월드를 출력합니다.

api-13
14. 로그는 대시 보드 혹은 Cloudwatch를 사용해서도 모니터링 가능합니다.

api 14.PNG

15. 끝

Lambda 로컬에서 Test 하기 (Node.js)

js파일을 로컬에서 테스트하려면 grunt-aws-lambda 사용

사용법

npm install -g grunt-cli   ( 필요시 npm update -g npm 우선)
npm install grunt-aws-lambda --save-dev
npm init     (package.json 파일 dependencies 필요시 수정)
npm install --save-dev    (index.js event.json Gruntfile.js등 준비)
cd node_modules
grunt lambda_invoke

이상이 없으면 zip파일로 압축하여 aws lambda (cli) 로 업로드하여 사용한다.

 

<참고>

Amazon-linux 에서 npm 쉽게 설치하기

sudo yum install epel-release
sudo yum install nodejs npm --enablerepo=epel

Lambda 로컬에서 Test 하기 (Python)

Py파일을 로컬에서 테스트하려면 Emulambda 사용

사용법

Git clone https://github.com/fugue/emulambda/
pip install -e emulambda
emulambda -v <lambdafunction>.<lambdahandler> <event.json>

IAM Role 사용시

emulambda -v <lambdafunction>.<lambdahandler> <event.json> arn:aws:iam::012345678912:role/lambda_basic_execution

이상이 없으면 zip파일로 압축하여 aws lambda (cli) 로 업로드하여 사용한다.